8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

無課金初期アバター男、GitHubの仕様を知らなくて横転

8
Last updated at Posted at 2026-03-02

GitHubのPackage機能って使っていますか?
そこで起きた事件をご紹介します。

先に結論から

  • Packages Storageが無課金のリミットに突入していた
  • 削除するもUploadした総容量なので、解除は月跨ぎとなる
  • 不要なバージョンは逐一消さないと面倒
    • ポチポチGUIで設定しなきゃいけないと思ってたがghで一発でいけた

背景

ぼくはGitHub Private Packageを頻繁に使用しています。
勿論要件によりますが、特に拘りがないケースはPrivate Packageで楽をしたいのです。

そのPackage(React製のUI Framework)で修正を入れたい際にVersion Upが失敗。
ビルドチェックを忘れたかな?と思ったので、GitHubを見てみることに。

npm error 403 403 Forbidden - PUT https://npm.pkg.github.com/[アカウント名]/[リポジトリ名] - Permission permission_denied: Account has reached its billing limit. Contact support or your organization admin to increase the quota. https://docs.github.com/en/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-packages
npm error 403 In most cases, you or one of your dependencies are requesting
npm error 403 a package version that is forbidden by your security policy, or
npm error 403 on a server you do not have access to.
npm error A complete log of this run can be found in: /home/runner/.npm/_logs/2026-02-25T08_35_15_403Z-debug-0.log
Error: Process completed with exit code 1.

403?
そして気になるこの文言:Account has reached its billing limit.
ここでアカウントの無課金のリミットが解除されたと知ります。

そこでアカウントの請求関連のページに遷移してみます。

image.png

はい、完全にアウトですね。
しかし4日とはいえ、使用できないのは困ります。
出来る限りの対策を考えたいのがエンジニアである。

古いPackageを削除する

Packageを確認してみます。リポジトリ名からPackagesへと遷移します。

バージョンの一覧は下記のページで見ることができます。
https://github.com/[アカウント名]/[リポジトリ名]/pkgs/npm/[パッケージ名]/versions

一覧にしてみると大量のバージョンが…
Deleteボタンで削除できますが、大量にありすぎていちいち削除するのは面倒です。

gh cli(GitHub CLI)を使用する

どうやらAPIが提供されているらしいので、こちらの操作で一括削除ができそうです。

インストールはこちらでできます。対象のOSを選んでください。

ghで使用するトークンを発行

gh auth loginの実行時に選択するブラウザ経由のログインではどのみちPackageの操作などで弾かれてしまいます。
なので、こちらの画面からTokenを発行します。

スコープは下記を設定します。

  • repo
  • white:packages
    • read:packages
  • delete:packages
  • admin:org
    • write:org
    • read:org

このような形で設定します。read:orgはorganizationのアカウントではなくても設定が必要です。理由としては

  • orgのアカウントを参照
  • 存在しなければ個人のアカウントを参照
    といった形の挙動をとるため、orgのread権限がないと403で弾かれてしまいます。

Tokenを付与してログイン

無事にトークンが発行出来たら以下を実行します。
ぼくはWindowsなのでPowerShellで実行しています。

echo [TOKEN] | gh auth login --with-token
# [TOKEN]の箇所はgh_から始まるトークンを貼り付けます。

無事にログインできましたら以下のステップに実行します。

削除対象のデータ参照~削除実行

このような形で削除が可能です。

$versions = gh api --paginate /users/[アカウント名]/packages/npm/[パッケージ名]/versions | ConvertFrom-Json

$sorted = $versions | Sort-Object created_at -Descending

# 最新のバージョン以外を対象する
$targets = $sorted | Select-Object -Skip 1

foreach ($t in $targets) {
    gh api --method DELETE /users/[アカウント名]/packages/npm/[パッケージ名]/versions/$($t.id)
}

このような形で実行します。

確認の際は
https://github.com/[アカウント名]/[リポジトリ名]/pkgs/npm/[パッケージ名]/versions
こちらの数が減っていればOKです。

今回は最新のバージョンのみ残すようにしていますが、最新の件数を調整したりなどはご自身で実施してください。変数$targetsでログを出して削除対象を確認したうえで実行してください。

さて結果は以下に…?

image.png

変わってないじゃあないかーーーーッ!!話が違うじゃあないかーーーーッ!!!

…と思いましたが、結論ぼくの勘違いです。

Included usage limits reset in 4 days.

含まれる使用制限は 4 日後にリセットされます。

めちゃくちゃバージョンアップしてたので制限超過になってただけでした。
しかし古いバージョン自体は削除したかったので、いい経験になりました。

無課金初期アバターのGitHubユーザーの皆は、こんなチョンボをしないようにッ!!


オブジェクティブグループではXの投稿も平日毎日行っています!
IT 関連の小ネタや便利技から、日常のアニメ・ゲーム布教なども幅広く投稿してるので、
ご興味のある方は是非フォロー・いいねをお願いします。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?