Cloudflare D1が『安価でスケールするマネージドDB』を再定義
Cloudflare D1は、Workersから使うSQLiteベースのマネージドDBです。料金は読み取り・書き込みの行数と保存容量で決まり、Workers の Free プランの範囲でも試せます(料金の詳細は後の表)。Neon(PostgreSQL)や PlanetScale と並ぶサーバーレスのデータベースの選択肢で、Workers と同じ基盤の上で、アプリとデータベースをまとめて動かせるのが特長です。
D1採用を検討すべき5つのシグナル
- Workers中心のサーバーレスアプリでDB含めて完結したい
- NeonやPlanetScaleの料金が運用規模で重くなった
- SQLiteレベルの軽量DBで十分な要件
- グローバル分散・低レイテンシ読み出しが必要
- マイグレーション・バックアップを自動化したい
Neon/PlanetScale/D1比較
Neon: PostgreSQL・サーバーレス・ブランチング機能。無料プランあり。
PlanetScale: Vitess(MySQL 互換)と PostgreSQL。無料プランはなく、PostgreSQL の月$5からが一番安い入口。
Turso: SQLite 互換のデータベース。Cloudflare 以外の環境でも使える。
Cloudflare D1: SQLite・Workers統合。Free プランあり。1つのデータベースは最大10GB(有料)で、複雑なクエリには向かない。
※Neon・PlanetScale は各社の公式料金ページ(2026年10月21日確認)。
実装パターン
(1) マイグレーション: wrangler d1 migrations applyでSQL適用
(2) クエリ: env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(id).first()
(3) Drizzle ORM統合: D1アダプタで型安全クエリ
(4) Read Replica: グローバル分散でenv.DB.withSession()
(5) バックアップ: wrangler d1 exportで自動エクスポート
料金(公式・2026年10月21日確認)
| 項目 | Workers Free | Workers Paid |
|---|---|---|
| 読み取り行数 | 1日500万行まで | 月250億行まで込み、超えた分は100万行あたり$0.001 |
| 書き込み行数 | 1日10万行まで | 月5,000万行まで込み、超えた分は100万行あたり$1.00 |
| ストレージ | 合計5GBまで | 5GBまで込み、超えた分は1GBあたり月$0.75 |
| プランの月額 | $0 | Workers Paid の最低料金が月$5(アカウント単位) |
※Cloudflare 公式ドキュメント「D1 Pricing」「Workers Pricing」(2026年10月21日確認)。Workers 自体のリクエストは、Free が1日10万件、Paid が月1,000万件まで込みで、超えた分は100万件あたり$0.30です。
D1 の料金は「何行読んだか・何行書いたか」で決まるのが特徴です。Free では1日の上限を超えると課金されるのではなく、その日のクエリが止まります。インデックスのないテーブルを全件スキャンすると、1回のクエリで大量の行を「読んだ」ことになるので、行数の課金の仕組みを知らずに使うと、上限に早く届いてしまいます。よく使う検索条件にインデックスを張るのは、速さのためだけでなく料金のためでもあります。
制限(公式)
| 項目 | Workers Free | Workers Paid |
|---|---|---|
| 1つのデータベースの最大サイズ | 500MB | 10GB |
| アカウントあたりのデータベース数 | 10 | 50,000 |
| アカウント全体のストレージ | 5GB | 1TB |
| Worker の1回の呼び出しで送れるクエリ数 | 50 | 1,000 |
| 1つのクエリの最大実行時間 | 30秒 | 30秒 |
※Cloudflare 公式ドキュメント「D1 Limits」(2026年10月21日確認)。
設計で効いてくるのは、1つのデータベースが最大10GB(有料)という上限と、データベースの数は5万個まで作れるという組み合わせです。大きな1つのデータベースに全部入れるより、ユーザーやテナントごとにデータベースを分ける設計と相性がよい、ということが制限の形から読み取れます。逆に、1つの表が10GBを超えそうなサービスは、下の「向かないケース」に当たります。
バックアップは「Time Travel」で分単位に戻せる
D1 には、データベースを過去の時点に戻す Time Travel という仕組みがあります。公式ドキュメントによると、戻せる期間は Workers Paid で30日、Workers Free で7日で、期間内なら任意の「分」の時点に戻せます。履歴の保存と復元には追加の料金がかかりません。
- 過去の時点の目印(ブックマーク)を調べる:
wrangler d1 time-travel info データベース名(--timestamp で時点を指定) - その時点に戻す:
wrangler d1 time-travel restore データベース名 --timestamp=UNIXタイムスタンプ
この記事の「実装パターン」では wrangler d1 export でのバックアップを紹介していますが、うっかり消した・壊した、という事故からの復旧は Time Travel のほうが手早く済みます。エクスポートは別の場所に控えを残す用途、Time Travel は直近の事故から戻す用途、と分けて考えると運用の設計が整理しやすくなります。
D1が向かないケース
- 大量データ(数百GB級)の書き込み中心の用途
- 複雑なJOIN・ウィンドウ関数・PostgreSQL固有機能が必須
- Cloudflareエコシステム外との連携が中心
30日学習プラン
- 1週目: Workers + D1でCRUDアプリ実装
- 2週目: Drizzle ORM統合・マイグレーション運用
- 3週目: Read Replica・グローバル分散テスト
- 4週目: 本番運用・バックアップ自動化
関連リンク
Cloudflare Workersは Cloudflare Workers深掘り、Neon/PlanetScale比較は サーバーレスDB選定、Drizzle ORMは Drizzle ORM深掘り を参照してください。
この記事のデータの出典
- Cloudflare 公式ドキュメント「D1 Pricing」「D1 Limits」「Time Travel」「Workers Pricing」(2026年10月21日確認)
- Neon・PlanetScale の公式料金ページ(2026年10月21日確認)
- SQLite 公式のリリース履歴

