Cloudflare Workers に Worker Previews 登場!プルリクごとに隔離環境でテストできるようになったよ!
やっほー、しぃちゃんだよ!今日は Cloudflare の Changelog から気になるアップデートを見つけたので紹介するね!
Cloudflare Changelogなにが発表されたの?
Cloudflare の Changelog によると、Workers に「Worker Previews」という新機能が追加されたよ。変更のたびに、本番環境や他の変更とは切り離された、本番同様の隔離環境でテストできるようになったんだって。各 Preview は同じ Worker の中で動きつつ、自分専用のコード・設定・URL・観測性を持っていて、本番環境からも、他の Preview からも独立しているのがポイントだよ。
なぜ重要なの?
プルリクエストのレビューって、「このコード、実際どう動くの?」を確かめるのが地味に大変だよね。ローカルで動かすだけだと本番相当の設定やバインディングを再現しづらいし、かといって共有のステージング環境にどんどんデプロイすると、他の変更とぶつかって壊れちゃうこともある。Worker Previews は、プルリクごとに独立した実行環境を自動で用意してくれるから、レビュアーが「本番に近い状態」を安全に触って確認できるようになるの。
これで何が変わるの?
一番のポイントは、変更のたびに専用の隔離環境が手に入ることだよ。
- 各 Preview に専用の URL・設定・観測性(ログやメトリクス)がある
- 本番環境からも、他の Preview からも完全に隔離されている
- Durable Objects や Containers は Preview ごとに自動でネームスペース・ストレージ・アプリ・インスタンスが用意される
- 状態の変化・セッション・メモリ・マイグレーション・並行テストは、その Preview の中だけに閉じる
つまり、複数人が同時に別々のプルリクをテストしていても、お互いのデータや状態が混ざる心配がないってことだね。
深く潜ってみよう
設定のやり方
Preview の設定は、Wrangler の設定ファイルの previews ブロックで定義するよ。新しい Preview が起動するときに使う変数・バインディング・設定をここでまとめて指定できるの。シークレットは Wrangler のコマンドで設定する仕組みだよ。個別の Preview だけを本番や他の Preview に影響を与えずに上書きすることもできるんだって。
KV / D1 / R2 はどうするの?
Durable Objects や Containers は自動で分離されるけど、KV・D1・R2 のようなアカウントレベルのリソースを分離したい場合は、Preview を別のリソースに紐付ける(バインドする)必要があるよ。ここは自動じゃないから、意識して設定してあげてね。
デプロイのしかた
Preview をデプロイするには Wrangler 4.135.0 以降が必要だよ。
npx wrangler preview
このコマンドで Preview をデプロイできるよ。あるいは、リポジトリを Workers Builds に接続しておけば、Preview を自動で作成して、プルリクエストに URL を投稿してくれるみたい。
URL の仕組み
Preview には push のたびに更新される「安定した URL」が割り当たるから、レビュアーは常に最新の変更を見られるよ。さらに、それぞれのデプロイには「不変の URL」も割り当たるので、特定バージョンの比較や、そのバージョンへの後からの再アクセスもできるんだって。
Preview を作ると、Worker 名の横にある environment breadcrumb から、本番環境と各 Preview を切り替えられるようになるよ。各 Preview には専用のログ・エラー・メトリクスがあるから、本番に出す前にしっかり確認できるね。
まとめ
- Worker Previews は、プルリクエストごとに隔離されたテスト環境を自動で用意する新機能
- Durable Objects や Containers は Preview ごとに自動分離、KV / D1 / R2 は手動でのバインドが必要
- デプロイには Wrangler 4.135.0 以降が必要で、
npx wrangler previewか Workers Builds 連携で使える - 安定した URL と不変の URL、専用ログ・メトリクスで、本番投入前のレビューがやりやすくなるよ
Cloudflare Workers でチーム開発しているエンジニアさんには、レビューフローを一段安全にできる嬉しいアップデートだね!