2023年、hono-practicehono-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 ができる)

コミットが initcurd(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 がデフォルトになった。