DbGate で Cloudflare D1 データベースを管理する方法

Published: 2026-10-19 | Jan Procházka

Cloudflare D1 は、Cloudflare Workers の近くで動作するサーバーレス SQL データベースです。SQLite を採用しており、サーバーの設定は不要で、アプリケーションが小規模なうちは無料で利用できます。一方、データを快適に確認するための環境は十分ではありません。Cloudflare のダッシュボードには基本的なコンソールがあり、Wrangler ならコマンドラインから SQL を実行できますが、どちらも本格的なデータベース管理ツールではありません。

このガイドでは、D1 に適した用途と制限を説明し、DbGate に接続してほかのデータベースと同じように閲覧、検索、編集、バックアップする方法を紹介します。

Cloudflare D1 はバージョン 7.3.0 から DbGate Premium で利用できます。D1 データベースのバックアップと復元はバージョン 7.3.2 で追加されました。

Cloudflare D1 とは?

D1 は SQLite を基盤とする Cloudflare のマネージドデータベースです。各 D1 データベースは Cloudflare が保存、複製する完全な SQLite データベースです。クリック操作または wrangler d1 create コマンドで作成し、Worker にバインドして通常の SQL で問い合わせます。

D1 の特長は次のとおりです。

  • SQLite の機能 – JSON 関数や FTS5 による全文検索を含む、SQLite と同じ SQL 方言、データ型、関数
  • インフラ管理が不要 – サーバー、接続プール、パッチ適用、容量計画を管理する必要がありません
  • 従量課金 – 読み取り行数、書き込み行数、ストレージ容量に応じて支払い、十分な無料枠もあります
  • 多数の小規模データベース – 1 つのアカウントに数千のデータベースを置けるため、テナントやユーザーごとにデータベースを分けられます
  • Time Travel – バックアップ設定なしで、保持期間内の任意の分単位の時点に復元できます(有料プランでは 30 日間)
  • 読み取りレプリケーション – 別のリージョンに任意で読み取りレプリカを配置し、世界各地の利用者の読み取り遅延を減らせます
  • Workers との密接な連携 – Worker はバインディング経由でアクセスでき、コード内の認証情報やネットワーク設定は不要です

D1 データベースへのアクセス方法は 3 つあります。

  1. Worker バインディング – 本番環境でアプリケーションが D1 にアクセスする方法
  2. Wrangler CLI – 開発中のマイグレーションや一時的なコマンドに使用
  3. Cloudflare REST API – Cloudflare の外部から管理する方法。DbGate もこれを使用します

知っておきたい制限

D1 は SQLite を使用しますが、ローカルの SQLite ファイルではありません。採用前に制限がアプリケーションに合うか確認してください。以下の数値は執筆時点のものです。最新の値は D1 の公式制限ページ を参照してください。

  • データベース容量 – 1 つのデータベースの上限は有料プランで 10 GB、無料プランで 500 MB です。D1 は 1 つの巨大なデータベースではなく、多数の小さなデータベースで拡張する設計です。
  • 同時に書き込める処理は 1 つ – 各データベースはクエリを順番に処理します。スループットはクエリの速度に左右され、時間のかかるクエリは後続の処理を妨げます。
  • 対話型トランザクションは非対応 – BEGIN で開始し、処理を行った後で COMMIT することはできません。代わりに D1 は複数の文をバッチとして原子的に実行し、すべて成功するか、いずれも適用されません。
  • 文と値のサイズ – 1 つの SQL 文は最大 100 KB、1 行、文字列、BLOB は最大 2 MB です。大きなファイルは D1 ではなく R2 に保存します。
  • クエリ実行時間 – 1 つのクエリは最長 30 秒です。
  • 読み取った行数による課金 – 課金対象は返された行だけでなく、クエリが読み取ったすべての行です。大きなテーブルの全件走査は高くつくため、適切なインデックスが特に重要です。
  • ファイルレベルの SQLite 機能は非対応 – ATTACH DATABASE、拡張機能の読み込み、sqlite_master への書き込みは許可されません。外部キーは常に強制されます。バッチ内では PRAGMA foreign_keys = OFF の代わりに PRAGMA defer_foreign_keys = on を使用できます。
  • 予約名 – _cf_ で始まるテーブルは Cloudflare の内部用で、読み取りや変更はできません。
  • REST API のレート制限 – REST API には Cloudflare の API 全体のレート制限が適用されます。管理ツール向けであり、本番トラフィックの処理には適しません。アプリケーションでは Worker バインディングを使ってください。

主な用途

