【Cloudflare Pages × Wrangler】デプロイ時に「Failed to automatically retrieve account IDs」エラーが出る原因と解決法

公開日: 2026年08月17日

Docker コンテナ内や CI/CD 環境から Cloudflare の CLI ツール Wrangler を使って Cloudflare Pages へデプロイ(wrangler pages deploy)しようとしたところ、突然以下のようなエラーが発生してデプロイが失敗するようになりました。

😱 「昨日まで問題なくデプロイできていたのに、なぜ突然アカウント ID のエラーが出るの!?」

今回は、このエラーが発生した根本原因と、Cloudflare Pages 特有の仕様(設定ファイルではなく環境変数で指定する理由)、および Docker Compose での正しい解決手順をまとめます。


🔍 発生したエラーログ

 ⛅️ wrangler 4.110.0
────────────────────

✘ [ERROR] Failed to automatically retrieve account IDs for the logged in user.

  You may have incorrect permissions on your API token, or your authentication may have expired. Try running `wrangler login` to re-authenticate. You can also skip this account check by adding an `account_id` in your Wrangler configuration file, or by setting the value of CLOUDFLARE_ACCOUNT_ID

🧐 なぜ前は動いていたのか?突然エラーになった根本原因

調査したところ、「Docker コンテナの再作成」「API トークンの権限仕様」 の 2 つが重なったことが原因でした。

1. 以前は wrangler login の OAuth 認証キャッシュが生きていた

以前は、開発環境やコンテナ内で一度 wrangler login を実行しており、ホームディレクトリ(~/.config/.wrangler/)にブラウザログイン経由の OAuth トークンが保存されていました。 この OAuth トークンには「所属アカウント一覧の閲覧権限」が含まれているため、Wrangler は自動的に Cloudflare のアカウント ID を取得(GET /client/v4/accounts200 OK)できていました。

2. コンテナ再作成でログインセッションが消滅した

リポジトリの統合やディレクトリ構成の変更に伴い、Docker コンテナを停止・削除(docker stop / docker rm)して再構築したことで、コンテナ内に保存されていた認証キャッシュが完全にクリア されました。

3. API トークンに「アカウント一覧取得権限」が含まれていなかった

認証キャッシュが消えた後、Wrangler は API トークンを使ってアカウント ID を自動取得しようとしました。 しかし、Wrangler の内部ログ(~/.config/.wrangler/logs/)を確認すると、以下の通信で弾かれていました:

-- START CF API REQUEST: GET https://api.cloudflare.com/client/v4/accounts
-- START CF API RESPONSE: Forbidden 403
errorMessage: "user account fetch permission denied"

Cloudflare Pages のデプロイ用トークンには「Pages 編集」「キャッシュパージ」等の権限を付与していましたが、セキュリティ上「アカウント一覧の閲覧権限(Account: Read)」は含まれていません。そのため、自動検出 API が 403 Forbidden となりエラー停止してしまっていました。


⚠️ 陥りがちな罠:Pages プロジェクトの設定ファイルには account_id を書けない!

エラーメッセージには「account_id を Wrangler 設定ファイルに追加するか、環境変数 CLOUDFLARE_ACCOUNT_ID を設定してください」と書かれています。

そこで、素直に wrangler.jsonc(または wrangler.toml)に "account_id" を追記して実行すると、別のエラー が発生します。

// ❌ wrangler.jsonc に account_id を書くと...
{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "name": "my-frontend",
  "account_id": "0123456789abcdef0123456789abcdef", // 👈 これを追加するとエラー!
  "pages_build_output_dir": "./out",
  "compatibility_date": "2026-08-01"
}
✘ [ERROR] Running configuration file validation for Pages:

    - Configuration file for Pages projects does not support "account_id"

理由:Cloudflare Workers と Pages の仕様の違い

  • Cloudflare Workers: 設定ファイル(wrangler.jsonc)内に account_id を直接記述できる。
  • Cloudflare Pages (pages_build_output_dir): 設定ファイルスキーマで account_id の記述が明示的に禁止されている。

