
序章:Wrangler CLIの概要とCloudflareエコシステムにおける役割
Wranglerは、Cloudflare Workers/Pagesを中心とした開発・ビルド・デプロイを統合的に支援する公式CLIです。ローカルでの反復開発から、エッジへの本番デプロイ、運用監視、リソースのライフサイクル管理まで、開発者の一連の行為を一つのツールで完結させる思想で設計されています。最新系(v3以降)は Miniflare v3 と、Workersコアランタイムのオープンソース実装である workerd を基盤とし、ローカルと本番で同一の実行コンテナを採用します。これにより「手元では動くのに本番で壊れる」類の不一致を原理的に回避でき、開発速度と信頼性の両立が可能になります。なるほど、CLIという外形に収まりながらも、実態は「本番互換の開発環境」を包含するプラットフォーム中枢なのです。
本ガイドでは、Wranglerの主要コマンド、設定ファイル(TOML/JSONC)と環境管理、Cloudflareサービス群との連携、デバッグ/トラブルシューティング、そしてCI/CD統合までを、実務の手順に寄せて体系化します。なお調査過程で収集されたJeep Wrangler(自動車)に関する情報は、本題と無関係のため割愛します。
第1章:Wranglerの主要コマンド詳細ガイド
1.1 プロジェクトの初期化と開発
wrangler init <name>: 対話的に新規Workersプロジェクトを作成します。雛形の選択、型設定、テスト構成など初期化一式が整います。wrangler generate <name> <template>: 既定テンプレートからプロジェクトを迅速に生成します。検証済みのテンプレート起点で実装を進めたい場合に有効です。wrangler dev: ローカル開発サーバーを起動し、ホットリロードで変更を即時反映します。Miniflare v3+workerdにより、本番と同一クラスのコンテナで挙動を再現します。--env <environment_name>: 設定ファイルの特定環境(例:[env.staging])を読み込んで実行。--config <file_path>: 既定のwrangler.toml(またはwrangler.jsonc)以外の設定を指定。モノレポや複数ワーカーの切替に有効。--remote: コードは手元で編集しつつ、リクエスト処理をCloudflareエッジ上で実行・検証します。
設計観点では、--envは単一設定ファイル内での多環境切替(開発/ステージング/本番)に、--configは設定ファイル自体を分離したマルチワーカー運用や厳密なCI設定に適します。両者の役割を使い分けることで、単純構成から高度なモノレポ運用まで無理なく拡張できます。
1.2 デプロイと運用管理
wrangler deploy: コードと設定を一括アップロードし、即時に新バージョンへ切替える「オールアットワンス」モデルを採用します。--envで環境別デプロイが可能です。wrangler versions upload/wrangler versions deploy: 先にバージョンだけをアップロードし、後段でトラフィック配分を制御しながら段階的に切替える運用(例:カナリア)を実現します。大規模ワークロードやリスク分散に有効です。wrangler delete: ワーカーをCloudflareから削除します。wrangler whoami: 現在の認証情報とアカウントIDを確認します。wrangler tail: 公開中ワーカーのログ(console.logや例外)をストリーミング表示します。現場の観測に不可欠です。
1.3 コマンド一覧(抜粋)
wrangler init/wrangler generatewrangler dev(--env/--config/--remote)wrangler deploy/wrangler versions {upload|deploy}/wrangler deletewrangler login/wrangler logout/wrangler whoamiwrangler tailwrangler kv/wrangler r2/wrangler d1/wrangler secret/wrangler pages
第2章:設定ファイル wrangler.toml と wrangler.jsonc の徹底解説
2.1 役割とフォーマットの進化
設定ファイルは、ワーカー名、エントリーポイント、本番互換の互換性日付、各種サービスへのバインディングなど、ワーカー動作の「単一の信頼できる情報源(Source of Truth)」として機能します。従来のTOML(wrangler.toml)に加え、v3.91.0以降はJSONC(wrangler.jsonc/wrangler.json)も公式サポートされました。JSONCはエコシステム親和性とコメント可能性を兼ね、より広範な開発ツールチェーンと自然に統合できます。
2.2 基本項目と環境セクション
最低限の主要項目は以下の通りです。
name: 公開名(ワーカー名)main: エントリースクリプトのパスcompatibility_date: ランタイムの互換性日付workers_dev/route: *.workers.dev あるいは独自ドメインのルーティング定義- バインディング:
vars(非機密環境変数)、kv_namespaces、r2_buckets、d1_databases、durable_objectsなど
環境別の上書きは [env.<name>](TOML)または "env": { "<name>": { ... } }(JSONC)で定義します。重要な注意点として、多くのバインディング(例:kv_namespaces/r2_buckets/vars)は環境間で自動継承されません。環境ごとの明示定義を促す設計により、誤ったリソース参照を未然に防ぎます。
2.3 設定例(TOML)
name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-07-12"
workers_dev = true
[vars]
PUBLIC_FLAG = "on"
[[kv_namespaces]]
binding = "USERS_NOTIFICATION_CONFIG"
id = "<kv-namespace-id>"
[[r2_buckets]]
binding = "ASSETS"
bucket_name = "my-assets"
[env.staging]
name = "my-worker-staging"
workers_dev = true
[[env.staging.kv_namespaces]]
binding = "USERS_NOTIFICATION_CONFIG"
id = "<kv-namespace-id-staging>"
[[env.staging.r2_buckets]]
binding = "ASSETS"
bucket_name = "my-assets-staging"
2.4 設定例(JSONC)
{
"name": "my-worker",
"main": "src/index.ts",
"compatibility_date": "2024-07-12",
"workers_dev": true,
"vars": {
"PUBLIC_FLAG": "on"
},
"kv_namespaces": [
{ "binding": "USERS_NOTIFICATION_CONFIG", "id": "<kv-namespace-id>" }
],
"r2_buckets": [
{ "binding": "ASSETS", "bucket_name": "my-assets" }
],
"env": {
"staging": {
"name": "my-worker-staging",
"workers_dev": true,
"kv_namespaces": [
{ "binding": "USERS_NOTIFICATION_CONFIG", "id": "<kv-namespace-id-staging>" }
],
"r2_buckets": [
{ "binding": "ASSETS", "bucket_name": "my-assets-staging" }
]
}
}
}
第3章:Cloudflareエコシステムとの連携
3.1 データストアへのバインディング
CLIは、Workers KV / R2 / D1 / Durable Objects / AI / Vectorize 等と相互運用するためのコマンドを備えます。たとえば、KVでは次のように名前空間を生成し、設定に反映します。
wrangler kv namespace create USERS_NOTIFICATION_CONFIG
出力される id を設定ファイルの kv_namespaces に記述すると、コード側からは env.USERS_NOTIFICATION_CONFIG 経由でKVを操作できます。R2やD1も同様に、CLIで資源を作成→設定にバインド→env.<binding>で利用、という流れが定着しています。
3.2 シークレットと環境変数(スコープを明確化)
機密情報の取り扱いは、スコープ(どこで効くか)を明確に分けて運用します。混同しやすいポイントを先に整理します。
-
wrangler secret(Cloudflare側に暗号化保存)- スコープ: 「ワーカー(script)× 環境(env)」単位です。環境間で自動継承されません。
- 例:
echo $API_KEY | wrangler secret put API_KEY --env production - 実行時アクセス: ワーカー内から
env.API_KEYで参照します。 - 補足: 同一ワーカーでも
stagingとproductionは別保管です。必要な環境すべてに投入してください。
-
vars(設定ファイルに平文定義されバンドルへ埋め込み)- スコープ: 設定ファイル単位(
[env]で環境別上書き可)。 - 用途: ログレベルやフラグなど「非機密」のビルド時定数向け。秘密情報は置かないでください。
- スコープ: 設定ファイル単位(
-
.dev.vars/.env(ローカル専用)- スコープ: ローカル開発(
wrangler dev/ Miniflare)でのみ読み込まれます。本番にはアップロードされません。 - 取り扱い:
.gitignoreに含め、リポジトリへコミットしないでください。 - 役割: 本番の
secretに相当する値をローカルで模擬するための利便ファイルです(「Cloudflareのシークレット保管庫」ではありません)。
- スコープ: ローカル開発(
実務ガイド(How-to):
- ローカルでの開発
- 値は
.dev.varsに書く(例:API_KEY=xxxx)。 - コードからは
env.API_KEYを参照。wrangler devが読み込みます。
- 本番/ステージングへの登録
- 方式A(従来のワーカー単位): CIから非対話で投入します。
- 例:
echo "$API_KEY" | wrangler secret put API_KEY --env production(ジョブのworking-directoryを対象ワーカーに合わせる)。 - 差分確認や棚卸し:
wrangler secret list --env production。
- 例:
- 方式B(アカウント単位のSecrets Store/オープンベータ): ダッシュボードまたはAPIでアカウントスコープにシークレットを登録し、対象ワーカーに割り当てて再利用します。利用可否(リージョン)や連携範囲、Wrangler統合の細部は随時更新されるため、最新ドキュメントを必ず参照してください。
- モノレポ/複数ワーカーでの共有方針
- 共有・再利用が必要な場合は、以下のいずれかを選びます。
- アカウントレベルの「Cloudflare Secrets Store(オープンベータ)」を利用し、中央管理下のシークレットを複数ワーカーで再利用する。
- CIのSecretsマネージャ(例: GitHub Secrets)を「単一の真実の情報源」とし、各ワーカー環境へ都度
wrangler secret putで配布する。 - 公開してよいメタデータであればKV/R2等へ格納し、アクセス制御を設計する。
Cloudflare Secrets Store はアカウントレベルで暗号化・冗長保存される集中管理型の保管庫で、現時点ではWorkersと互換があります(オープンベータ)。中国ネットワーク(JD Cloud運用)では未提供であり、今後他製品との連携が拡大予定です。導入時は、組織ポリシー(どこを単一の情報源にするか)、対象リージョン、運用チームの権限分離を考慮して選択してください。
この区別を守ると、「ローカルの便宜ファイル(.dev.vars)」と「Cloudflare側の本番用シークレット(wrangler secret)」、「非機密のvars」が混ざらず、安全かつ再現性の高い構成になります。
3.3 Pages Functionsとの協調
Pagesでも wrangler.toml を解釈可能で、静的アセットの出力ディレクトリを pages_build_output_dir で指定します。WorkersとPagesを単一のツールで束ねることで、静的配信とサーバーレス実行を組み合わせるハイブリッド構成を、自然な開発者体験で実現できます。
第4章:実践的なデバッグとトラブルシューティング
4.1 デバッグツールキット
- ローカルは
wrangler devが中核です。例外やログが即時に可視化され、初期段階での欠陥捕捉に寄与します。 - 本番の観測には
wrangler tailが有効です。console.logの出力と例外をリアルタイムに収集し、リクエストコンテキストに即した診断が可能です。
4.2 よくあるエラーと対処
- 設定ファイル未検出(CIでの
wrangler.toml/wrangler.jsonc不足): ワークスペースルートやworking-directoryの誤りで発生します。モノレポでは各パッケージ直下に設定を保持し、CIの実行ディレクトリを明示します。 - 互換性日付/ランタイム依存の不一致:
compatibility_dateの更新やWrangler/Miniflare/workerdのバージョン差で例外が起きる場合があります。ランタイムの更新時はローカル→ステージングの順に検証し、段階的に拡大します。 - 大規模構成でのAPIタイムアウト(多数のバインディングを伴うデプロイ):
versions upload→段階デプロイに切替え、再試行や分割デプロイを検討します。並行度の調整やリソース作成順序の見直しも有効です。
4.3 メジャーバージョン移行の勘所
v3では「ローカル・バイ・デフォルト」な開発体験が導入され、Miniflare v3+workerdが標準基盤になりました。既存プロジェクトの移行では、設定フォーマット(TOML→JSONCの選択肢拡大)とランタイム互換性の確認、開発・CIのフラグ運用(--env/--config)を改めて棚卸しすると安全です。
第5章:CI/CDパイプラインへの統合
5.1 GitHub Actionsによる自動デプロイ
Cloudflare公式の wrangler-action を利用すると、GitHubからの自動デプロイが容易です。インタラクティブなwrangler loginを使わず、APIトークンとアカウントIDをGitHub Secretsで管理します。
name: Deploy Worker
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/edge-app # モノレポ例
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Publish with Wrangler
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
command: deploy --config wrangler.jsonc --env production
5.2 APIトークンの最小権限設計
トークンはWorkers編集に必要な権限へ最小化し、必要に応じてKV/R2/D1などの範囲を限定します。Secretsに保存し、ワークフローから参照するだけに留めれば、リポジトリに機密が漏れる経路を遮断できます。DevSecOpsの要諦として「最小権限+秘匿の自動化」を徹底します。
5.3 多環境・モノレポ運用の型
- 多環境は
--envによる切替を基本としつつ、設定分離が望ましい場合は--configでファイルを分けます。 - モノレポではパッケージ毎に設定とSecretsスコープを分け、CIの
working-directoryで明示的に対象を限定します。 - 段階リリースは
versions upload→versions deployで配分制御を組み込み、ロールバック手順も対で整備します。
結論:Wrangler CLIの今後の展望
Wranglerは、単なるデプロイツールを越えて「本番互換の開発実行環境」と「Cloudflare Developer Platformの制御面」を兼ね備えた中核的基盤へ成熟しました。ローカルと本番の同一性、JSONCサポート、公式アクションによるCI/CD親和性は、利便性・性能・安全性を同時に押し上げています。今後もAI/Vectorize等の新サービス連携が深化し、より大規模で複雑なワークロードを無理なく扱える方向へ進むでしょう。開発者は、--env/--config/versions系コマンドを起点に、設計段階で運用要件(段階リリース、最小権限、観測性)を織り込むことで、堅牢な継続デリバリーを確立できます。
参考文献
- Cloudflare Docs: Wrangler(CLIリファレンス)
- Cloudflare Docs: Configuration(wrangler.toml / wrangler.jsonc)
- Miniflare v3(ローカルWorkersエミュレーター)
- workerd(WorkersランタイムのOSS)
- wrangler-action(公式GitHub Actions)
- Cloudflare Docs: tail(ログストリーミング)
- Cloudflare Docs: versions(段階リリース)
- Cloudflare Docs: Secretsと環境変数