はじめに
昨年にyfinance-jp-screener というリポジトリを作りました。
わが投資術を読んで、「じゃあこれをやってみよう。」と思って作成したものです。
米国株データにも対応させようとして、Github Actionsをマトリックスを使って並列処理できるようにしていたところ、次のようなエラーが出ました。
Failed to CreateArtifact: Artifact storage quota has been hit. Unable to upload any new artifacts.
プライベートリポジトリでテストしていたため、無料プランのアーティファクトストレージ容量に達してしまったようです。
アーティファクト(成果物)を削除する必要があるのですが、今後もぶつかることがあると思うのでまとめておこうと思います。
GitHub Actions のストレージ料金体制
プラン別の無料枠
プライベートのリポでは、プランごとに次の無料枠があります(公式ドキュメント より)。
| プラン | アーティファクトストレージ | 実行分数/月 | キャッシュ |
|---|---|---|---|
| GitHub Free | 500 MB | 2,000 分 | 10 GB |
| GitHub Pro | 1 GB | 3,000 分 | 10 GB |
| GitHub Team | 2 GB | 3,000 分 | 10 GB |
| GitHub Enterprise Cloud | 50 GB | 50,000 分 | 10 GB |
チェックポイント:
- アーティファクト・キャッシュ・GitHub Packages のストレージは共通は、アカウントで共通
- パブリック では GitHub Hosted Runner の利用は無料
- ストレージ使用量は 6〜12 時間ごとに再計算されるため、削除しても少し待つ必要がありそうです
容量超過時の具体的な対策
1. Web から手動でアーティファクトを削除する
すぐに容量を空けたい場合は、ブラウザ から直接削除できます。
- リポジトリの Actions タブを開く
- 左側で該当のワークフローを選ぶ
- 実行履歴から対象の Run をクリック
- 右側の Artifacts 一覧で、各アーティファクト右の ゴミ箱アイコン をクリックして削除

少数のアーティファクトならこれで十分だと思います。
2. 古いアーティファクトをまとめて削除する(c-hive/gha-remove-artifacts)
アーティファクトが大量にあるときは、自動削除用の Action が便利でした。
c-hive/gha-remove-artifacts を使うと、指定した期間より古いアーティファクトを一括削除できます。
.github/workflows/remove-old-artifacts.yml を次の内容で作成して push します。
name: Remove old artifacts
on:
# スケジュール実行(コメントアウト中)
# schedule:
# 毎日午前1時に実行
# - cron: '0 1 * * *'
# 手動トリガー
workflow_dispatch:
# 手動実行時に指定できるインプット変数
inputs:
artifact_age:
description: "アーティファクト削除の期限(例: 5 days, 1 month, 2 years)"
required: false
default: "1 month"
type: string
skip_tags:
description: "タグ付きリリースのアーティファクトをスキップするか"
required: false
default: "false"
type: choice
options:
- "true"
- "false"
skip_recent:
description: "最新N個のアーティファクトをスキップ(0で無効化)"
required: false
default: "5"
type: string
jobs:
remove-old-artifacts:
runs-on: ubuntu-latest
timeout-minutes: 10
# GitHub Actions API へのアクセス権限を付与
# プライベートリポジトリでの実行に必要
permissions:
actions: write
steps:
# ステップ1: 古いアーティファクトを削除
- name: Remove old artifacts
uses: c-hive/gha-remove-artifacts@v1
with:
# アーティファクト削除期限
# 手動実行時はユーザー入力値、未指定時はデフォルト値を使用
age: ${{ github.event.inputs.artifact_age || '1 month' }}
# オプション: タグ付きリリースのアーティファクトをスキップするか
skip-tags: ${{ github.event.inputs.skip_tags || 'false' }}
# オプション: 最新N個のアーティファクトをスキップ
# skip_recent が '0' なら空文字列(インプット無効化)、そうでなければ値を使用
skip-recent: ${{ github.event.inputs.skip_recent != '0' && github.event.inputs.skip_recent || '' }}注意: すでにストレージ枠が一杯で新規アップロードができない場合、このワークフローも動かないことがあります。その場合は 手動で Web から削除するか、次の act によるローカル実行を検討してください。
3. act でローカルから削除する(ストレージが埋まっているとき)
ストレージが完全に埋まっているか、実行時間のリミットなどに達している場合などで、GitHub Actions が動かせない場合は、act で ローカル環境 から gha-remove-artifacts を実行する方法があります。
手順(macOS)
- act をインストール:
brew install act - Personal Access Token(PAT)を作成
Settings → Developer settings → Personal access tokens → Fine-grained tokens で、act-tokenのような名前でトークンを発行します。
リポジトリへのアクセス権限(Actions: Read and write)を付与してください。


- 上記の
remove-old-artifacts.ymlを作成して push しておく - 次のコマンドでローカル実行:
act push --job remove-old-artifacts -s GITHUB_TOKEN=発行したPAT- 変数を渡して、実行:
事前に以下のようなjsonを用意しておいて、
.github/events/remove-old-artifacts-dispatch.json
{
"inputs": {
"artifact_age": "5 months",
"skip_tags": "false",
"skip_recent": "0"
}
}act workflow_dispatch \
-e .github/events/remove-old-artifacts-dispatch.json \
--job remove-old-artifacts \
--container-architecture linux/amd64 \
-s GITHUB_TOKEN=あなたのPATここについてはAppleシリコン系の方のみ必要だと思います
--container-architecture linux/amd64予防策
アーティファクトのデフォルト保持期間は 90 日なので短くすれば、長期的なストレージ肥大を抑えられます。
- リポジトリの Settings → Actions → General
- Artifact and log retention で保持日数を変更(例: 14 日)
この設定はこれから作成されるアーティファクトにのみ適用されるのでご注意を。
既存分は上記の手動削除や Action で削除する必要があります。
まとめ
| 状況 | おすすめ |
|---|---|
| 数個だけ消したい | Web から手動削除 |
| 定期的に古いものを消したい | c-hive/gha-remove-artifacts を cron で実行 |
| 一気に全削除したい | c-hive/gha-remove-artifacts を 数年単位で指定して実行 |
| GHA が動かせない場合 | act でローカルから gha-remove-artifacts 実行 |
データ収集ワークフローでは、アーティファクトが溜まりやすいので、最初から retention-days を短くするか、定期的な削除ワークフローを入れて置くかなどの予防策が大事だなぁ〜と思いました。