D1
概要
D1 は SQLite を基盤とした Cloudflare のサーバーレス SQL データベースです。データベースを作成し、Worker や Pages プロジェクトにバインドし、小さな JavaScript API を介して素の SQL でクエリします。サイズを見積もるサーバーも、管理するコネクションプールもありません。Cloudflare がストレージ、レプリケーション、スケーリングを処理し、あなたは読み書きした行に対して支払います。
強み
- 本物の SQL(SQLite 方言)— 馴染みのある
SELECT、JOIN、トランザクション、インデックス。 - サーバーレス — プロビジョニング不要、コネクション数の上限なし、ゼロまでスケール。
- 単一のバインディングを介した Workers と Pages との緊密な統合。
- 読み取りレプリケーションがコピーをユーザーの近くに配置し、低レイテンシの読み取りを実現します。
- 典型的なアプリのワークロードに対して安価で、使える無料枠があります。
トレードオフ
- SQLite のセマンティクス — 巨大なデータセットや非常に重い書き込み並行性は得意分野ではありません。
- データベースごとのサイズ上限があるため、非常に大きなデータにはシャーディングや R2 が必要になる場合があります。
- Postgres/MySQL より新しいため、ツールやエコシステムはまだ成熟途上です。
- エッジからのアクセスが最適です。Cloudflare の外部から使うのは不自然です。
使うべきとき
Cloudflare 上にホストされたプロジェクトのアプリデータには D1 を選びましょう。ユーザーレコード、コンテンツ、設定、セッションメタデータ — リレーショナルモデルに収まり、Workers や Pages アプリの隣に存在するもの全般。
バイブコーディングとの相性
エージェントがすでに Workers 上で構築しているなら、D1 は有力なデフォルトです。データベース、スキーマ、クエリがすべて同じプロジェクトに存在するからです。マイグレーションをバージョン管理された .sql ファイルに保ち、Wrangler で適用するようエージェントに依頼すれば、スキーマが再現可能になります。バインディングのおかげで、ハンドラ内のクエリは一行で済みます。
# wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "app-db"
database_id = "your-d1-id"
# Create a DB and run a migration
npx wrangler d1 create app-db
npx wrangler d1 execute app-db --file=./schema.sql