Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Wrangler v3 から v4 へ移行する

最終更新 Markdown で表示Agent セットアップ

Wrangler v4 は、基盤システムと依存関係の更新に加え、Wrangler コマンドの一貫性と分かりやすさを高める改善に重点を置いたメジャーリリースです。これまでの Wrangler のメジャーバージョンは 基盤の書き換え再設計 でした。Wrangler のバージョン 4 の変更は、それよりかなり小さいです。いま Wrangler を使っているなら、作業の流れが大きく変わることはほとんどありません。

多くのユーザーは実質的な変更のないアップグレードになります。次の各節では、より重要な変更と、必要な場合の移行手順を説明します。

Wrangler v4 へアップグレードする

Worker プロジェクト内で最新の Wrangler v4 へアップグレードするには、次を実行します。

npm i -D wrangler@4

アップグレード後、インストールを確認できます。

npx wrangler --version

変更の概要

  • 更新された Node.js サポートポリシー: 2022 年にサポート終了(End-of-Life)となった Node.js v16 は、Wrangler v4 ではサポートされません。Wrangler は Node.js の 公式サポートライフサイクル に従います。

  • esbuild のバージョンアップ: Wrangler はデプロイ前に esbuild で Worker コードをバンドルしており、以前は esbuild v0.17.19 に固定されていました。Wrangler v4 は esbuild v0.24 を使い、動的なワイルドカードインポートに影響する場合があります。今後、Wrangler に同梱する esbuild のバージョンは定期的に更新します。esbuild は 1.0.0 未満のツールなので、バンドルの挙動に破壊的変更が含まれることがあります。とくに、Wrangler のマイナーバージョンで esbuild のバージョンを上げることがあります。

  • コマンドの既定がローカルモード: ローカルとリモートのどちらでも実行できるコマンドは、すべてローカルが既定になります。API へ問い合わせるには --remote フラグが必要です。

  • 非推奨のコマンドと設定を削除: レガシーなコマンド、フラグ、設定は削除されます。

詳細な変更

更新された Node.js サポートポリシー

Wrangler がサポートする Node.js のバージョンは、Node.js の公式ライフサイクル に合わせたものだけです。

  • サポート対象: Current、Active LTS、Maintenance LTS
  • サポート終了: Node.js v16(2022 年に EOL)

Wrangler のテストは v16 では実行されません。このバージョンを使い続けているユーザーは、未サポートの挙動に遭遇することがあります。サポートと Wrangler との互換性を続けるには、Node.js v16 を使っているユーザーは、サポート対象のバージョンへアップグレードする必要があります。

影響がありますか?

次のコマンドで Node.js のバージョンを確認します。

node --version

バージョンが v16 または v18 で始まる場合(例: v16.20.0v18.20.0)は、対応が必要です。

Node.js をアップグレードする には、Wrangler のシステム要件 を参照してください。Cloudflare は、最新の LTS バージョンの Node.js を使うことを推奨します。

esbuild のバージョンアップ

Wrangler v4 では esbuild を v0.17.19 から v0.24 へ上げます。改善(RPC で using キーワードを使えるなど)と、バンドル挙動の変更があります。

  • 動的インポート: ワイルドカードインポート(例: import('./data/' + kind + '.json'))は、一致するファイルをすべて自動でバンドルに含めます。

ワイルドカードの動的インポートに依存しているユーザーは、不要なファイルがバンドルされることがあります。esbuild v0.19 より前は、動的パス付きの import 文(import('./data/' + kind + '.json') など)は、グロブパターン(*.json)に一致するファイルをすべてバンドルしませんでした。明示的に参照したファイル、または find_additional_modules で含めたファイルだけがバンドルされました。esbuild v0.19 以降、ワイルドカードインポートはグロブパターンに一致するファイルをすべて自動でバンドルします。不要なファイルがバンドルされることがあるので、ワイルドカードの動的インポートは避け、明示的なインポートを使う方がよい場合があります。

コマンドの既定がローカルモードになる

すべてのコマンドは 既定でローカルモード で実行されます。Wrangler には KV や R2 などのリソースへアクセスするコマンドが多くありますが、以前はローカルとリモートのどちらで動くかがコマンドごとに揃っていませんでした。たとえば D1 はローカルのデータストアへの問い合わせが既定で、API へ問い合わせるには --remote フラグが必要でした。一方 KV は、以前は API への問い合わせが既定(暗黙の --remote フラグ)で、ローカルのデータストアへ問い合わせるには --local フラグが必要でした。Wrangler 全体で挙動を揃えるため、各コマンドはいま --local フラグを既定で使い、API へ問い合わせるには明示的な --remote フラグが必要です。

