サーバーレスコンピューティングは、アプリケーションコードについては「管理するサーバーがない」という問題を解決しましたが、データベースは取り残された厄介な存在でした。Workerをエッジでミリ秒単位で実行できても、その後、遠く離れた単一リージョンにあるデータベースを待つのを見守ることになっていたのです。Cloudflare D1はそのギャップを埋めます。これはSQLite上に構築された本物のSQLデータベースで、Cloudflareのネットワーク上に存在し、あなたのWorkerに直接バインドします。ふつうのSQLを書き、実際に実行したクエリの分だけ課金されます。

このガイドでは、D1とは何か、いくらかかるか、Workerからどのようにクエリするか、そしてKVや従来のPostgresデータベースより選ぶべき場面を解説します。

要点

  • D1はSQLite上に構築されたサーバーレスSQLデータベースで、Cloudflare Workersに直接バインドされます
  • 無料枠は寛大です。1日あたり500万行の読み取りと100,000行の書き込み、さらに5 GBのストレージ
  • 課金は読み取り・書き込み行に対してであり、稼働時間に対してではありません。アイドル状態のデータベースは無料です
  • 準備済みステートメントを使った馴染みのSQLなので、学習曲線はほとんどありません
  • プラットフォームの他の部分、Workers AI 、R2、KVと組み合わせて、完全なアプリを構築できます
  • 無料のデスクトップアプリEasy Cloudflare D1 でデータベースを視覚的に管理できます

Cloudflare D1とは何か

Cloudflare D1 は、マネージドでサーバーレスなデータベースです。世界で最も実戦で鍛えられたデータベースエンジンの一つであるSQLite上に構築された、リレーショナルなSQLストアです。ここでの「サーバーレス」とは、インスタンスをプロビジョニングしたり、サイズを選んだり、何かを稼働させ続けたりすることが一切ないという意味です。データベースを作成し、Workerにバインドして、SQLを実行します。ストレージ、耐久性、スケーリングはCloudflareが処理します。

標準SQLを話すため、D1はリレーショナルデータベースを使ったことのある人なら誰でもすぐに馴染めます。テーブルを定義し、SELECTINSERTUPDATEDELETE文を書き、インデックスを作成し、トランザクションを使います。違いは運用面にあります。チューニングすべき接続プールも、パッチを当てるべきサーバーも、アイドルコストもありません。

Cloudflare D1の料金と無料枠

D1の課金モデルは、最良の意味で珍しいものです。時間ではなく、読み取り・書き込み行で測られるクエリに対して支払います。アイドル状態のデータベースは、稼働するインスタンスがないため無料です。2026年のD1公式料金 より:

Workers無料プラン

リソース1日の上限
読み取り行1日あたり500万
書き込み行1日あたり100,000
ストレージ合計5 GB

Workers有料プラン

リソース含まれる分、その後
読み取り行250億まで、その後100万あたり0.001ドル
書き込み行5,000万まで、その後100万あたり1.00ドル
ストレージ最初の5 GB、その後GB月あたり0.75ドル

データ転送料やエグレス料金はありません。役立つ最適化の詳細として、インデックスは、クエリがスキャンする行を減らすことで、課金対象の行読み取りを大幅に削減できます。代償は書き込み量のわずかな増加です。読み取りの多いワークロードでは、適切なインデックスがレイテンシと請求額の両方を低く保ちます。

Workerからのクエリ

D1データベースをwrangler.tomlでバインドし、env.DBを通じてアクセスします。D1は準備済みステートメントを使い、クエリテキストを値から分離することで、SQLインジェクションからクエリを守ります。

 1export default {
 2  async fetch(request, env) {
 3    // Read with a parameterised query
 4    const { results } = await env.DB
 5      .prepare("SELECT id, title FROM posts WHERE published = ? ORDER BY created_at DESC LIMIT 10")
 6      .bind(1)
 7      .all();
 8
 9    return Response.json(results);
10  },
11};

データの挿入も同じパターンに従います。

1await env.DB
2  .prepare("INSERT INTO posts (title, body, published) VALUES (?, ?, ?)")
3  .bind("Hello D1", "My first edge database post", 1)
4  .run();

複数のステートメントをバッチ化して、1回の往復で効率的に実行することもできます。これは、関連する書き込みが複数ある場合の推奨アプローチです。

Cloudflare D1対KV対Postgres

適切なストレージプリミティブを選ぶことは重要です。D1が、最もよく比較される2つとどう比べられるかを示します。

ニーズ最適な選択理由
リレーショナルデータ、クエリ、結合D1テーブル、インデックス、トランザクションを備えた本物のSQL
単純なキー・バリュー検索、設定、キャッシュKVエッジでの単一キーの高速読み取りに最適化
大規模な既存のリレーショナルワークロード、複雑な拡張Postgres(例:Hyperdrive経由)重く機能豊富なワークロード向けの成熟したエンジン

