引き続き Cloudflare Workers を使用して、本番環境とはアプリ・DBの異なるステージング環境を作ってみます。 Environments があり、ステージング環境のような異なるバージョンのアプリをデプロイすることができます。
Environments · Cloudflare Workers docs
Use environments to create different configurations for the same Worker application.
Cloudflare Docs

今回もこちらのリポジトリを使います。
a2-ito/cf-db-test
This repository is a minimal and practical example of running Next.js App Router on Cloudflare Workers and using D1 Database with Drizzle ORM. - a2-ito/cf-db-test
GitHub
まずは、本番用のDBとステージング用のDBを作成します。
npx wrangler d1 create my-app-db
npx wrangler d1 create my-app-db-staging
前回同様設定ファイルに追加しておいてから、以下のように編集します。
"d1_databases": [
{
"binding": "DB",
"database_name": "my-app-db",
"database_id": "b8c35192-3b91-463a-8a38-d3515169b832",
"migrations_dir": "drizzle/migrations",
},
],
"env": {
"staging": {
"d1_databases": [
{
"binding": "DB",
"database_name": "my-app-db-staging",
"database_id": "de8b088a-ba8f-423d-928c-8677adcd1f5d",
"migrations_dir": "drizzle/migrations",
},
],
},
},
wrangler.jsonc
先に本番用のデータベースの初期化とリリースを済ませておきましょう。
npx wrangler d1 migrations apply my-app-db --remote
npx wrangler d1 execute my-app-db --remote --command "PRAGMA table_info(todos);"
デプロイ
npm run deploy
動作確認
curl https://cf-db-test.xxx.workers.dev/api/todos
staging 用のデータベースを初期化します。
npx wrangler d1 migrations apply my-app-db-staging --remote --env staging
npx wrangler d1 execute my-app-db-staging --remote --env staging --command "PRAGMA table_info(todos);"
npx wrangler d1 execute my-app-db-staging \
--remote \
--env staging \
--command "INSERT INTO todos (title) VALUES ('タスクA'), ('タスクB');"
npx wrangler d1 execute my-app-db-staging --remote --env staging --command "select * from todos;"
ステージング環境のデプロイを実行します。 package.json にステージング環境用のデプロイコマンドを追加します。
"deploy:staging": "opennextjs-cloudflare build && opennextjs-cloudflare deploy --env staging",
実行
npm run deploy:staging
このコマンドを実行すると、本番アプリとは別のアプリケーションが作成され、
cf-db-test-staging.xxx.workers.dev のようなURLが発行されると思います。
動作確認
curl https://cf-db-test-staging.xxx.workers.dev/api/todos
本番環境とは異なり、insert したデータが取得できるはずです。
なお、コマンドからアプリを削除する際、
npx wrangler delete cf-db-test-staging
ではなく
npx wrangler delete cf-db-test --env staging
のように実行する必要がありました。
preview_database_id について
D1 Database の設定には preview_database_id というプロパティがあります。
preview_database_id はローカルのみ利用されるようで、ローカル開発の際にリモートDBにアクセスしたいケースで利用するもののようです。
通常は指定しなくてもよいかと思います。
Local development · Cloudflare D1 docs
D1 has fully-featured support for local development, running the same version of D1 as Cloudflare runs globally. Local development uses Wrangler, the command-line interface for Workers, to manage local development sessions and state.
Cloudflare Docs
