2023年、hono-practice と hono-pages の2リポで Hono を触った。Express の重さに疲れていたので、軽いやつを試したかった。
Hono を選んだ理由
- 軽量(Express より圧倒的に小さい)
- Cloudflare Workers / Deno / Node どこでも動く
- TypeScript ファースト
import { Hono } from 'hono';
const app = new Hono();
app.get('/api/hello', (c) => c.json({ message: 'hello' }));
export default app;
hono-practice — Workers + D1 で CRUD
ただ Hello World だと分からないので、contacts(問い合わせ)の CRUD を Workers + D1 で作った。
src/routes/contacts.tsでルーティングsrc/logic/contacts.tsにロジックを分離src/pages/Top.tsxで JSX のページ表示wrangler.toml+ ローカル D1(.wranglerに sqlite ができる)
コミットが init → curd(typo そのまま)→ routes分割 → page jsx → ページ表示、ロジック分離 と進んでいて、ルートとロジックを分けるところまでを一気にやった跡が残っている。c.json や JSX レンダリングが最初から自然に書けて、「これは Express の代わりになるな」と早々に思った。
hono-pages — 静的ページ + API を1本で
秋に作った hono-pages は、Tailwind を入れて静的ページ + API を Hono 1本でまかなう実験。Dockerfile も足して、配信まで含めて確かめた。のちの 2rab-analytics(Hono JSX で UI も API も)や honox 試作の基礎になった。
学び
2023年時点で Hono は「Express の後継候補」というより、Workers 開発では事実上のデファクトになりつつあった。軽くて、エッジで動いて、JSX も書ける。このあと自分の個人 API 層は、だいたい Hono + Cloudflare がデフォルトになった。