大量のNetlifyサイトが溜まってきたので、CLIを使って一括削除した際の手順をまとめます。
背景
開発やテストで作成したNetlifyサイトが41個まで増えていました。現在使用しているサイトは数個だけだったため、古いサイトをまとめて削除することにしました。
環境
- macOS
- Node.js
- netlify-cli v23.15.1
手順
1. Netlify CLIのインストール
npm install -g netlify-cli
2. ログイン
netlify login
ブラウザが開き、Netlifyの認証画面が表示されます。認証を許可するとCLIにトークンが保存されます。
3. サイト一覧の取得
netlify sites:list
JSON形式で取得する場合は --json オプションを付けます。
netlify sites:list --json
Python等で整形して確認すると見やすくなります。
netlify sites:list --json | python3 -c "
import json, sys
sites = json.load(sys.stdin)
print(f'合計: {len(sites)} サイト\n')
for i, s in enumerate(sites):
name = s.get('name', 'N/A')
url = s.get('url', 'N/A')
updated = s.get('updated_at', 'N/A')[:10]
site_id = s.get('id', 'N/A')
print(f'{i+1:3d}. {name}')
print(f' URL: {url}')
print(f' 更新日: {updated} ID: {site_id}')
"
4. サイトの削除
個別に削除する場合:
netlify sites:delete --force <site-id>
--force を付けないと確認プロンプトが表示されます。
5. シェルスクリプトで一括削除
削除対象のサイトIDと名前を配列に入れて、ループで一括削除できます。
#!/bin/bash
sites=(
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:site-name-1"
"yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy:site-name-2"
"zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz:site-name-3"
)
deleted=0
failed=0
for entry in "${sites[@]}"; do
id="${entry%%:*}"
name="${entry##*:}"
echo -n "削除中: $name ... "
if netlify sites:delete --force "$id" 2>&1; then
echo "OK"
((deleted++))
else
echo "FAILED"
((failed++))
fi
done
echo ""
echo "=== 完了 ==="
echo "削除成功: $deleted"
echo "失敗: $failed"
APIを直接使う方法
CLIを使わずにREST APIを直接呼ぶことも可能です。
認証トークンの取得
Netlifyのユーザー設定 > Applications > Personal access tokens からトークンを作成します。
サイト一覧の取得
curl -H "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \
https://api.netlify.com/api/v1/sites
サイトの削除
curl -X DELETE \
-H "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \
https://api.netlify.com/api/v1/sites/<site-id>
実行結果
今回は41サイト中39サイトを削除し、使用中の2サイトのみを残しました。全件エラーなく完了しました。
まとめ
- Netlify CLIの
sites:listとsites:deleteで簡単にサイトの管理ができる --jsonオプションでプログラムから扱いやすい形式で取得できる--forceオプションで確認プロンプトをスキップできるため、一括処理に便利- 削除は取り消せないので、削除前にサイト一覧を確認してから実行すること