2022年9月、node-backend-sample で Express + TypeScript の API 雛形を作った。Next.js の API Routes だけだと手狭になってくる規模のとき用に、独立した API サーバの型を一度ちゃんと作っておきたかった。

構成

ただ Express を立てるだけじゃなくて、DB とテストまで一通り入れた。

  • Express + TypeScript
  • Prisma(schema.prisma + マイグレーション + seed.ts
  • Jest(userController.spec.ts
  • docker-compose で DB を立てる

コミットも prisma setupexpress user routetest jest の順で、足場 → ルート → テストと積んでいった跡が残っている。src/controllers/userController.ts に対して userController.spec.ts を並べて置く、というレイヤ + テストの形をここで決めた。

学び

Express 自体は枯れていて安心なんだけど、最初にディレクトリ構成と型を決めないと、すぐスパゲッティになるのが正直なところ。controller / route / utils を分けて、Prisma を DB アクセスの一枚に挟む、くらいの規律を最初に敷くと後が楽だった。

resetDatabase.ts みたいなテスト用のリセットを用意しておくと、Jest を回すときに状態が汚れなくて良い。テストを書く前提で組むと、自然と関数が小さくなる、というのも実感した。

おわり

この雛形は本番投入したわけではないけど、「独立 API を切るならこの形」という基準になった。とはいえ Express は記述量が多いので、このあと Hono に流れていく。node-backend-sample は、Hono / Cloudflare Workers に移る前の、重い方の経験として残っている。