zudo-cloudflare-wisdom

Type to search...

to open search from anywhere

互換性日付

作成2026年4月4日更新2026年5月28日Takeshi Takatsudo

Cloudflare の互換性日付の理解と管理

互換性日付とは

wrangler.tomlcompatibility_date は Worker を特定バージョンの Cloudflare Workers ランタイムに固定する。これにより破壊的変更がデプロイ済みコードに影響するのを防ぐ。

compatibility_date = "2024-12-01"

仕組み

  • Cloudflare は日付に紐づくフラグの背後にランタイム変更を導入する
  • 日付を設定するとその日付までのすべての変更が有効になる
  • 日付を更新するまで同じランタイム動作を使用する
  • 新しいプロジェクトは最近の日付を使用すべき

更新のタイミング

以下の場合に互換性日付を更新する:

  • プロジェクトをアクティブに作業中
  • 新しいランタイム機能にアクセスしたい場合
  • Cloudflare ドキュメントが必要な機能の最低日付を推奨している場合

⚠️ Warning

互換性日付の更新はランタイム動作を変更する可能性がある。特に数ヶ月をまたぐ更新後は十分にテストすること。

互換性フラグ

より細かい制御には特定のフラグを有効・無効にできる:

compatibility_date = "2024-12-01"
compatibility_flags = ["nodejs_compat"]

よく使うフラグ:

フラグ説明
nodejs_compatNode.js 組み込みモジュールのサポートを有効化
streams_enable_constructorsコンストラクタブル Streams API を有効化

nodejs_compat が本当に必要になるとき

nodejs_compat は飾りで付けるオプションではない。バンドル(あるいは zfb の _worker.js ラッパーのようなアダプター)が node:async_hooksAsyncLocalStorage)、node:cryptonode:buffer といった Node.js 組み込みモジュールを import している場合、このフラグを省略すると wrangler は worker のロードを拒否する。これは デプロイ時の失敗であり、ランタイムでの穏やかなフォールバックではない — デプロイが止まるだけで、こっそり機能を落として動く worker が手に入るわけではない。

compatibility_date = "2024-12-01"
compatibility_flags = ["nodejs_compat"]

具体的なトリガーは、SSR バインディングアダプターのレシピで使われる AsyncLocalStorage のリクエスト単位コンテキストパターンだ。これは node:async_hooks を介して Cloudflare のバインディング(KV、D1、R2、env)を getCloudflareContext() 形式のアクセサーへ受け渡す。この import がバンドルに入った瞬間、その worker のすべてのデプロイで nodejs_compat が必須になる。

⚠️ Warning

これはランタイムではなくビルド/デプロイ時のゲートだ。Node 組み込みモジュールを import しないローカルテストがパスしても気づけない — デプロイ中に wrangler が worker のロードを拒否して初めて発覚する。worker が node:* モジュールに依存しているなら、その compatibility_flags には nodejs_compat を恒久的に残しておくこと。