🔥

ExpressとHonoを比較してみた

に公開

はじめに

バックエンジニアをしている角方です!

最近、Zennや技術記事で「Hono (ホノ)」っていう名前をよく見かけます。
「すごく速くて軽い」「使いやすい」と言われていますが、Expressしか触ったことがないと、正直「何が違うの…?」ってピンと来ませんでした。
そこでこの記事では、ExpressとHonoを比べたとき、何がどう違うのかを自分なりに軽く調べてまとめてみました。 同じようにHonoが気になっている人の参考になれば嬉しいです!

Honoってどんなフレームワーク?

https://hono.dev/

早速Geminiに聞いてみました

Hono(ホノ)は、**「速い・軽い・どこでも動く」**をウリにした、新しいJavaScriptのWebフレームワークです。

Honoの主な特徴
⚡️ とにかく速くて、軽い
難しいライブラリに頼っていない(依存関係ゼロ)ので、動作がとても高速です。特に、プログラムが起動するまでの時間(コールドスタート)が短いため、サーバーレス環境で有利です。

🌐 どこでも動く
Expressが基本的にNode.jsで動くのに対し、Honoは Node.js はもちろん、Bun や Deno、さらには Cloudflare Workers や Vercel Edge Functions といった「エッジ環境」でも同じコードで動きます。

✍️ 書き方がモダン
ブラウザで使われる技術をベースにしているので、一度覚えれば他の環境でも応用が利きやすいです。TypeScriptとの相性も抜群です。

ひとことで言うと、**「Expressのシンプルさは好きだけど、もっと速くて、色々な新しい環境(特にエッジ)で動かしたい!」**という要望に応えてくれるフレームワークです。

「速い・軽い・どこでも動く」がウリのようですね!
特に「速さ」と「書き方」が気になったのでちょっとまとめてみます。

どれくらい速い?

速いって言われても「どれくらい速いんだ」って思うので、しっかり数字で出しましょう。
以下のベンチマークを見てみると…

https://fastify.dev/benchmarks/

2025年11月時点で

Express Hono
10035 req/sec 37834 req/sec

ざっくりですが、3.7倍ほど速いっぽいです。
想像よりも大きな差でした…!パフォーマンスはHonoの方が気になりますね。
RegExpRouterがとにかく爆速なのだとか。

書き方はExpressと違う?

いくら速くて軽くても、学習コストが高すぎると辛い…。
ExpressとHonoの基本的な書き方を比較します!
(コード作成はGeminiに手伝ってもらいつつ)

文字表示

Express
import express from 'express';
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello Express!');
});

app.listen(port, () => {
  console.log(`Server listening on port ${port}`);
});
Hono
import { Hono } from 'hono';
import { serve } from '@hono/node-server'; // Node.js用のアダプタ

const app = new Hono();

app.get('/', (c) => {
  // c = Contextオブジェクト
  return c.text('Hello Hono!');
});

serve(app); 

JSONのPOSTリクエスト

Express
import express from 'express';
const app = express();

// JSONをパースするミドルウェアが必要
app.use(express.json());

app.post('/api', (req, res) => {
  const body = req.body;
  res.json({ message: 'OK', data: body });
});
// (app.listenは省略)
Hono
import { Hono } from 'hono';
import { serve } from '@hono/node-server';

const app = new Hono();

app.post('/api', async (c) => {
  const body = await c.req.json(); // reqから直接json()を呼ぶ
  return c.json({ message: 'OK', data: body });
});

serve(app);

URLパラメータの取得

Express
// :id がURLパラメータ
app.get('/user/:id', (req, res) => {
  // req.params からIDを取得
  const userId = req.params.id;
  
  res.json({ 
    message: `User ID ${userId} の情報を取得しました` 
  });
});
Hono
// :id がURLパラメータ
app.get('/user/:id', (c) => {
  // c.req.param() からIDを取得
  const userId = c.req.param('id');
  
  return c.json({ 
    message: `User ID ${userId} の情報を取得しました` 
  });
});

比較したところ

そこまで大きな違いは見られませんでした。
Expressを使ったことがあればHonoも難なく使い始めることができる気がします!
Honoのために学習時間をかなり要する、ということはしなくてよさそうですね。

おわりに

ざっくりとした比較調査にはなってしまいましたが、
Expressを触ったことがある人ならば、Honoを使った開発を経験してみたい!と個人的には思いました。
今回の記事ではメリットを多く含んでおりますが、やはりデメリットもあるようで…
そこはこれからHonoを使ってみて試行錯誤していきます!!

株式会社ソニックムーブ

Discussion