例:

  • 以前の挙動(Wrangler v3): wrangler kv key get は既定でリモートへ問い合わせました。
  • 新しい挙動(Wrangler v4): wrangler kv key get--remote を指定しない限り、ローカルへ問い合わせます。

データストアの参照や書き込みに wrangler kv keywrangler r2 object コマンドを使っている場合は、以前と同じ挙動にするには --remote フラグを追加する必要があります。

影響がありますか?

スクリプト、CI/CD パイプライン、手作業のワークフローで、次のコマンドを使っていないか確認してください。

KV コマンド:

  • wrangler kv key get
  • wrangler kv key put
  • wrangler kv key delete
  • wrangler kv key list
  • wrangler kv bulk put
  • wrangler kv bulk delete

R2 コマンド:

  • wrangler r2 object get
  • wrangler r2 object put
  • wrangler r2 object delete

次に当てはまる場合は対応が必要です。

  • リモート / 本番データとやり取りするつもりで、これらのコマンドを実行している。
  • --local または --remote フラグなしで、これらのコマンドを使うスクリプトや CI/CD パイプラインがある。

コードベースと CI/CD 設定を検索します。

grep -rE "wrangler (kv|r2)" --include="*.sh" --include="*.yml" --include="*.yaml" --include="Makefile" --include="package.json" .

対応方法:

Cloudflare アカウントとやり取りするコマンドには --remote を追加します。

# Before (Wrangler v3 - queried remote by default)
wrangler kv key get --binding MY_KV "my-key"

# After (Wrangler v4 - must specify --remote)
wrangler kv key get --binding MY_KV "my-key" --remote

非推奨のコマンドと設定を削除

Wrangler v2Wrangler v3 で以前非推奨になった機能は、すべて削除されます。加えて、Wrangler v3 のリリース期間中に非推奨になった次の機能も削除されます。

  • Legacy Assets(wrangler dev/deploy --legacy-assets または設定ファイルの legacy_assets プロパティ)。代わりに Workers Static Assets へ移行 することを推奨します。
  • レガシーな Node.js 互換性(wrangler dev/deploy --node-compat または設定ファイルの node_compat プロパティ)。代わりに nodejs_compat 互換性フラグ を使います。これには、レガシーな node_compat ポリフィルの機能と、ネイティブ実装の Node.js API が含まれます。
  • wrangler version。代わりに wrangler --version で、現在の Wrangler のバージョンを確認します。
  • getBindingsProxy()import { getBindingsProxy } from "wrangler")。代わりに getPlatformProxy() API を使います。引数はまったく同じです。
  • usage_modelWorkers Standard Pricing のロールアウト 以降、効果はありません。

影響がありますか?

Wrangler の設定ファイルwrangler.tomlwrangler.json、または wrangler.jsonc)で、非推奨の設定を確認します。

# For TOML files
grep -E "(legacy_assets|node_compat|usage_model)\s*=" wrangler.toml

# For JSON files
grep -E "\"(legacy_assets|node_compat|usage_model)\"" wrangler.json wrangler.jsonc

コマンドとスクリプトで、非推奨のフラグを確認します。

grep -rE "wrangler.*(--legacy-assets|--node-compat)" --include="*.sh" --include="*.yml" --include="*.yaml" --include="Makefile" --include="package.json" .

コード内で、非推奨 API の利用を確認します。

grep -rE "getBindingsProxy" --include="*.js" --include="*.ts" --include="*.mjs" .

次のいずれかが見つかった場合は対応が必要です。

非推奨 置き換え
legacy_assets 設定または --legacy-assets フラグ Workers Static Assets へ移行
node_compat 設定または --node-compat フラグ nodejs_compat 互換性フラグ を使う
usage_model 設定 削除する(効果はない)
wrangler version コマンド wrangler --version を使う
getBindingsProxy() のインポート getPlatformProxy() を使う(引数は同じ)
wrangler publish コマンド wrangler deploy を使う
wrangler generate コマンド npm create cloudflare@latest を使う
wrangler pages publish コマンド wrangler pages deploy を使う

役に立ちましたか?