最近、開発者の間でじわじわと注目を集めているフレームワークのひとつが「Hono」です。名前の通り“炎”を思わせる軽量かつ高速な特性が話題となっており、Node.jsのバックエンドといえばExpressという印象が強かった私も、思わず試してみました。以下では、Honoの特徴やExpressとの違いを簡単にまとめています。
結論から言うと、Honoはかなり気軽に使えそうで、一般的に高速と評価されています。そしてなにより書きやすそう。ただ、まだ情報が少なかったり、大規模向けではないかな?と感じた部分もありました。
Honoってどんなフレームワーク?
Honoは、TypeScriptで書かれた超軽量なWebフレームワークで、公式サイトには簡単な導入方法やサンプルコードも掲載されています。
- ミニマル構成
- TypeScript完全対応
- ESM前提
- Cloudflare Workers、Bun、Deno、Node.js対応
Honoの公式サイトでは「Fast, lightweight, built on Web Standards. Support for any JavaScript
runtime.」というキャッチコピーが掲げられており、モダンな開発環境を意識した設計になっています。
実際に、Cloudflare Workers や Bun、Deno、Node.js など幅広い JavaScriptランタイムに対応しており、軽量で高速、そしてWeb標準に基づいた開発ができる点が特徴です。
Expressとのざっくり比較
ここでは、Node.jsで定番のバックエンドフレームワークであるExpressと、Honoの違いをざっくりと比較してみました。
Expressは長年使われてきた安心感のあるフレームワークですが、モダンな開発体験や軽量さ、実行環境の柔軟性という面では、Honoに軍配が上がるのではないでしょうか。
目的やプロジェクト規模に応じて、どちらを選ぶかの判断材料になればと思います。
| 項目 | Express | Hono |
|---|---|---|
| 初期設定 | 多い(ボディパーサーやCORSなど) | 最小構成ですぐ動く |
| ESM対応 | CommonJS前提(ESMは設定が必要) | 最初からimport/export対応 |
| TypeScript対応 | 手動で型定義が必要なことも | 最初から型強い |
| パフォーマンス | 標準的 | 非常に高速 |
| ランタイム対応 | Node.jsのみ | Bun, Workers, Denoにも対応 |
| コミュニティ | 成熟・豊富 | 成長中 |
Honoの始め方
今回は実際に「React + Hono」でメモ帳アプリを作ってみた時のセットアップです。
npmやBunを使ったプロジェクトの作成・起動までの流れです。
# npmでHonoプロジェクトを作成(対話式) npm create hono@latest # プロジェクトフォルダで開発サーバー起動 npm run dev
# BunでHonoプロジェクトを作成(プロジェクト名を指定) bun create hono my-hono-app # プロジェクトフォルダで開発サーバー起動 bun run dev
HonoとExpressの構文の違い
HonoとExpressで、よくあるAPIの書き方を比べてみました。
どちらも似たように使えますが、構文やミドルウェアの記述に違いがあります。
メモ帳アプリを作ってみた時の、Expressとの違いをシンプルなAPIのコード比較(一部抜粋)でまとめています。
Expressの例
// index.ts(Express + Node.js 用)
import express from 'express'
import cors from 'cors'
const app = express()
// CORS設定(React dev server からのアクセスを許可)
app.use(cors({
origin: 'http://localhost:3000',
methods: ['GET', 'POST', 'PUT', 'DELETE'],
allowedHeaders: ['Content-Type'],
}))
// JSONボディのパース
app.use(express.json())
let memos = []
// GET: メモ一覧取得
app.get('/api/memos', (req, res) => {
res.json({ success: true, data: memos })
})
// POST: メモ作成
app.post('/api/memos', (req, res) => {
const { title = '', content = '' } = req.body
const newMemo = {
id: Date.now(),
title,
content,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
memos.push(newMemo)
res.status(201).json({ success: true, data: newMemo })
})
// 通常のNode.jsサーバー起動
app.listen(8000, () => {
console.log('Express API running at http://localhost:8000')
})
Honoの例
// index.ts(Hono + Bun 用)
import { Hono } from 'hono'
import { cors } from 'hono/cors'
const app = new Hono()
// CORS設定(React dev server からのアクセスを許可)
app.use('/*', cors({
origin: 'http://localhost:3000',
allowHeaders: ['Content-Type'],
allowMethods: ['GET', 'POST', 'PUT', 'DELETE'],
}))
let memos = []
// GET: メモ一覧取得
app.get('/api/memos', (c) => {
return c.json({ success: true, data: memos })
})
// POST: メモ作成
app.post('/api/memos', async (c) => {
const body = await c.req.json()
const newMemo = {
id: Date.now(),
title: body.title || '',
content: body.content || '',
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
memos.push(newMemo)
return c.json({ success: true, data: newMemo }, 201)
})
// Bun特有の起動形式(Node.jsでの `app.listen()` とは異なる)
export default {
port: 8000,
fetch: app.fetch,
}
Expressでは req、res、next を使って処理を組み立てますが、
Honoでは Context (c) ひとつでリクエストとレスポンスのやり取りが完結するのが大きな特徴です。
ミドルウェアの適用方法にも違いがあり、Honoでは app.use('/user/list', middleware) のように
ルート単位で簡潔にミドルウェアを設定できるようで、特定のルートにだけ認可処理を適用するといった実装も非常にわかりやすく、責務を明確に分離しやすいため、コード全体の構造をすっきり整理できるのがいいですね。
主な違いまとめ
| 項目 | Express | Hono |
|---|---|---|
| 記述方式 | req, res, next を明示的に使用 |
Context (c) ひとつに集約 |
| 型安全性 | やや弱い(JavaScript中心) | TypeScript前提で高い型安全性 |
| ミドルウェア導入 | 外部ライブラリを個別に追加 | 公式ミドルウェアを簡潔に導入可能 |
| ルーティングの柔軟性 | /apiなど個別設定 |
/api/*などワイルドカード対応 |
Honoが「爆速」と言われる理由
Honoが「とにかく速い」と言われているのは、いくつかの工夫があるようです。
- とにかく軽い:余計なライブラリが入ってなくてシンプル
- ルーティングが速い:RegExpRouterやTrieRouterという仕組みで素早く処理
- ミドルウェアが少ない:通る処理が少ないから無駄がない
- モダンな作り:TypeScriptやESM、Bun・Cloudflare Workers前提の設計
実際にHonoがどれだけ速いのかは、公式が出してるベンチマークを見るとよくわかります。
Hono公式のベンチマークはこちら
どんなプロジェクトでHonoを選ぶべき?
両方を比較してそれぞれの特徴が活きると感じたケースを簡単に整理してみます。
Honoが活躍しそうなケース
- 小〜中規模のREST APIを手軽に作りたいとき
- Cloudflare WorkersやVercel Edge Functionsなど、エッジ環境で動かしたいとき
- 短期間で立ち上げる試作・MVP(最小実用プロダクト)を素早く作りたいとき
- 軽量で高速なAPIを求めるとき(ルーティングやミドルウェアの処理が最小限)
- TypeScriptやESMを前提にしたモダンな開発環境で進めたいとき
Expressが向いているケース
- 複数の機能をまとめた大規模なWebアプリを作るとき
- Passportやcookie-sessionなど、既存のミドルウェアやプラグインを活用したいとき
- Node.js用のライブラリや資産をそのまま使いたいとき
- Expressの利用経験があるチームで、既存ノウハウを活かしたいとき
- セッション管理やOAuth2連携など、複雑な認証・認可を組み込みたいとき
(Honoでも実装可能だが、Expressは周辺ツールが豊富)
HonoはExpressの代替となるか?
Honoはまだ発展途上のフレームワークですが、「軽さ」「書きやすさ」「速さ」といった点で注目されています。
Expressのような手軽さはそのままに、よりモダンな開発スタイルを求める人にとっては、試してみる価値のあるフレームワークだと思います。
特にBunやCloudflare Workersといったエッジ環境との相性が良く、シンプルな構成を好むプロジェクトでも活用しやすそうです。
もし新しい選択肢を探しているなら、Honoを一度触ってみてはいかがでしょうか。