Skip to content

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

環境

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

Wrangler では、環境を使い、同じ Worker アプリケーションに対して異なる設定を作れます。環境は、Worker の Wrangler 設定ファイル で設定します。

環境を作成すると、Cloudflare は実質的に <top-level-name>-<environment-name> という名前の新しい Worker を作成します。たとえば、my-worker という Worker プロジェクトに dev 環境があると、my-worker-dev という名前の Worker としてデプロイされます。

環境の流れは次のとおりです。

  1. Worker を作成します。例では my-worker とします。

  2. Worker の Wrangler 設定ファイル[env.<ENV_NAME>] セクションを追加し、環境を作成します。例では dev です。

    {
    	"name": "my-worker",
    	"env": {
    		"<ENV_NAME>": {
    			// environment-specific configuration goes here
    		}
    	}
    }
    name = "my-worker"
    
    [env]
    "<ENV_NAME>" = { }
  3. dev 環境には、トップレベルの環境とは異なる値を設定できます。オプションが環境間で継承されるかどうかは、こちら を参照してください。 たとえば、dev 環境の Worker に別のルートを設定する場合:

    {
    	"$schema": "./node_modules/wrangler/config-schema.json",
    	"name": "your-worker",
    	"route": "example.com",
    	"env": {
    		"dev": {
    			"route": "dev.example.com",
    		},
    	},
    }
    "$schema" = "./node_modules/wrangler/config-schema.json"
    name = "your-worker"
    route = "example.com"
    
    [env.dev]
    route = "dev.example.com"
  4. 環境は、Wrangler コマンドの --env または -e フラグと一緒に使います。たとえば、npx wrangler dev -e=devdev 環境の Worker を開発し、npx wrangler deploy -e=dev でデプロイできます。

    代わりに、CLOUDFLARE_ENV 環境変数 でアクティブな環境を選べます。たとえば、CLOUDFLARE_ENV=dev npx wrangler deploydev 環境へデプロイします。コマンドライン引数の --env は、CLOUDFLARE_ENV 環境変数より優先されます。

継承されないキーと環境

継承されないキー はトップレベルで設定できますが、環境へは継承されません。各環境で指定する必要があります。

たとえば、バインディング環境変数 は継承されないため、Wrangler 設定ファイル環境 ごとに指定します。

次の Wrangler ファイルの例を確認してください。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"vars": {
		"API_HOST": "example.com",
	},
	"kv_namespaces": [
		{
			"binding": "<BINDING_NAME>",
			"id": "<KV_NAMESPACE_ID_DEV>",
		},
	],
	"env": {
		"production": {
			"vars": {
				"API_HOST": "production.example.com",
			},
			"kv_namespaces": [
				{
					"binding": "<BINDING_NAME>",
					"id": "<KV_NAMESPACE_ID_PRODUCTION>",
				},
			],
		},
	},
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"

[vars]
API_HOST = "example.com"

[[kv_namespaces]]
binding = "<BINDING_NAME>"
id = "<KV_NAMESPACE_ID_DEV>"

[env.production.vars]
API_HOST = "production.example.com"

[[env.production.kv_namespaces]]
binding = "<BINDING_NAME>"
id = "<KV_NAMESPACE_ID_PRODUCTION>"

サービスバインディング

特定環境の Worker を対象にする サービスバインディング を使うには、service フィールドの対象 Worker 名に環境名を付けます。形式は <worker-name>-<environment-name> です。 次の例では、どちらも staging 環境を持つ 2 つの Worker があります。worker-bworker-a へのサービスバインディングを持ちます。staging 環境の service フィールドは worker-a-staging を指し、トップレベルのサービスバインディングは worker-a を指します。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "worker-a",
	"vars": {
		"FOO": "<top-level-var>",
	},
	"env": {
		"staging": {
			"vars": {
				"FOO": "<staging-var>",
			},
		},
	},
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "worker-a"

[vars]
FOO = "<top-level-var>"

