Workers: 互換日付 2026-11-17 から request.signal と新モジュールレジストリが既定でオンになる
互換日付(compatibility_date)を 2026-11-17 以降に上げた Worker では、クライアント切断を request.signal で受け取れるようになり、JavaScript のモジュール読み込みも新しいレジストリ(require() で ES モジュール、import.meta)に切り替わる。
どんなときに関係する?
既存の Worker は互換日付かフラグを変えるまで今の動きのまま。影響が出るのは「互換日付を上げたとき」なので、wrangler.jsonc の日付を機械的に更新している運用(Renovate やテンプレートの更新など)では、上げる前に下の 2 点を確認しておく。
1. request.signal でクライアント切断を拾う
切断されたらログを出す、後片付けをする、AbortSignal を受け取る処理(fetch など)を止める、といった使い方ができる。遅いオリジンへの中継で、客が帰ったあとも上流に待ち続ける無駄を減らせる。
ts
export default {
async fetch(request): Promise<Response> {
request.signal.addEventListener("abort", () => {
console.log("Client disconnected");
}, { once: true });
// 上流への fetch にも signal を渡すと、切断時に一緒に止まる
return fetch("https://example.com/slow-response", { signal: request.signal });
},
} satisfies ExportedHandler;- 11/17 より前に試すなら、今の日付のまま
compatibility_flagsにenable_request_signalを足す。 - 日付を上げたうえで無効にしたいなら
disable_request_signal。 request_signal_passthroughは有効にならない。上流へ伝えたいときは上の例のようにsignalを明示的に渡す。
2. 新しいモジュールレジストリ
URL ベースのモジュール解決になり、JavaScript 標準と Node.js との互換性が上がる(Python Workers は旧レジストリのまま)。
- Node.js 互換(
nodejs_compat)の Worker では、require()で ES モジュールを読める。ただし読むモジュールとその依存が トップレベルawaitを使っていると失敗する。 import.meta.url(今のモジュールの URL)、import.meta.main(エントリポイントかどうか)、import.meta.resolve("./helper.js")(読み込まずに URL だけ求める。存在確認もしない)が使える。バンドラーがimport.metaを書き換えることがあるので、素の挙動を確かめるならバンドルなし(unbundled)でデプロイする。- 不正な import attributes(
with { type: ... }など)を拒否するようになる。依存ライブラリに古い書き方が残っていないか確認する。 - 先に試すなら
new_module_registryフラグ。日付を上げても旧レジストリに留まるならlegacy_module_registry。
上げる前のチェックリスト
- 検証環境で
enable_request_signalとnew_module_registryをフラグで先に入れてデプロイし、動作を見る。 - 依存に
require()経由でトップレベルawaitを含むものがないか、不正な import attributes がないかを確認。 - 問題なければ互換日付を
2026-11-17以降に上げてフラグを外す。駄目ならdisable_request_signal/legacy_module_registryで個別に戻す。
関連
- Cloudflare Workers: ランタイム更新時の grace period が最大 20 分に
- Durable Objects: デプロイ時のコード更新が既定で「遅延」になった(code_update_strategy)
出典
- @CFchangelog · 2026-11-04 (request.signal)
- @CFchangelog · 2026-11-04 (module registry)
- Changelog: developers.cloudflare.com
- Changelog: developers.cloudflare.com