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 つあります。
- Worker バインディング – 本番環境でアプリケーションが D1 にアクセスする方法
- Wrangler CLI – 開発中のマイグレーションや一時的なコマンドに使用
- 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 を確認する
- Cloudflare ダッシュボード にログインします。
- Storage & Databases | D1 SQL Database またはアカウントのホームページを開きます。
- Account ID をコピーします。アカウントの詳細とダッシュボードの URL(
dash.cloudflare.com/<account-id>/...)に表示されています。
ステップ 2 – API トークンを作成する
- My Profile | API Tokens を開き、Create Token をクリックします。
- Create Custom Token を選びます。
- Permissions に Account | D1 | Edit を追加します。読み取りだけなら Read で十分です。
- Account Resources でデータベースのあるアカウントを選択します。
- 必要に応じて、トークンの利用を自分の IP アドレスに制限し、有効期限を設定します。
- トークンを作成してコピーします。Cloudflare で表示されるのは一度だけです。
DbGate 専用のトークンを使えば、デプロイ用のトークンとは独立して取り消せます。
ステップ 3 – DbGate で接続を作成する
- DbGate で New connection をクリックします。
- 接続タイプに Cloudflare D1 を選択します。
- Cloudflare Account ID と Cloudflare API Token を入力します。
- 独自のエンドポイントを使わない限り、Cloudflare API URL は空欄のままにします。既定値は
https://api.cloudflare.com/client/v4です。 - ネットワークで必要な場合は接続設定に HTTP プロキシを指定します。
- 誤操作による変更を防ぎたい場合は Is read only を選択します。
- 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 ファイルにバックアップできます。
- 接続ツリーでデータベースを右クリックします。
- Create database backup を選びます。
- スキーマ、データ、データベース設定、rowid から含めるものを選びます。ローカル SQLite のバックアップと同じ選択肢です。
- バックアップを開始します。
結果は通常の 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 データベースでお試しください。