Cloudflare Workersのシークレット管理を整理した話
Cloudflare Workersでシークレット(APIキーなど秘密の値)を扱う方法を整理します。ローカルと本番で管理方法が異なります。
全体像
| 環境 | 方法 | 保存場所 |
|---|---|---|
| ローカル開発 | .dev.vars ファイルに記載 |
ローカルのファイル(gitignore) |
| 本番(Cloudflare) | wrangler secret put コマンドで登録 |
Cloudflareが管理 |
コード内からはどちらも platform.env.変数名 で同じようにアクセスできます。
ローカル開発:.dev.vars
プロジェクトルートに .dev.vars を作成します。wrangler dev が自動で読み込みます。
GITHUB_CLIENT_ID=your_client_id_here
GITHUB_CLIENT_SECRET=your_client_secret_here
.gitignore に必ず追加する
.dev.vars
シークレットをコミットしてしまうとセキュリティ事故になるため、.gitignore への追加は必須です。
本番:wrangler secret put
# 登録(実行するとプロンプトが出るので値を入力してEnter)
npx wrangler secret put GITHUB_CLIENT_ID
npx wrangler secret put GITHUB_CLIENT_SECRET
# 登録済みの一覧を確認
npx wrangler secret list
# 削除
npx wrangler secret delete GITHUB_CLIENT_ID
登録した値はCloudflareが管理し、デプロイ済みのWorkerから自動で参照できます。
wrangler.jsonc にシークレットは書かない
wrangler.jsonc の vars セクションはGitにコミットされるため、シークレットは書きません。
// ✅ 公開してよい値だけ vars に書く
"vars": {
"PUBLIC_APP_NAME": "My App",
"APP_ENV": "production"
}
// ❌ シークレットを vars に書いてはいけない
"vars": {
"GITHUB_CLIENT_SECRET": "xxxx" // GitHubに上がってしまう
}
シークレットは wrangler.jsonc に何も書かなくても、.dev.vars や wrangler secret put で登録した値が platform.env から参照できます。
コードからのアクセス
// +page.server.ts や +server.ts など
export const load = async ({ platform }) => {
const clientId = platform!.env.GITHUB_CLIENT_ID;
const clientSecret = platform!.env.GITHUB_CLIENT_SECRET;
// ...
};
ローカル(.dev.vars)も本番(wrangler secret put)も同じコードでアクセスできます。
まとめ
ローカル → .dev.vars に書く(.gitignore に追加)
本番 → wrangler secret put で登録
コード内 → platform.env.変数名 でアクセス
wrangler.jsonc → シークレットは書かない(公開値のみ vars に書く)