::title::
Yusuke Wada
Hono Conference 2026 ・ October 11, 2026
::center size=1.5 bg=white::
時代
::center::
Hono Conference 2025
2025/10/18
-# api.npmjs.org
::right::

express → 2.7倍react → 3.8倍next → 4.1倍zod → 6.3倍hono → 30.8倍-# 2025年9月 → 2026年9月の月間ダウンロード
@modelcontextprotocol/sdk(v1) → @hono/node-server / hono@modelcontextprotocol/node(v2) → @hono/node-server@modelcontextprotocol/hono(v2) → Hono用ミドルウェア-# 直近1ヶ月 → v1 2.58億、v2 server 3,130万
-# honojs/hono
::center::
明らかに新しい時代
::center::
何が変わった??
::center size=1.5 bg=white::
開発
::center::
10月5日
honojs/hono → PRを閉じる
::center::

::center::

::center::
OSSは死んだ?
::center::

::center::
開発が変わった
::center size=1.5 bg=white::
ユーザー
::center::
人間がコードを書かなくなった
→ AIがコードを書く
::center::
「package.jsonの中を見なくなる」
::center::
「Honoのことを人間は忘れてしまう」
::right::

::center::

::right::
claude -p "TODOアプリをつくって。追加、編集、削除ができるように" \
--model opus --output-format stream-json
::center size=1.5::
Adoption
::center::
AIはHonoを使うのか??
::wide::
::wide::

::wide::

package.jsonにhonoがあると使うpackage.jsonにhonohonoなし → 素のハンドラ、itty-router、Express-# claude-haiku-4-5・n=5・福岡のあとに追加で計測
::center size=1.5::
Value
::center::
Honoを使うことはAIにとって効果的か??
::wide::
::wide::

honoがあればAIはHonoを使う::center size=1.5 bg=white::
DX
::center::
ユーザーが変わるなら、DXも変わる
const app = new Hono().get('/posts/:id', (c) => {
return c.json({ id: c.req.param('id') })
})
export type AppType = typeof app
const client = hc<AppType>('/')
const res = await client.posts[':id'].$get({ param: { id: '123' } })
::center::
型を頑張る、RPC → エディタの型補完 → 人間向けのDX
-# honojs/hono・タイトルに RPC / hc / hono/client を含むissue
tscで確かめることができる::center size=1.5::
Practical
create-honoで作ったCloudflare Workersのテンプレをそのまま使うpackage.jsonに"dev": "wrangler dev"wrangler devを起動::center size=1.5 bg=white::
設計
::center::
フレームワークのAPI設計はどうすればいいか?
::center::

::center::

::center::
Hono
::center size=4 bg=white::
v5
hono → 5.0.0-rc.1create-hono → 0.20.0-rc.1-# npm i hono@next etc.
@hono/*::right::
-# hono 4.13.13 vs 5.0.0-rc.1(npm)
// v4
import { serveStatic } from 'hono/bun'
// v5
import { serveStatic } from '@hono/bun'
@hono/bun / @hono/deno / @hono/aws-lambda / @hono/vercel ...hono/cloudflare-pages → 廃止、Workersを使うonError() / notFound() → ミドルウェアに// v4
app.onError((err, c) => c.text('Error', 500))
// v5
app.onError((c) => c.text('Error', 500)) // c.error
(c, next) → 普通のミドルウェアと同じ形notFound()も同じ仕組みにapp.onError('/items/*', (c) => c.text('Items Error', 500))
app.onError(async (c, next) => {
console.error(c.error)
await next()
})
app.onError((c) => c.text('Error', 500))
notFound()が効くconst api = new Hono()
api.notFound((c) => c.json({ error: 'Not Found' }, 404))
app.route('/api', api)
app.notFound((c) => c.text('Page not found', 404))
/api/nope → v4: Page not found / v5: {"error":"Not Found"}notFoundしか使われないthrow → onErrorc.req.query() → undefinedも含むc.req.json() → unknownを返すc.json() → JSONにできない値はthrowapp.mount() / app.fire() etc.defineHandler()バリデーションを迷わず書ける
import { defineHandler } from 'hono/factory'
app.post(
'/users/:id',
defineHandler({
param: ParamSchema,
json: BodySchema,
response: UserSchema
})(async (c, { param, json }) => {
c.status(201)
return { id: param.id, ...json }
})
)
defineHandler()app.request()で直接リクエストhono --help → AI向けの説明から始まるhono requesthono request /posts/1
{
"ok": true,
"data": {
"status": 200,
"headers": { "content-type": "application/json" },
"body": { "id": "1", "title": "Hello" }
}
}
hono batchhono batch - <<'EOF'
{"method":"POST","path":"/posts","body":{"title":"Hono"},"expect":{"status":201}}
{"path":"/posts/1","expect":{"status":200,"body":{"id":"1"}}}
EOF
expect → 期待するレスポンスを書く"failed": 0 になるまで直すhono routes → ソースを読まずにルート一覧hono snapshot → 今の挙動をbatchの形で出す → リファクタの前に--runtime workerd → 本物のバインディング(KV、D1、AI)で動かす--runtime vite → Viteプラグインで組むアプリも(request / batch)hono snapshot / hono batchで確かめる-# Agent DX・build-endpoints-workers・CLI + Skills
::wide::
(npx cf dev --port 8799 &) ; ./check.sh ; pkill -f "cf dev --port 8799"
pkill -f viteで他のサーバーまで止めるcf devを起動 → curl → pkill -f viteを2回hono batchを1回ずつ → サーバーなし-# Opus・1回ずつ
create-honoのテンプレにAGENTS.md + Hono CLInpm run devは人間のため」## Hono CLI
Run `npx hono --help` first, and use the CLI instead of a dev server.
hono → APIリファレンス + Hono CLIの使い方hono-jsx → hono/jsxでUInpx skills add honojs/skills
Accept: text/markdown/llms.txt / /llms-full.txt::center size=1.5::
Demo
::center size=1.5::
ありがとうございました
::center bg=white::
One more thing
::center::
Honoをopinionatedなフルスタックにする
// Hono v5
import { defineHandler } from 'hono/factory'
app.post(
'/posts',
defineHandler({ json: PostSchema })(async (c, { json }) => {
return { received: true }
})
)
::right::
// Void
import { defineHandler } from 'void'
export const POST = defineHandler(async (c) => {
return { received: true }
})
::center::
???
::center::

::center::
Void by VoidZero
-# void.cloud
::center size=2 bg=white::
Hono v5
::center size=1.5::
npm create hono@next