CloudFlareのdeploymentを消す

CloudFlareからPagesプロジェクトを消そうとすると、「デプロイが多すぎて消せない」というエラーと共に、「ここのやり方に沿って消してね」と案内されますが、ちょっと何言ってるか分かんないので具体的な流れをメモしておきます

デプロイ数が100を超えるとサイトからは消せないみたい
Known issues - Cloudflare Docs

npmパッケージをインストール

wslでもなんでもいいので、npmがインストール済みのCLIの環境を開きます
(ここではUbuntu24.04で)

npmがない場合はインストールしてください

sudo apt install npm

https://pub-505c82ba1c844ba788b97b1ed9415e75.r2.dev/delete-all-deployments.zip
このURLからダウンロードしたzipファイルを解凍してディレクトリ内に入ります
プロンプトでは以下のようにすればいいかと

1
2
3
wget https://pub-505c82ba1c844ba788b97b1ed9415e75.r2.dev/delete-all-deployments.zip
unzip delete-all-deployments.zip -d delete-all-deployments
cd delete-all-deployments

カレントディレクトリの中身は以下のようになるはずです

LICENSE.md  README.md  index.js  package-lock.json  package.json

npmパッケージをインストール

1
npm install

削除実行

デプロイの削除を実行する前に、

  • アカウントID
  • プロジェクト名
  • APIトークン
    を指定する必要があります

アカウントID

アカウントIDはCloudFlareのダッシュボードから「コンピューティング(Workers)」の中の「workers & pages」を開き、右側、もしくはページ下部の「アカウントの詳細」欄にあると思います


プロジェクト名

プロジェクト名は同じ「workers & pages」にあるpagesプロジェクトの名前です

APIトークン

APIトークンに関しては、無い場合作る必要があります

先ほど確認したアカウントIDのすぐ下に"「API トークンの管理」というリンクがあるので、クリック

“トークンを作成する"をクリック

スクロールしてカスタムトークンの作成を選択してください

こんな感じで作成して、“概要に進む"をクリック

トークンを作成するをクリックすると以下の画面が出るので、トークンを安全な場所にコピペしておきます
(このページを閉じたら二度とトークンのコードが見れなくなるため)

これでAPIトークンが作成できました

あとは公式の説明通りに実行してください

1
CF_API_TOKEN=<YOUR_CF_API_TOKEN> CF_ACCOUNT_ID=<ACCOUNT_ID> CF_PAGES_PROJECT_NAME=<PROJECT_NAME> npm start

実行すると、プロジェクトからデプロイが1つずつ削除されていきます

Error修正

古いバージョンのNode.jsだと以下のエラーがでる

/<任意のディレクトリ>/delete-all-deployments/index.js:76
  if(body.result?.length){
                 ^

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

?.が新しい演算子で古いバージョンでは対応しないらしい
Node.jsをアップデートするか、旧式の記法に書き直すことで治ります

body.result?.length → body.result && body.result.length

この程度ならsedで書き換えてしまいましょう

1
sed -e "s/body.result?.length/body.result \&\& body.result.length/g" index.js