このリポジトリは Cloudflare Workers 上で Next.js App Router を動かし、D1 Database を Drizzle ORM で操作する 最小かつ実践的なサンプルです。
- ローカル環境のみで動作
- D1(SQLite)を使用
- Drizzle ORM による型安全な DB 操作
- Next.js App Router + Edge Runtime
- Cloudflare Workers 実行環境
- D1 Database(ローカル / 本番対応)
- Drizzle ORM(型安全)
- API 実装(GET / POST)
- マイグレーション管理
- Runtime: Cloudflare Workers
- Framework: Next.js (App Router)
- Database: Cloudflare D1 (SQLite)
- ORM: Drizzle ORM
- Dev Tool: Wrangler
.
├─ app/api/todos/route.ts # API Route
├─ drizzle/
│ ├─ schema.ts # Drizzle schema
│ └─ migrations/ # SQL migrations
├─ src/lib/db.ts # DB helper
├─ wrangler.toml
├─ drizzle.config.ts
└─ package.json
npm installnpx drizzle-kit generatenpx wrangler d1 migrations apply local-db --localnpm run dev全ての TODO を取得します。
curl http://localhost:8787/api/todosTODO を追加します。
curl -X POST http://localhost:8787/api/todos \
-H "Content-Type: application/json" \
-d '{"title":"Buy milk"}'- D1 マイグレーション適用後は 必ず
wrangler devを再起動してください - Route Handler では
getCloudflareContext()を使用しません env.DBは 実行時のみ存在します(型には書きません)
MIT License
This repository is a minimal and practical example of running Next.js App Router on Cloudflare Workers and using D1 Database with Drizzle ORM.
- Runs entirely in local development
- Uses D1 (SQLite)
- Type-safe database access with Drizzle ORM
- Next.js App Router + Edge Runtime
- Cloudflare Workers runtime
- D1 Database (local / production)
- Drizzle ORM (type-safe)
- API routes (GET / POST)
- Migration management
- Runtime: Cloudflare Workers
- Framework: Next.js (App Router)
- Database: Cloudflare D1 (SQLite)
- ORM: Drizzle ORM
- Dev Tool: Wrangler
.
├─ app/api/todos/route.ts # API Route
├─ drizzle/
│ ├─ schema.ts # Drizzle schema
│ └─ migrations/ # SQL migrations
├─ src/lib/db.ts # DB helper
├─ wrangler.toml
├─ drizzle.config.ts
└─ package.json
npm installnpx drizzle-kit generatenpx wrangler d1 migrations apply local-db --localnpm run devFetch all TODO items.
curl http://localhost:8787/api/todosCreate a new TODO item.
curl -X POST http://localhost:8787/api/todos \
-H "Content-Type: application/json" \
-d '{"title":"Buy milk"}'- Always restart
wrangler devafter applying migrations - Do not use
getCloudflareContext()in Route Handlers env.DBexists only at runtime (do not type it explicitly)
MIT License