アプリケーションがすでに Cloudflare 上で動作している場合や、データを小さな独立したデータベースに自然に分割できる場合、D1 は特に適しています。

  • Workers と Pages のバックエンド – エッジで動く Web アプリのユーザーアカウント、設定、コンテンツ、注文
  • テナントごとのデータベース – SaaS の各顧客に独立したデータベースを割り当て、データの分離、削除、エクスポートを容易にします
  • コンテンツと設定の保存 – ブログ、CMS コンテンツ、機能フラグ、リダイレクトなど読み取り中心のデータ。読み取りレプリカとの組み合わせが効果的です
  • 試作品や個人プロジェクト – 無料枠と簡単な設定で素早く始め、後から拡張できます
  • 軽量な分析とログ – 各データベースが容量制限内であれば、カウンター、イベント、監査ログを保存できます
  • 他のデータのエッジキャッシュ – メインデータベースの一部を SQLite に複製し、ユーザーの近くに配置します

D1 は、書き込みの多い単一の大規模 OLTP データベース、長い対話型トランザクションが必要な処理、大きなバイナリファイルの保存には向きません。その場合は PostgreSQL、MySQL などの従来型データベースが適しており、必要に応じて Cloudflare Hyperdrive から接続できます。

DbGate を Cloudflare D1 に接続する

DbGate は Cloudflare REST API を通じて D1 に接続します。1 つの接続は Cloudflare アカウントに紐付き、API トークンがアクセスできるすべての D1 データベースを表示します。

ステップ 1 – アカウント ID を確認する

  1. Cloudflare ダッシュボード にログインします。
  2. Storage & Databases | D1 SQL Database またはアカウントのホームページを開きます。
  3. Account ID をコピーします。アカウントの詳細とダッシュボードの URL(dash.cloudflare.com/<account-id>/...)に表示されています。

ステップ 2 – API トークンを作成する

  1. My Profile | API Tokens を開き、Create Token をクリックします。
  2. Create Custom Token を選びます。
  3. Permissions に Account | D1 | Edit を追加します。読み取りだけなら Read で十分です。
  4. Account Resources でデータベースのあるアカウントを選択します。
  5. 必要に応じて、トークンの利用を自分の IP アドレスに制限し、有効期限を設定します。
  6. トークンを作成してコピーします。Cloudflare で表示されるのは一度だけです。

DbGate 専用のトークンを使えば、デプロイ用のトークンとは独立して取り消せます。

ステップ 3 – DbGate で接続を作成する

  1. DbGate で New connection をクリックします。
  2. 接続タイプに Cloudflare D1 を選択します。
  3. Cloudflare Account ID と Cloudflare API Token を入力します。
  4. 独自のエンドポイントを使わない限り、Cloudflare API URL は空欄のままにします。既定値は https://api.cloudflare.com/client/v4 です。
  5. ネットワークで必要な場合は接続設定に HTTP プロキシを指定します。
  6. 誤操作による変更を防ぎたい場合は Is read only を選択します。
  7. Test をクリックし、次に Save(または Connect)をクリックします。

接続後、DbGate はトークンでアクセスできるアカウント内のすべての D1 データベースを一覧表示します。データベースを展開すると、テーブル、ビュー、列、インデックス、外部キーを確認できます。

接続に失敗した場合、DbGate はトークンが無効または期限切れ、D1 権限の不足、アカウント ID の誤り、データベースの削除など、原因を示そうとします。

DbGate で D1 を管理する

DbGate は内部的に D1 を通信方法の異なる SQLite として扱います。データブラウザー、SQL 生成、スキーマ解析はローカルの SQLite ファイルと同じなので、SQLite での操作の多くをそのまま利用できます。

データを閲覧・編集する

データブラウザーでテーブルを開くと、行の絞り込み、並べ替え、検索、外部キーをたどった関連レコードの表示、グリッド内での値の編集ができます。保存すると変更が D1 に書き込まれます。

D1 は読み取り行数に応じて課金されるため、大きなテーブルでは全件をスクロールするより、フィルターやインデックス付き列を使ってください。

スキーマを調べる

DbGate はテーブル、列、主キー、外部キー、インデックス、ビューを含む完全な構造を読み込みます。D1 へのクエリはそれぞれ HTTPS リクエストになるため、スキーマ解析を事前に計画し、数百の個別クエリではなく少数のバッチリクエストで送信します。通常の規模のデータベースなら、完全な解析に必要なリクエストは 2 回だけです。

Cloudflare 内部の _cf_* テーブルはスキーマから隠され、自分のオブジェクトだけが表示されます。

SQL クエリを実行する

D1 データベースのクエリエディターを開き、読み込んだスキーマに基づく補完を使いながら通常の SQLite SQL を書きます。複数の文を含むスクリプトを実行すると、DbGate はそれらを一つのバッチとして D1 に送ります。D1 はバッチを原子的に実行するため、スクリプトはすべて完了するか、まったく適用されません。

