今回は少し寄り道して、作者がこのEnginemixをどう組み立てたのか、二人で中を覗いてみよう。実際に動いているサイトなら、技術同士のつながりも見えやすい。
自分たちがいる場所の裏側を見るんですね。画面はNext.jsらしいですけど、データベースもNext.jsから直接操作しているんですか?
公開画面とデータ操作は役割を分けている。画面はNext.jsで静的HTMLとして生成し、APIはCloudflare Worker、データはCloudflare D1に置く構成だ。
Browser
├─ Static HTML / CSS / JavaScript
│ └─ generated by Next.js
└─ /graphql
└─ Cloudflare Worker
└─ GraphQL Yoga
└─ Drizzle ORM
└─ Cloudflare D1
ひとつのサイトに見えても、表示とAPIは別の仕組みなんですね。
そう。ただし利用者から見えるURLは同じだ。Workerは
/graphql ならAPIとして処理し、それ以外なら静的ファイルを返す。境界は内部に隠れている。
GraphQLのスキーマはPothos、データベース操作はDrizzle ORMで型を保ちながら記述している。フロントエンドでは生成済みのGraphQL型を使うので、クエリ結果の形もTypeScriptで確認できる。
全部をNext.jsのサーバー機能で作らなかったのは、なぜですか?
このサイトは
output: 'export'
を使い、公開部分を静的ファイルにできるからだ。配信は単純で高速になる一方、静的ファイルだけではDBを更新できない。その不足をWorkerが担当する。
大事なのは、採用技術の数ではなく役割の境界だ。「誰がHTMLを作るか」「誰がデータを変更するか」「どこで認証するか」を追うと、アーキテクチャを読み解きやすいよ。