[env.staging.vars]
FOO = "<staging-var>"
{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "worker-b",
	"services": {
		"binding": "<BINDING_NAME>",
		"service": "worker-a",
	},
	// Note how `service = "worker-a-staging"`
	"env": {
		"staging": {
			"service": {
				"binding": "<BINDING_NAME>",
				"service": "worker-a-staging",
			},
		},
	},
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "worker-b"

[services]
binding = "<BINDING_NAME>"
service = "worker-a"

[env.staging.service]
binding = "<BINDING_NAME>"
service = "worker-a-staging"

本番用のシークレット

環境ごとの シークレット は、wrangler secret put <KEY> -env コマンドで割り当てられます。.dev.vars.<environment-name> という名前の dotenv 形式ファイルも作成できます。

ほかの環境変数と同様、シークレットは 継承されません。環境ごとに定義する必要があります。

ローカル開発でのシークレット

ローカル開発で使うシークレットは、Wrangler 設定ファイルと同じディレクトリの .dev.vars または .env に置きます。

これらのファイルは dotenv の構文で記述します。例:

.dev.vars / .envbash
SECRET_KEY="value"
API_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"

Cloudflare 環境ごとに異なるシークレットを設定するには、.dev.vars.<environment-name> または .env.<environment-name> という名前のファイルを作成します。

ローカル開発で Cloudflare 環境を選ぶと、対応する環境固有のファイルが、汎用の .dev.vars(または .env)より先に読み込まれます。

  • .dev.vars.<environment-name> を使う場合、すべてのシークレットを環境ごとに定義する必要があります。.dev.vars.<environment-name> が存在すると、そのファイルだけが読み込まれ、.dev.vars は読み込まれません。
  • 一方、一致する .env ファイルはすべて読み込まれ、値がマージされます。各変数には、もっとも具体的なファイルの値が使われます。優先順位は次のとおりです。
    • .env.<environment-name>.local(もっとも具体的)
    • .env.local
    • .env.<environment-name>
    • .env(もっとも汎用)

ステージング環境と本番環境

次の Wrangler ファイルは、[env.staging][env.production] の 2 つの環境を追加します。カスタムドメイン または ルート へデプロイする場合は、各環境に route または routes キー を指定する必要があります。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"route": "dev.example.com/*",
	"vars": {
		"ENVIRONMENT": "dev",
	},
	"env": {
		"staging": {
			"vars": {
				"ENVIRONMENT": "staging",
			},
			"route": "staging.example.com/*",
		},
		"production": {
			"vars": {
				"ENVIRONMENT": "production",
			},
			"routes": ["example.com/foo/*", "example.com/bar/*"],
		},
	},
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
route = "dev.example.com/*"

[vars]
ENVIRONMENT = "dev"

[env.staging]
route = "staging.example.com/*"

  [env.staging.vars]
  ENVIRONMENT = "staging"

[env.production]
routes = [ "example.com/foo/*", "example.com/bar/*" ]

  [env.production.vars]
  ENVIRONMENT = "production"

特定の環境でコマンドを実行するには、--env フラグで環境名を渡します。

この設定では、Wrangler は次のように動作します。

npx wrangler deploy
Uploaded my-worker
Published my-worker
  dev.example.com/*
npx wrangler deploy --env staging
Uploaded my-worker-staging
Published my-worker-staging
  staging.example.com/*
npx wrangler deploy --env production
Uploaded my-worker-production
Published my-worker-production
  example.com/*

定義した 環境変数vars キー)は、Worker 内の env オブジェクト から使えます。

この設定では、env.ENVIRONMENT 変数を使い、環境に応じたコードを呼び出せます。

export default {
	async fetch(request, env, ctx) {
		if (env.ENVIRONMENT === "staging") {
			// staging-specific code
		} else if (env.ENVIRONMENT === "production") {
			// production-specific code
		}
	},
};

*.workers.dev を使うステージング環境

*.workers.dev サブドメインへコードをデプロイするには、対象の環境に workers_dev = true を含めます。Wrangler ファイルは次のようになります。

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"route": "example.com/*",
	"env": {
		"staging": {
			"workers_dev": true,
		},
	},
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
route = "example.com/*"

[env.staging]
workers_dev = true

この設定では、Wrangler は次のように動作します。

npx wrangler deploy
Uploaded my-worker
Published my-worker
  example.com/*
npx wrangler deploy --env staging
Uploaded my-worker
Published my-worker
  https://my-worker-staging.<YOUR_SUBDOMAIN>.workers.dev

役に立ちましたか?