Hono で軽量 API サーバーを書いたら、シンプルさと型安全さに驚いた話

TypeScript フレームワーク Hono を個人開発の API に導入してみたところ、型付きルーティングの書き心地がかなり良く、Cloudflare Workers にもそのまま乗せられました。

🙌 結論から

個人開発のバックエンド API を Hono で書いてみたところ、型安全なルーティングとシンプルな構文のバランスがかなり良かったです!

Hono は TypeScript で書かれた軽量 Web フレームワークで、Express に慣れた人なら即戦力として使えます。

Cloudflare Workers、Deno、Bun、Node.js など複数のランタイムに対応しているので、デプロイ先を選ばない柔軟さも魅力ですね(^o^)/

Express ほど自由すぎず、NestJS ほど重くない、というのが、個人開発や小規模のAPIにはちょうどいいと感じました。

💡 Hono を選んだ理由

もともと個人開発では Express を使っていましたが、TypeScript との相性の弱さがちょっと気になっていました。

req.body の型が any になるため、毎回キャストが必要で、型の安全性を担保するのが少し面倒です…(´・ω・`)

かといって tRPC は学習コストが高く、小規模なAPIサーバーにはオーバースペックに感じることがありました。

Hono はルーティングの時点でリクエスト・レスポンスに型が付き、バリデーションも組み込みで書けます!

GitHub のスター数の伸びが続いていて、コミュニティも活発だったのも導入してみました✨

👀 実際のコード

インストールはシンプルです。

npm install hono

基本的なルーティングはこう書きます。

import { Hono } from 'hono'

const app = new Hono()

app.get('/hello', (c) => {
  return c.json({ message: 'Hello, World!' })
})

app.post('/users', async (c) => {
  const body = await c.req.json()
  return c.json({ id: 1, ...body }, 201)
})

export default app

Express とほぼ同じ感覚で書けて、c.json() で型安全なレスポンスが返せます!

バリデーションは zod-validator ミドルウェアと組み合わせると便利です。

import { zValidator } from '@hono/zod-validator'
import { z } from 'zod'

const schema = z.object({
  name: z.string(),
  age: z.number(),
})

app.post('/users', zValidator('json', schema), (c) => {
  const { name, age } = c.req.valid('json')
  // name, age は型付きで取得できる
  return c.json({ name, age }, 201)
})

c.req.valid('json') で取り出した値には自動で型が付くので、as キャストが一切不要になります(`・ω・´)

✨ 使ってみた感想

一番は、コードが短くて読みやすいことですね。シンプルが一番なので、私にはこれが良かったです😋

Express で同じことをやろうとすると、ミドルウェアの組み合わせや型定義でかなりボイラープレートが増えますが、Hono は必要最低限のコードで完結します。

Cloudflare Workers へのデプロイも試してみましたが、設定ファイルをほぼ変えずにそのまま動いたので移行は特段問題なさそうです!

Worker の fetch ハンドラと Hono の app.fetch が直接対応しているので、ランタイムの差分をほとんど意識しなくていいんですよね。

一点だけ注意が必要だと感じたのは、Express エコシステムのミドルウェアは基本的に使えないことです(・_・;)

ただ Hono 公式のミドルウェア一覧が充実してきていて、JWT 認証・CORS・圧縮あたりは公式でカバーされています。

パパ系Webエンジニア〜愛用ガジェット一覧 🛍️

この記事を書いている作業環境のガジェットを楽天ROOMにまとめています ✨ 在宅エンジニアのデスク作りの参考にどうぞ 🙌

👍 まとめ

Hono は軽量でありながら TypeScript との相性が良く、個人開発の小規模なAPIサーバーとして非常に書きやすいフレームワークでした!

Express の感覚で入れて、型安全さはかなり上の体験が得られるので、乗り換えを検討している方にはぜひ試してほしいです。

Cloudflare Workers との組み合わせも相性が良く、インフラのコストを抑えたいプロジェクトにも向いていると思います。

これから個人開発でバックエンドを作るときは、Hono を第一候補にしようと思っています(^^)