最近 Cloudflare D1 を触ってて、「あれ?データが反映されない?」みたいなことが起きた。 調べてみたら、wrangler 経由で D1 にアクセスするときに “local” と “remote” という概念があることを知った。
最初は「どうせ全部 Cloudflare 上(= remote)につながってるでしょ」と思っていたけど、 実際はそうじゃなくて、デフォルトでは local(手元環境のsqlite)に接続される。
wrangler.jsonc の設定ポイント
D1 の接続設定を wrangler.jsonc に書くとき、例えばこんな感じで remote: true を入れると
本番(Cloudflare 上の D1 データベース)につながる。
{
"d1_databases": [
{
"binding": "DB",
"database_name": "my-database",
"database_id": "xxxx-xxxx-xxxx",
"remote": true
}
]
}
これを入れないと、wrangler d1 コマンドを実行しても local DB にアクセスしてしまう。
ずっと「なんでデータが反映されないんだ…?」って悩んでたのはこのせいだった。
個人開発なら remote でいいや
正直、local で動かすメリットはそこまで大きくないし、 個人開発なら素直に remote に接続しておくのが楽そう。 local / remote を切り替えるたびに混乱するのも避けたいし。
というわけで、
remote: true入れとこう。
これで解決。
📝 まとめ
- D1 は
localとremoteの2種類の接続モードがある - デフォルトは local
wrangler.jsoncに"remote": trueを追加すると Cloudflare 上のDBに接続される