次の点に注意してください。

  • 明示的な BEGIN、COMMIT、ROLLBACK、SAVEPOINT は、D1 API が対話型トランザクションに対応しないため、明確なメッセージとともに拒否されます。D1 接続ではトランザクションボタンも非表示です。
  • Is read only に設定した接続では、DbGate は SELECT、EXPLAIN、スキーマ読み取り用 PRAGMA 文のみを許可します。それ以外は Cloudflare への送信前に拒否します。さらに安全性を高めるには、D1 | Read 権限の API トークンも使ってください。
  • EXPLAIN QUERY PLAN で、クエリがインデックスを使用するか、テーブル全体を走査するか確認できます。これは D1 の料金に直接影響します。

データをエクスポート・インポートする

クエリ結果やテーブルを CSV、Excel、JSON など DbGate 対応の形式にエクスポートでき、ファイルから D1 テーブルにデータをインポートすることもできます。一度限りのデータ修正、レポート作成、DbGate に接続したほかのデータベースとのデータ移動に便利です。

D1 データベースをバックアップする

Time Travel は保持期間内のミスからデータを守りますが、保存、アーカイブ、別の場所での利用ができるファイルは作りません。DbGate なら D1 データベースを通常の SQL ファイルにバックアップできます。

  1. 接続ツリーでデータベースを右クリックします。
  2. Create database backup を選びます。
  3. スキーマ、データ、データベース設定、rowid から含めるものを選びます。ローカル SQLite のバックアップと同じ選択肢です。
  4. バックアップを開始します。

結果は通常の SQLite SQL スクリプトです。別の D1 データベースに復元したり、コマンドラインツール sqlite3 で開いたり、開発やデバッグ用にローカル SQLite ファイルへ読み込んだりできます。

D1 に復元する

DbGate は、DbGate で作成したバックアップや他のソースからの SQLite ダンプを D1 に復元することもできます。対象データベースを右クリックし、Restore database backup を選んで SQL ファイルを指定します。

D1 はダンプをそのまま受け取れないため、DbGate は復元時に次のように調整します。

  • ダンプを最大 250 文(かつ最大 1 MB)ずつのバッチで送信します。各バッチは一つの D1 トランザクションとして実行されるため、失敗したバッチが中途半端な書き込みを残すことはありません。
  • 各バッチが独立したトランザクションなので、ダンプ内のトランザクション文はスキップします。
  • Cloudflare がインポート時に推奨する PRAGMA defer_foreign_keys = on を使い、外部キーの確認を各バッチの最後まで延期します。
  • 予約された _cf_ で始まる名前のオブジェクトはスキップします。
  • AUTOINCREMENT カウンター、統計情報、user_version など、D1 が書き込みを拒否する可能性のある文はデータの後で実行し、問題は警告としてのみ報告します。
  • Stop on first error が有効なら最初に失敗したバッチで停止し、無効なら続行して最後にすべてのエラーを報告します。

D1 の SQL API では復元できないものが二つあります。INSERT 文が D1 の 100 KB 制限を超える行(通常は大きなテキストや BLOB を含む行)と、ダンプが PRAGMA writable_schema によって再作成する仮想テーブルです。DbGate は黙って失敗せず、これらを明確に報告します。

バックアップと復元を使えば、ローカル SQLite データベースを D1 に移行することも簡単です。DbGate でローカルファイルをバックアップし、その SQL ファイルを空の D1 データベースに復元します。逆方向も可能で、本番 D1 のデータをテスト用のローカル SQLite ファイルにコピーできます。

読み取り専用接続への復元は許可されません。

セキュリティ上の注意

  • API トークンは DbGate のほかの認証情報と同様、接続とともに保存されます。共有せず、D1 権限、単一アカウント、可能であれば自分の IP アドレスに制限したトークンを使ってください。
  • DbGate はトークンがログやエラーメッセージに表示されないようにします。
  • DbGate Team Premium では、サーバーに D1 接続を一度設定し、使用できるユーザーとロールを管理できます。チーム全員に API トークンを配布する必要はありません。

まとめ

Cloudflare D1 を使うと、Worker、プロジェクト、テナントごとに専用の SQL データベースを簡単に用意できます。DbGate ならアカウント ID と API トークンだけで、スキーマの閲覧、グリッドでのデータ編集、SQL エディター、データのインポートとエクスポート、バックアップと復元を利用できます。PostgreSQL、MySQL、SQL Server、SQLite などを管理するのと同じツールで操作できます。

DbGate をダウンロード して、D1 データベースでお試しください。