要するに、できるだけ速くキーで値を取得したいだけならKVを使います。データがリレーショナルで、SQLでクエリしたいならD1を使います。大規模で確立されたリレーショナルワークロードがある場合や、SQLiteが提供しないPostgres固有の機能が必要な場合は、完全なPostgresデータベース(WorkersはHyperdriveで高速化されて接続できます)を選びます。

Cloudflare D1が正しい選択となるとき

D1は次のような場合に最適です。

  • データがリレーショナルで、SQLクエリ、結合、インデックスから恩恵を受ける
  • Workers上で構築していて、データベースを同じプラットフォームに置きたい
  • ワークロードが急峻、または低〜中程度で、従量課金が常時稼働インスタンスに勝る
  • 運用上のオーバーヘッドをゼロにしたい。プロビジョニング、パッチ適用、接続プールが不要
  • アプリケーションのニーズの大半をカバーするSQLiteの機能セットで満足できる

その限界を超える非常に大きなデータセットや、Postgres固有の拡張に依存するワークロードには、あまり向きません。それらには、代わりにWorkerから専用データベースを接続してください。

現実的なユースケース

典型的なD1アプリケーション:Workerがリクエストを処理し、D1から投稿やユーザーレコードをクエリし、アップロードされたファイルや画像をR2 に保存し、ホットな値をKVにキャッシュし、要約などの機能のために任意でWorkers AI を呼び出す、ブログや小規模なSaaSバックエンドです。すべてが1つのプラットフォーム上、エッジで、サーバーなしに動き、請求額は実際の使用量に応じてスケールします。これは、私が構築したCloudflare Pagesのユーザーシステム の背後にあるのと同じアーキテクチャパターンです。

D1を視覚的に管理する

マイグレーションの実行やデータの確認をコマンドラインで行うのも問題ありませんが、グラフィカルなクライアントは日々の作業を速くします。無料のデスクトップアプリEasy Cloudflare D1 では、データベースやテーブルを閲覧し、クエリを実行し、Windows・macOS・Linuxの整ったインターフェースからD1データを管理できます。認証情報はご自身のマシン上でローカルに暗号化されます。さらに、スタックがキャッシュのためにD1とKVを組み合わせているなら、無料のEasy Cloudflare KV アプリがキー・バリューの名前空間に同じことを提供します。

重要なポイント

  • D1はSQLite上に構築されたサーバーレスSQLデータベースで、Cloudflare Workersに直接バインドされます
  • 無料枠は1日あたり500万の読み取りと100,000の書き込みを5 GBのストレージでカバーします
  • 課金は読み取り・書き込み行ごとであり、時間ごとではありません。アイドル状態のデータベースは無料です
  • 安全な準備済みステートメントを使った標準SQLなので、学習曲線は最小限です
  • キー・バリュー検索にはKV、リレーショナルSQLにはD1、重いまたは拡張固有のワークロードには専用Postgresを使います
  • D1はR2、KV、Workers AIと組み合わせて、完全なエッジアプリケーションを構築します

よくある質問

Cloudflare D1とは何ですか? D1はSQLite上に構築されたサーバーレスSQLデータベースで、Cloudflareのネットワーク上で動作し、Workersに直接バインドします。標準SQLを書き、サーバーをプロビジョニングしたり管理したりすることは一切ありません。ストレージ、耐久性、スケーリングはCloudflareが処理します。

Cloudflare D1は無料ですか? Workers無料プランに無料枠があります。1日あたり500万行の読み取りと100,000行の書き込み、5 GBのストレージです。多くの小規模アプリケーションはこれらの制限内で完全に動作します。Workers有料プランは含まれる量を大幅に引き上げます。

D1の料金はどう決まりますか? 稼働時間ではなく、読み取り・書き込み行に対して支払います。有料プランでは月に最初の250億行の読み取りと5,000万行の書き込みが含まれ、その後は100万読み取りあたり0.001ドル、100万書き込みあたり1.00ドル、ストレージは最初の5 GBを超えてGB月あたり0.75ドルです。エグレス料金はありません。

D1とKVの違いは何ですか? KVは単一キーの高速読み取りに最適化されたキー・バリューストアで、キャッシュや設定に理想的です。D1は、結合、インデックス、トランザクションでクエリしたい構造化データ向けのリレーショナルSQLデータベースです。キーによる検索にはKV、リレーショナルクエリにはD1を使います。

D1はPostgresを置き換えられますか? 多くの小〜中規模アプリケーションでは、SQLiteが一般的なリレーショナルニーズをカバーするため、置き換えられます。非常に大きなデータセット、重い同時書き込みワークロード、Postgres固有の拡張には、Workerから接続する専用Postgresデータベース(Hyperdriveで高速化)の方が適しています。

WorkerからD1をクエリするには? wrangler設定でデータベースをバインドし、env.DBを通じてアクセスします。バインドしたパラメータで準備済みステートメントを使います。例えばenv.DB.prepare(“SELECT … WHERE id = ?”).bind(id).all()のように書くと、クエリがSQLインジェクションから守られます。