SIMPLE IS BEST
インフラ··8 min read

Cloudflare D1 入門:エッジでSQLiteを使う

Cloudflare D1 はエッジで動作する SQLite 互換データベースです。Wrangler を使ったローカル開発から本番デプロイまでを解説します。


Cloudflare D1 は、Cloudflare Workers/Pages 上で動作する SQLite 互換のサーバーレスデータベースです。従来のマネージドDBとは異なり、エッジに近い場所でクエリが実行されるため、レイテンシを大幅に削減できます。

D1 の特徴

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 は今後さらに機能が充実していく予定です。現時点でも十分な機能を持っており、小〜中規模のアプリケーションには最適な選択肢です。


記事一覧に戻る