2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本人が作ったWebフレームワーク「Hono」が世界で爆発的に使われ始めている

2
Posted at

はじめに

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を支える存在になりつつあります。

そしてそれが日本から生まれたフレームワークだという事実は、日本のエンジニアにとって誇らしいことではないでしょうか。


参考:

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?