[{"data":1,"prerenderedAt":163},["ShallowReactive",2],{"content-doc:article:/articles/hono":3,"content-surroundings:article:/articles/hono":152},{"id":4,"title":5,"body":6,"date":137,"description":138,"extension":139,"kind":140,"meta":141,"navigation":142,"ogImage":143,"path":144,"seo":145,"sitemap":146,"stem":147,"tags":148,"updatedAt":143,"__hash__":151},"article/articles/hono.md","🔥Honoにはまってる",{"type":7,"value":8,"toc":135},"minimark",[9,18,25,28,35,38,116,119,128,131],[10,11,12,17],"p",{},[13,14,16],"a",{"href":15},"/diary/do","Durable Object で遊んでる"," でいろいろ試した後、 hono で書き直している",[10,19,20],{},[13,21,22],{"href":22,"rel":23},"https://hono.dev/",[24],"nofollow",[10,26,27],{},"めっちゃいい",[10,29,30,31,34],{},"apiがシンプルに書けるし、便利なミドルウェアが豊富",[32,33],"br",{},"\nzodとの連携も強くてバリデーションを書きやすい",[10,36,37],{},"自分が作っているものは規模が小さいといいつつ、Cloudflare D1 と Durable Object（アラームが使いたい）も触る。乱雑に作るとまずいので以下のアーキテクチャにしてる",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-sh shiki shiki-themes github-light","├── index.ts # 入口\n├── 機能名\n│   ├── controller # APIのふりわけ\n│   ├── domain # 型など\n│   ├── durable-object #  durable object alarm が呼ばれるときに処理（仮）\n│   ├── repository # D1クエリ（生）\n│   └── service # controllerから呼ばれるメソッド\n└── web # クライアント\n    ├── controller\n    ├── csr # CSRする部分 \n    └── ssr # ssrで返すベースのhtml\n","sh","",[46,47,48,56,62,68,74,80,86,92,98,104,110],"code",{"__ignoreMap":44},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,55],{},"├── index.ts # 入口\n",[49,57,59],{"class":51,"line":58},2,[49,60,61],{},"├── 機能名\n",[49,63,65],{"class":51,"line":64},3,[49,66,67],{},"│   ├── controller # APIのふりわけ\n",[49,69,71],{"class":51,"line":70},4,[49,72,73],{},"│   ├── domain # 型など\n",[49,75,77],{"class":51,"line":76},5,[49,78,79],{},"│   ├── durable-object #  durable object alarm が呼ばれるときに処理（仮）\n",[49,81,83],{"class":51,"line":82},6,[49,84,85],{},"│   ├── repository # D1クエリ（生）\n",[49,87,89],{"class":51,"line":88},7,[49,90,91],{},"│   └── service # controllerから呼ばれるメソッド\n",[49,93,95],{"class":51,"line":94},8,[49,96,97],{},"└── web # クライアント\n",[49,99,101],{"class":51,"line":100},9,[49,102,103],{},"    ├── controller\n",[49,105,107],{"class":51,"line":106},10,[49,108,109],{},"    ├── csr # CSRする部分 \n",[49,111,113],{"class":51,"line":112},11,[49,114,115],{},"    └── ssr # ssrで返すベースのhtml\n",[10,117,118],{},"serviceとrepositoryはクラスじゃなくて純粋な関数にしている。規模が大きくなって辛くなってきたら考える。",[10,120,121,122,127],{},"クライアント側は、正直 pages にformをおいてworkerのapiを叩くのでもいいけど、",[13,123,126],{"href":124,"rel":125},"https://hono.dev/docs/guides/jsx-dom",[24],"jsx-dom","を試したくてこういう構造にしている。",[10,129,130],{},"楽しいなぁ、もっと深く触りたい",[132,133,134],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":44,"searchDepth":58,"depth":58,"links":136},[],"2026-02-06T00:00:00.000Z","🔥","md","tech",{},true,null,"/articles/hono",{"title":5,"description":138},{"loc":144},"articles/hono",[149,150],"hono","Cloudflare","TMFJJMnwSr-hipBvHuvg_18lbnaatBp-YMgTIWVZEB8",[153,158],{"title":154,"path":155,"stem":156,"date":157,"children":-1},"Codex CLI が web_search 設定が非推奨と言っていくる","/articles/duplicate-web-search","articles/duplicate-web-search","2026-02-10T00:00:00.000Z",{"title":159,"path":160,"stem":161,"date":162,"children":-1},"ペイロードを見る","/articles/dev-tool-payload","articles/dev-tool-payload","2026-02-01T15:00:00.000Z",1772952405473]