Cloudflare セットアップ
アカウント設定、APIトークン、Wrangler CLI の構成
API トークン
Cloudflare ダッシュボードの My Profile > API Tokens から API トークンを作成します。
Pages および Workers のデプロイには、以下の権限が必要です:
Account > Cloudflare Pages > Edit
Account > Workers Scripts > Edit
Account > Account Settings > Read
Account > Workers KV Storage > Edit(KV を使用する場合)
Account > Workers R2 Storage > Edit(R2 を使用する場合)
Account > D1 > Edit(D1 を使用する場合)
Warning
Account Settings: Read は一見デプロイと無関係に見えるが、実際には必須の権限だ。最小構成で動作する Pages トークンも {Cloudflare Pages: Edit, Account Settings: Read} であり、バインディングが一切ない素の wrangler deploy でもこれが要る。外すと、権限不足を示す具体的なエラーではなく、原因のわかりにくい Authentication error [code: 10000] が返る。
Tip
サービスごとに別々のトークンを作るのではなく、全権限をまとめた1つのトークンを作成しましょう。GitHub リポジトリのシークレットに CLOUDFLARE_API_TOKEN として保存してください。
カスタムドメインのデュアルゾーン権限の罠や Zone Resources のスコープ設定まで含めた、より完全なトークンのリファレンスは ゼロからのデプロイ の CI トークンのセクションを参照。
低リスクなリポジトリ間でのトークン共有
同一アカウント上でリスクの低い小さなリポジトリ(サンプルアプリ、デモ、プレビューサイトなど)を多数運用しているなら、リポジトリごとにほぼ同じトークンを何個も作るのではなく、全リポジトリの権限を合算した1つのアカウントスコープトークンを発行するのも一つの手だ。ローテーションすべきシークレットが減り、スコープを考える場所も1つで済む。
配布にはループを使う:
for repo in org/repo-a org/repo-b org/repo-c; do
gh secret set CLOUDFLARE_API_TOKEN --repo "$repo" --body "$TOKEN"
doneトレードオフはブラスト半径だ -- トークンが漏洩すれば、それを共有するすべてのリポジトリが影響を受ける。いずれかのリポジトリの必要権限が変わったらトークンをローテーションするか、リポジトリの性質が乖離してきたらグループごとのトークンに戻す。
無関係、または信頼度の異なるリポジトリに対してはデフォルトにしない -- そうしたリポジトリは個別のトークンのままにしておく。
CI 用の環境変数
すべてのプロジェクトで以下の GitHub Actions シークレットが必要です:
| シークレット | 説明 |
|---|---|
CLOUDFLARE_ACCOUNT_ID | Cloudflare アカウント ID(ダッシュボードの URL に含まれる) |
CLOUDFLARE_API_TOKEN | 上記で作成した API トークン |
IFTTT_PROD_NOTIFY | (任意)デプロイ通知用の IFTTT Webhook URL |
Wrangler CLI
Wrangler は Cloudflare の CLI ツールです。CI では npx wrangler@4 を使い、グローバルインストールを避けます。ローカル開発では以下のようにインストールします:
pnpm add -D wranglerまたは npx で実行します:
npx wrangler@4 pages deploy dist --project-name=my-projectWarning
破壊的変更を避けるため、メジャーバージョンを固定してください(wrangler@4)。CI では wrangler@latest を使用しないでください。
wrangler.toml
Pages Functions、KV、D1、R2 を使用するプロジェクトでは、プロジェクトルートに wrangler.toml が必要です:
# Cloudflare Pages project configuration
compatibility_date = "2024-12-01"バインディングや設定の詳細は Wrangler 設定 を参照してください。