はじめに
npmの週間ダウンロード数 900万超。GitHub Star 2万8千超。前年比 340%成長。
これ、日本人が作ったWebフレームワークの数字です。
Hono(炎) ── 和田悠樹氏(@yusukebe)が2021年12月に作り始めた、エッジ・サーバーレス向けの超軽量Webフレームワーク。現在はCloudflareのDeveloper Advocateとして活動しながら開発を続けています。
「名前は聞いたことあるけど、Expressとどう違うの?」という方のために、Honoの全貌を解説します。
Honoとは何か
Honoは Web標準API(Fetch API) の上に構築された、軽量・高速なWebフレームワークです。
最大の特徴は 「どこでも動く」 こと。Cloudflare Workers、Deno、Bun、Vercel、AWS Lambda、Fastly Compute、そしてNode.js──JavaScriptが動く環境なら、同じコードがそのまま動きます。
// Honoの最小限のAPI
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hello Hono!'))
export default app
Expressを使ったことがある方なら、見覚えのある書き方だと思います。APIの設計はExpressに似ていますが、中身は全く違います。
なぜHonoはExpressより速いのか
Honoのレスポンス速度はExpressの 約4倍 です。なぜここまで差がつくのでしょうか。
1. ルーターが根本的に違う
ExpressはリクエストURLとルート定義を 上から順番に1つずつマッチング します(線形探索)。ルートが増えるほど遅くなります。
Honoは RegExpRouter という正規表現ベースのルーターを使い、すべてのルート定義を1つの正規表現にコンパイルします。ルートが100個あっても1000個あっても、マッチングは O(1)(一定時間) です。
【Expressのルーティング】
/api/users → チェック ✗
/api/posts → チェック ✗
/api/comments → チェック ✗
/api/tags → チェック ✓ ← 4回目でヒット
【Honoのルーティング(RegExpRouter)】
全ルートを1つの正規表現に合成 → 1回のマッチングで確定
さらにHonoは SmartRouter という仕組みで、ルートパターンに応じて最適なルーターを自動選択します。単純なルートにはTrieRouter、複雑なパターンにはRegExpRouterを使い分けます。
2. Web標準APIで動く
ExpressはNode.js独自のAPIに依存しています。reqオブジェクトやresオブジェクトはNode.js固有のもので、他のランタイムでは動きません。
Honoは Fetch API(RequestとResponse)というWeb標準の上に構築されています。これはブラウザ、Deno、Bun、Cloudflare Workers──すべてで共通のAPIです。抽象化レイヤーが不要な分、オーバーヘッドが小さくなります。
3. ゼロ依存、12KB
Honoの hono/tiny プリセットは 12KB以下 です。外部依存パッケージは ゼロ 。Expressはnode_modulesにいくつもの依存を持ちますが、Honoにはそれがありません。
エッジ環境ではバンドルサイズがそのままコールドスタート時間に影響するため、この軽さは決定的な優位性になります。
Expressとの比較表
| 比較項目 | Express | Hono |
|---|---|---|
| 初回リリース | 2010年 | 2021年 |
| バンドルサイズ | 約200KB + 依存 | 12KB以下(hono/tiny) |
| 外部依存 | あり | ゼロ |
| ルーティング速度 | 線形探索 | O(1) |
| API基盤 | Node.js固有API | Web標準(Fetch API) |
| TypeScript | 型定義は別パッケージ | ネイティブ対応 |
| 対応ランタイム | Node.js中心 | 11ランタイム対応 |
| エッジ/サーバーレス | 重すぎて不向き | 最適化済み |
| エコシステム | 非常に成熟 | 急成長中 |
| 週間DL数 | 約3,400万 | 約900万(前年比340%増) |
Honoが特に活きるユースケース
1. Cloudflare Workers でのAPI構築
Honoが最初に作られた理由がこれです。和田氏はCloudflare Workersで開発する際、既存のフレームワークが合わなかったためにHonoを作りました。
// Cloudflare Workers + Hono + D1(SQLite)
import { Hono } from 'hono'
type Bindings = {
DB: D1Database
}
const app = new Hono<{ Bindings: Bindings }>()
app.get('/api/posts', async (c) => {
const { results } = await c.env.DB
.prepare('SELECT * FROM posts ORDER BY created_at DESC LIMIT 10')
.all()
return c.json(results)
})
export default app
Cloudflare D1(エッジで動くSQLite)やR2(オブジェクトストレージ)との連携は、型安全に行えます。
2. マルチランタイムAPI
同じコードをCloudflare Workers、Deno Deploy、AWS Lambdaなど、複数の環境にデプロイしたいケースがあります。Honoならアダプターを差し替えるだけ で同じアプリケーションコードがどこでも動きます。
// Node.js用のアダプター
import { serve } from '@hono/node-server'
import app from './app' // Honoアプリ(共通コード)
serve(app, (info) => {
console.log(`Listening on http://localhost:${info.port}`)
})
// Bun の場合はアダプター不要(そのまま動く)
// bun run app.ts で起動
export default app
3. 型安全なAPIクライアント生成(RPC)
HonoにはRPC(Remote Procedure Call)機能が組み込まれており、サーバーのルート定義から 型安全なクライアント を自動生成できます。
// サーバー側
const route = app.get('/api/user/:id', async (c) => {
const id = c.req.param('id')
return c.json({ id, name: 'Taro', age: 30 })
})
// クライアント側(型が自動推論される)
import { hc } from 'hono/client'
const client = hc<typeof route>('http://localhost:8787')
const res = await client.api.user[':id'].$get({ param: { id: '1' } })
const data = await res.json()
// data.name → string型(自動推論)
tRPCのような型安全なAPI通信が、追加パッケージなしで実現できます。
組み込みミドルウェアが充実
Honoは軽量ですが、よく使うミドルウェアが標準で用意されています。
| ミドルウェア | 用途 |
|---|---|
hono/cors |
CORS設定 |
hono/jwt |
JWT認証 |
hono/logger |
リクエストログ |
hono/validator |
バリデーション(Zod対応) |
hono/cache |
キャッシュ制御 |
hono/compress |
レスポンス圧縮 |
hono/secure-headers |
セキュリティヘッダー設定 |
hono/html |
テンプレートリテラルでHTML生成 |
Expressではcors、helmet、morganなど個別にインストールが必要だった機能が、Honoでは最初から使えます。
Honoの弱点
公平に書きます。
エコシステムはまだ発展途上
Expressには13年分のミドルウェア、プラグイン、チュートリアル、Stack Overflowの回答が蓄積されています。Honoはまだ4年目であり、ニッチなユースケースではExpressのほうが情報が見つかりやすいです。
大規模なNode.jsモノリスには向かない
Honoはエッジ・サーバーレスに最適化されています。数十万行規模のNode.jsモノリスアプリケーションをHonoに移行するメリットは薄く、Expressのまま運用するほうが合理的です。
ORMとの統合パターンがまだ少ない
Prisma、Drizzle、TypeORMなどとの統合は可能ですが、Express + Prismaのようにドキュメントやテンプレートが潤沢ではありません。
5分で試してみる
# Honoプロジェクトを作成(対話形式でランタイムを選択)
npm create hono@latest my-api
cd my-api
npm install
# 開発サーバー起動
npm run dev
# → http://localhost:8787 でAPIが起動
npm create hono@latest を実行すると、デプロイ先を選択できます。
? Which template do you want to use?
cloudflare-workers
cloudflare-pages
deno
bun
nodejs
vercel
aws-lambda
...
Node.jsを選べばExpressの代わりとして使え、Cloudflare Workersを選べばエッジにデプロイできます。同じフレームワークで両方試せる のがHonoの強みです。
まとめ
| 項目 | 内容 |
|---|---|
| Honoとは | Web標準API上に構築された超軽量Webフレームワーク |
| 作者 | 和田悠樹氏(日本人。Cloudflare Developer Advocate) |
| なぜ速い | RegExpRouterによるO(1)ルーティング+ゼロ依存+12KB |
| 対応ランタイム | Cloudflare Workers、Deno、Bun、Node.js、Vercel、AWS Lambda 等11種 |
| 成長速度 | npm週間DL 900万超(前年比340%増)、GitHub Star 2.8万超 |
| 使うべきケース | エッジAPI、サーバーレス、マルチランタイム、新規プロジェクト |
| まだExpressのケース | 大規模モノリス、既存システムの保守 |
Honoは「Expressの後継」というよりも、「エッジ・サーバーレス時代のWeb標準フレームワーク」 です。Expressが2010年代のWebを支えたように、Honoが2020年代後半のWebを支える存在になりつつあります。
そしてそれが日本から生まれたフレームワークだという事実は、日本のエンジニアにとって誇らしいことではないでしょうか。
参考: