Cloudflare D1 は、Cloudflare Workers/Pages 上で動作する SQLite 互換のサーバーレスデータベースです。従来のマネージドDBとは異なり、エッジに近い場所でクエリが実行されるため、レイテンシを大幅に削減できます。
D1 の特徴
- SQLite 互換の SQL 構文が使える
- Cloudflare のエッジネットワーク上で動作
- Wrangler CLI でローカルエミュレーションが可能
- マイグレーションの仕組みが組み込まれている
- 無料枠でも十分な容量と読み取り数が使える
wrangler.toml の設定
D1 を使うには wrangler.toml にバインディングを追加します。binding の名前が Workers/Pages のコードから参照するキーになります。
toml
[[d1_databases]]
binding = "DB"
database_name = "my-database"
database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"ローカルでの開発
wrangler はローカル実行時に自動で SQLite ファイルを .wrangler/state/v3/d1/ 以下に作成します。本番と同じ SQL が実行できるため、開発中のスキーマ変更も安心してテストできます。
bash
# テーブル作成
wrangler d1 execute DB --local --command="CREATE TABLE posts (id INTEGER PRIMARY KEY, title TEXT)"
# データ確認
wrangler d1 execute DB --local --command="SELECT * FROM posts"Next.js API Route からクエリする
typescript
import { getRequestContext } from "@cloudflare/next-on-pages";
import { NextResponse } from "next/server";
export const runtime = "edge";
export async function GET() {
const { env } = getRequestContext();
const { results } = await env.DB
.prepare("SELECT * FROM posts ORDER BY created_at DESC")
.all();
return NextResponse.json({ posts: results });
}D1 は今後さらに機能が充実していく予定です。現時点でも十分な機能を持っており、小〜中規模のアプリケーションには最適な選択肢です。