Cloudflare Pagesプロジェクトで、デプロイが101件以上あると削除できない問題とその解決策
Cloudflareのデプロイが101件以上あるPagesプロジェクトを削除できない問題に直面したときの解決策。専用スクリプトを使ったデプロイメント削除手順とエイリアス付きデプロイへの対応方法を詳しく解説します。
目次
Cloudflare WorkersへのマイグレーションにともないPagesプロジェクトを削除しようとしたところ、予期しないエラーに遭遇しました。本記事では、デプロイメント数が多いPagesプロジェクトを削除する際の対処方法について、実際の作業手順を交えて解説します。
発生したエラー
Pagesプロジェクトの削除を試みたところ、以下のエラーメッセージが表示されました。

エラーメッセージに記載されているリンク先のドキュメントを確認したところ、この問題はCloudflare が認識している問題の一つであるそうです。ドキュメントによれば、プロジェクトに100個を超えるデプロイメントが存在する場合、Cloudflareダッシュボードから直接プロジェクトを削除することができない仕様となっています。この制限に対する回避策として、まず全てのデプロイメントを削除してからプロジェクト本体を削除するという手順が必要になります。
Your project has too many deployments to be deleted, follow this guide to delete them: https://cfl.re/3CXesln
このエラーは、100個以上のデプロイメントが存在するプロジェクトにおいて発生します。Cloudflareの仕様上、大量のデプロイメントを持つプロジェクトは直接削除できないため、まずデプロイメントを個別に削除する必要があります。
削除スクリプトの準備
Cloudflareチームはこのデプロイに関する問題を把握しており、現時点では提供されている削除スクリプトを使用する方法が推奨されています。ドキュメントにNode.jsで作られたプロジェクトのZIPファイルURLが記載されていますので、ダウンロードして展開しましょう。展開後、ターミナルでdelete-all-deploymentsディレクトリに移動し、依存関係をインストールします。
cd delete-all-deployments
npm install
必要な認証情報の取得
スクリプトの実行には、以下の3つの環境変数が必要です。
まずCF_API_TOKENについては、CloudflareダッシュボードからAPIトークンを作成します。ダッシュボード右上のユーザーアイコンから「My Profile」を選択し、「API Tokens」セクションで新規トークンを作成してください。このトークンには「Account – Cloudflare Pages: Edit」の権限が必要です。スクリプトはPages APIを通じてプロジェクト情報の取得とデプロイメントの削除を行うため、適切な権限設定が不可欠です。

次にCF_ACCOUNT_IDです。これは、Cloudflareダッシュボードのホーム画面にある3点リーダーボタンからコピーできます。

最後にCF_PAGES_PROJECT_NAMEには、削除対象のPagesプロジェクト名を指定します。
スクリプトの実行
準備が整ったら、以下のコマンドでスクリプトを実行します。
CF_API_TOKEN=your_token CF_ACCOUNT_ID=your_account_id CF_PAGES_PROJECT_NAME=your_project_name npm start
スクリプトは本番環境のデプロイメントを保護しながら、それ以外のデプロイメントを順次削除していきます。削除処理の進行状況はコンソールに表示され、Pagesダッシュボードでもリアルタイムでデプロイメント数が減少していく様子を確認できます。
Listing next 30 deployments, this may take a while...
Fetching deployments... (30 deployments fetched)
Deleted deployment 0054567a-28fa-4ede-ab78-775ea411cff9 for project hidetaka-dev-2023
Skipping production deployment: 03ba725c-c73a-4785-9a17-5be99e75ac9f
Deleted deployment 16cb846c-8b57-49d8-9eb6-722c33a19a65 for project hidetaka-dev-2023
Deleted deployment c7981d41-469e-4845-bbf8-5d58c578766d for project hidetaka-dev-2023
Deleted deployment 2481063f-6bcb-4569-8eda-e304d458701d for project hidetaka-dev-2023

なお、デプロイメント数が100を下回った時点でスクリプトを停止しても問題ありません。その後はCloudflareダッシュボードから通常の手順でプロジェクトを削除できるようになります。
エイリアス付きデプロイメントへの対応
スクリプト実行中に、処理がループし始める現象が発生しました。コンソールログを確認すると、同じデプロイメント数を何度も取得していることが判明しました。
Skipping production deployment: 03ba725c-c73a-4785-9a17-5be99e75ac9f
Error: You cannot delete an aliased deployment without a `?force=true` parameter in the API request URL.
at deleteDeployment (/Users/okamotohidetaka/Downloads/delete-all-deployments/index.js:58:11)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async deleteBatch (/Users/okamotohidetaka/Downloads/delete-all-deployments/index.js:135:5)
at async main (/Users/okamotohidetaka/Downloads/delete-all-deployments/index.js:161:5)
Listing next 30 deployments, this may take a while...
Fetching deployments... (2 deployments fetched)
エラーメッセージから、エイリアスが設定されているデプロイメントが削除できていないことが原因であると判明しました。Pages機能のプレビューエイリアスを使用している場合、特定のデプロイメントに対してカスタムURLが割り当てられています。このようなデプロイメントは、安全性の観点から強制削除フラグなしでは削除できない仕様になっています。
この問題に対処するには、CF_DELETE_ALIASED_DEPLOYMENTS環境変数を追加して再実行します。
CF_API_TOKEN=your_token CF_ACCOUNT_ID=your_account_id CF_PAGES_PROJECT_NAME=your_project_name CF_DELETE_ALIASED_DEPLOYMENTS=true npm start
この環境変数を設定することで、スクリプトはAPIリクエストに?force=trueパラメータを付与し、エイリアス付きデプロイメントも含めて削除を実行します。
まとめ
大量のデプロイメントを持つCloudflare Pagesプロジェクトの削除には、公式提供のスクリプトを使用する必要があります。適切なAPI権限を持つトークンを用意し、プロジェクト名とアカウントIDを正確に指定することで、自動的にデプロイメントの一括削除が可能です。ただし、プレビューエイリアス機能を使用している場合は、強制削除フラグの設定が必要となる点に注意してください。デプロイメント数が100を下回れば、通常のダッシュボード操作でプロジェクトを削除できるようになります。