hono, prisma, cloudflare

Naoki Tomita Naoki Tomita December 26th, 2025 #life #typescript

今年からプログラマーの仕事はぐっと減らし、リモートで週2,3日程度だけ受けています。ちょうど、fluct時代にお世話になったもっちーさんが独立してさっそく困っているということでお手伝いをしてました。【PR】もっちーさんはお手伝いを募集中!

1年ほどやってみての所感を放流しておきます。全体的にはAIに向いていて楽

Cloudflare

SimpleというよりEasyなのだがよくできてて好き。めんつゆ最高

DuckDBを使いたくて(Betaの)Cloudflare Containers使ったが、npm run dev でdocker build/runが走ってすんなり使え、「コンテナがDIされた」と感心した。1

Hono

OpenAPI定義をどちらでやるか

@hono/zod-openapihono-openapi を使う2パターンがあって名前も似てて検索結果も混じりやすい。標準honoのapi2 に乗っかる方が好みなので、middlewareスタイルであるhono-openapiの方を利用した。とはいえ、実ハンドラーコードの前にどっちゃりopenapiの定義、zodの定義が乗るので見通しは微妙。

一件エッジケースのPRを送った→※merge済

Prisma

型とスキーマ管理が欲しいし有名だから選択したけど…、後悔している。ORMはやっぱ自分の足元を撃つ。kyselyとかの方が良かったか

prisma generator(@prisma/generator-helper)は楽しい

protobufを思い出した。今回作るのがActive RecordっぽいCRUDハンドラーだったので、まるっとgenereate。DMMF構造体からリレーションの情報とか取りやすければ良いのだけど、モデル名・テーブル名・フィールド名だけでもけっこうやりたいことはできる

CIでのファイルの生成時(つまりcloudflare環境ではないnode環境)で、cloudflare:workers moduleが読まれると動かないので、遅延読み込みにするのをして対応したがもっといいやり方があるのかもしれない

const { getContainer } = await import('@cloudflare/containers')

D1 migrationをどちらでやるか

prismaを使う場合、Cloudflare D1のマイグレーション管理のやり方は2パターンあるが、今回ターゲットがD1ということと+prismaのロックオンを避けたい気持ちでBのwranglerコマンドを使う方にした。

具体的には、schema.prismaをいい感じにしたあと、こんなので差分をmigrationファイルとして出力させて(必要なら微調整)

npx prisma migrate diff --from-local-d1 --to-schema-datamodel schema.prisma --script > db/migrations/0002_aaaaa.sql

ローカルで適用して確認、その後本番適用

find .wrangler/state/v3/d1/miniflare-D1DatabaseObject/ -type f -name '*.sqlite' -delete
npx wrangler --env test d1 migrations apply test-db --local
  1. 実稼働には、暖気設定とかがほしくなりそうではある。batchで暖気を入れている 

  2. honoのapiはmiddleware/handlerが、next呼ぶか/returnするかの違いってのが綺麗なデザインだなと思うところ。