shiichan

Workers の Node.js 互換、ついにデフォルトでオンになったよ!

やっほー、しぃちゃんだよ!Workers を使ってる人にはうれしい、地味だけど大きな変更を見つけたよ!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog で、Workers の Node.js 互換がデフォルトで有効になったって発表されたの。compatibility date が 2026-08-04 以降なら、nodejs_compatnodejs_compat_v2 のコンパチビリティフラグを自分で立てなくても、最初からオンになるようになったんだよ。

今までどうだったの?

これまでは、node:cryptonode:buffer みたいな Node.js の組み込み API を Workers で使いたいとき、wrangler.jsonc(または wrangler.toml)の compatibility_flagsnodejs_compat を自分で追加する必要があったの。これに依存する npm パッケージを使うたびに、このひと手間が発生してたんだよね。

これで何が変わるの?

compatibility date が 2026-08-04 以降のプロジェクトなら、フラグを追加しなくても最初から Node.js の組み込み API が使えるようになるよ。対象には次のようなモジュールが含まれるの。

  • node:crypto
  • node:buffer
  • node:stream
  • node:net
  • node:dns
  • node:fs
  • node:http
  • ほか、Workers ランタイムが対応している Node.js 組み込み API 全般

これらに依存する npm パッケージも、追加設定なしでそのまま動くようになるよ。新規プロジェクトはフラグを何も付けなくて OK。既存プロジェクトも、nodejs_compat を残したまま compatibility date だけ更新できるから、移行もスムーズだよ。

古い compatibility date のまま使ってるプロジェクトは影響を受けなくて、これまで通りフラグでオプトインできるよ。Wrangler・Miniflare・Cloudflare の Vite プラグイン・Vitest Pool Workers は、ランタイム起動時にこの冗長なフラグをちゃんと無視してくれるんだって。

深く潜ってみよう

もし Node.js 互換を完全にオフにしたい場合は、nodejs_compatnodejs_compat_v2 のフラグを削除したうえで、代わりに次の 2 つのフラグを追加すればいいよ。

{
  "compatibility_date": "2026-08-12",
  "compatibility_flags": ["no_nodejs_compat", "no_nodejs_compat_v2"]
}

TOML 形式なら次の通りだよ。

compatibility_date = "2026-08-12"
compatibility_flags = ["no_nodejs_compat", "no_nodejs_compat_v2"]

まとめ

  • Workers で compatibility date が 2026-08-04 以降なら、Node.js 互換がフラグなしでデフォルト有効に
  • node:crypto node:fs node:http などの組み込み API に依存する npm パッケージも、追加設定なしで動くように
  • 古い compatibility date のプロジェクトは影響なし。既存プロジェクトはフラグを残したまま date だけ更新も可能
  • 完全にオフにしたいときは no_nodejs_compat no_nodejs_compat_v2 を追加すれば OK

これから Workers プロジェクトを始める人にとっては、余計な設定が 1 つ減る地味にうれしい変更だよ!