したがって、Cloudflare Pages プロジェクトでは 環境変数 CLOUDFLARE_ACCOUNT_ID を使って渡すのが唯一の正しいアプローチ となります。


💡 完全解決手順

ステップ 1: Cloudflare ダッシュボードでアカウント ID を確認

  1. Cloudflare ダッシュボード にログインします。
  2. 任意のドメイン(または Workers / Pages)の概要画面(Overview)を開きます。
  3. 画面右側サイドバー下部にある 「アカウント ID」(32桁の英数字)をコピーします。 (※ URL バーの dash.cloudflare.com/<32桁のアカウントID>/... からも確認できます)

ステップ 2: .env.local に環境変数を設定

フロントエンド(Next.js 等)のルートにある .env.localCLOUDFLARE_ACCOUNT_ID を追記します。

# Cloudflare 設定
CLOUDFLARE_ACCOUNT_ID=0123456789abcdef0123456789abcdef  # 👈 追加
CLOUDFLARE_API_TOKEN=your_cloudflare_api_token_here
CLOUDFLARE_ZONE_ID=0123456789abcdef0123456789abcdef

ステップ 3: docker-compose.yml で環境変数をコンテナに伝播

Wrangler は .env.local を直接読み込みません。Docker コンテナ内のプロセスに環境変数を渡すため、docker-compose.yml のサービス定義に env_file を追加します。

services:
  nextjs-dev:
    
    env_file:                    # 👈 追加
      - ./nextjs-dev/.env.local  # 👈 追加
    

ステップ 4: サンプルファイル(.env.example)と .gitignore の整備

.env.local は Git 管理外のため、後から環境を再構築する際に設定項目を忘れてしまわないよう、コミット可能な .env.example を配置しておきます。

1. .env.example の作成

# 公開サイトURL
NEXT_PUBLIC_SITE_URL=https://blog.example.com
NEXT_PUBLIC_WORDPRESS_API_URL=https://blog-wp.example.com/graphql

# Cloudflare アカウント・デプロイ設定
CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id_here
CLOUDFLARE_API_TOKEN=your_cloudflare_api_token_here
CLOUDFLARE_ZONE_ID=your_cloudflare_zone_id_here

2. .gitignore でサンプルファイルを除外解除

.env* で一括除外している場合、.env.example をホワイトリストに追加します。

# env files
.env*
!.env.example  # 👈 これを追加して Git 管理対象にする

ステップ 5: コンテナ再起動とデプロイの確認

設定を反映させるため、コンテナを再起動します。

docker compose up -d nextjs-dev

ビルド&デプロイを実行します:

docker compose exec nextjs-dev pnpm run build:deploy

デプロイ成功ログ:

 ⛅️ wrangler 4.110.0
────────────────────
✨ Success! Uploaded 1453 files (21.84 sec)
✨ Uploading _headers
🌎 Deploying...
✨ Deployment complete! Take a peek over at https://xxxx.pages.dev

🧹 [Cloudflare] CDN キャッシュのパージ(消去)を開始します...
✨ [Cloudflare] キャッシュのパージが正常に完了しました!全世界のエッジが最新化されました。

自動取得エラーがスキップされ、正常にデプロイとキャッシュパージが完了しました!🎉


🏆 まとめ

項目 ポイント
エラーの正体 API トークンにアカウント一覧閲覧権限がなく、自動検出(GET /accounts)に失敗
Pages の罠 wrangler.jsonc"account_id" を書くとバリデーションエラーになる
正しい指定方法 環境変数 CLOUDFLARE_ACCOUNT_ID で渡す
Docker での注意点 docker-compose.ymlenv_file.env.local をコンテナに渡す

Docker コンテナや CI/CD パイプラインを再構築した際は、「Wrangler がどのアカウントにデプロイすべきかを環境変数で明確に教えてあげる」ことを意識しておきましょう!