Wrangler では、環境を使い、同じ Worker アプリケーションに対して異なる設定を作れます。環境は、Worker の Wrangler 設定ファイル で設定します。
環境を作成すると、Cloudflare は実質的に <top-level-name>-<environment-name> という名前の新しい Worker を作成します。たとえば、my-worker という Worker プロジェクトに dev 環境があると、my-worker-dev という名前の Worker としてデプロイされます。
環境の流れは次のとおりです。
-
Worker を作成します。例では
my-workerとします。 -
Worker の Wrangler 設定ファイル に
[env.<ENV_NAME>]セクションを追加し、環境を作成します。例ではdevです。{ "name": "my-worker", "env": { "<ENV_NAME>": { // environment-specific configuration goes here } } }name = "my-worker" [env] "<ENV_NAME>" = { } -
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" -
環境は、Wrangler コマンドの
--envまたは-eフラグと一緒に使います。たとえば、npx wrangler dev -e=devでdev環境の Worker を開発し、npx wrangler deploy -e=devでデプロイできます。代わりに、
CLOUDFLARE_ENV環境変数 でアクティブな環境を選べます。たとえば、CLOUDFLARE_ENV=dev npx wrangler deployはdev環境へデプロイします。コマンドライン引数の--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-b は worker-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 ↗ の構文で記述します。例:
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 deployUploaded my-worker
Published my-worker
dev.example.com/*npx wrangler deploy --env stagingUploaded my-worker-staging
Published my-worker-staging
staging.example.com/*npx wrangler deploy --env productionUploaded 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 = 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 deployUploaded my-worker
Published my-worker
example.com/*npx wrangler deploy --env stagingUploaded my-worker
Published my-worker
https://my-worker-staging.<YOUR_SUBDOMAIN>.workers.dev