# GitHub Actions の「No space left on device」：ディスクを埋めているものを調べ、空け、大きいディスクに移す

> GitHub の標準の Linux ランナーで保証される空きは 14 GB だけで、Docker のイメージ、キャッシュの復元、ビルドの成果物ですぐに埋まります。何がディスクを埋めているかの調べ方、ランナーのイメージから消せるもの、そして大きいディスクの選び方。GitHub の大きいランナーは Team と Enterprise だけ。Skipbox なら専用のマシンで S 80 GB、M 160 GB、L 320 GB が定額です。

GitHub Actions の「No space left on device」は、ジョブがランナーの空きより多く書き込んだという意味で、GitHub の標準の Linux ランナーの空きはおよそ 14 GB です。runner-images のメンテナーは「プライベートでも公開でも、保証する空きは 14GB だけ」と書いています。残りはイメージに入っているツールで、`ubuntu-latest` のあるユーザーの一覧では Android SDK が 12 GB、ツールキャッシュが 8.5 GB、GHC が 5.5 GB でした。Docker のイメージ、ディスクに展開されたキャッシュ、ビルドの成果物で 14 GB はすぐに埋まります。直すのはこの順です。何がディスクを埋めているかを見る（`df -h`、`df -i`、`du`、`docker system df`）、書き込みを減らす、使わないプリインストールのツールを消す、それでも収まらなければ大きいディスクで動かす。GitHub の大きいランナーは 75 GB からですが、使えるのは GitHub Team と Enterprise Cloud だけです。

Skipbox は、アカウント専用のマシンでジョブを動かします。ディスクは S で 80 GB、M で 160 GB、L で 320 GB で、定額、実行時間は無制限です。ジョブのあとも残すキャッシュはこのディスクにあり、ディスクが埋まってきたら古いものから減らすので、ジョブの最初に何かを消す必要はありません。

- ディスクは S で 80 GB、M で 160 GB、L で 320 GB。GitHub の標準ランナーの空きはおよそ 14 GB
- Docker のイメージとレイヤー、パッケージのキャッシュは、このディスクにジョブのあとも残る
- ジョブのあとで 85% を超えていれば、最後に使った日が古いものから 75% まで減らす

**GitHub Actions を月額固定・使い放題に** Skipbox は、アカウント専用のマシンで GitHub Actions のジョブを動かします。何分動かしても月 6,000 円。ジョブが終わっても Docker のレイヤーと依存パッケージのキャッシュが残るので、次のジョブはすぐ始まります。

4 vCPU のランナーを月 20,000分 使うと、GitHub 約 35,120 円 → Skipbox 6,000 円。毎月 約 29,120 円お得。

移行は `runs-on: skipbox` に 1行書き換えるだけです。

[7日間無料で試す](https://app.skipbox.dev/sign-in?ref=g-github-actions-no-space-left-on-device-ja)

## GitHub のランナーのディスク

[GitHub ホストランナー](https://docs.github.com/ja/actions/reference/runners/github-hosted-runners)の表では、標準の Linux ランナーの SSD はプライベートリポジトリでも公開リポジトリでも 14 GB です。[runner-images のディスカッション #9329](https://github.com/actions/runner-images/discussions/9329) では、イメージの変更で Ubuntu ランナーの空きが 31 GB 超から 17 GB 超に減ったあと、メンテナーが「プライベートでも公開でも、保証する空きは 14GB だけ」と答えています。14 GB と考えてください。

残りはイメージです。[issue #10386](https://github.com/actions/runner-images/issues/10386)（「Free space left: 72 MB」）で、あるユーザーが `ubuntu-latest` で `du` を取った結果です。

| ディレクトリ | 大きさ |
|---|---|
| `/usr/local/lib/android` | 12 GB |
| `/opt/hostedtoolcache` | 8.5 GB（CodeQL だけで 5 GB） |
| `/usr/local/.ghcup` | 5.5 GB |

## 1. 何がディスクを埋めているかを見る

落ちるステップのあとに、`if: always()` を付けたステップを足します。

```yaml
- name: Disk usage
  if: always()
  run: |
    df -h
    df -i /
    sudo du -xh --max-depth=1 / 2>/dev/null | sort -rh | head -15
    docker system df || true
```

- `df -h` はファイルシステムごとの使用量です。ジョブがどこに書いているか（ワークスペース、`/var/lib/docker` の Docker のデータ、一時ディレクトリ）を確かめます。
- `df -i` は inode です。バイトが空いていても inode（ファイル 1 つに 1 つ）が尽きると、同じエラーになります。
- `du` は大きいディレクトリです。
- [`docker system df`](https://docs.docker.com/reference/cli/docker/system/df/) は、Docker のイメージ、コンテナ、ボリューム、ビルドキャッシュが使っている量です。

## 2. 書き込みを減らす

- **ビルドの合間に Docker を prune する。** [`docker system prune`](https://docs.docker.com/reference/cli/docker/system/prune/) は、止まったコンテナ、使っていないネットワーク、dangling なイメージ、使っていないビルドキャッシュを消します。`-a` で使っていないイメージすべて、`--volumes` で匿名ボリュームも消します。
- **効くものだけキャッシュする。** 復元したキャッシュはランナーのディスクに展開されるので、大きいアーカイブはダウンロードより多くの場所を取ります。ジョブごとに分けるか、すぐ取り直せるものは外します。
- **ビルドの成果物を片づける。** あとのステップで使わないものは、場所が要るステップの前に消します。

## 3. 使わないプリインストールのツールを消す

[issue #2875](https://github.com/actions/runner-images/issues/2875) と #10386 から。

```yaml
- name: Free disk space
  run: |
    sudo rm -rf /usr/local/lib/android /usr/local/.ghcup /opt/hostedtoolcache/CodeQL
    sudo rm -rf /usr/share/dotnet /usr/local/share/boost
    df -h /
```

かかるものは 2 つです。次のジョブの VM にはまた入っているので、何 GB も消す時間を毎回払います。そして `$AGENT_TOOLSDIRECTORY`（ツールキャッシュ全体）を消すともっと空きますが、#2875 を立てた人が書いているとおり、そこにあるはずのツールを使うステップが動かなくなります。[free-disk-space](https://github.com/marketplace/actions/free-disk-space-ubuntu) のアクションは、こうした削除をまとめたものです。作者はこのスレッドのあとにツールキャッシュを消すオプションを足し、「さらに 6GB 空く」と書いています。

## 4. 大きいディスクで動かす

| ランナー | ディスク | 使える人 |
|---|---|---|
| GitHub の標準の Linux ランナー | SSD 14 GB、空きはおよそ 14 GB | だれでも |
| GitHub の大きいランナー、2〜96 vCPU | 2 vCPU で 75 GB、4 で 150 GB、8 で 300 GB、最大 2,040 GB（[大きいランナー](https://docs.github.com/ja/actions/reference/runners/larger-runners)） | GitHub Team と Enterprise Cloud の組織、分課金（[大きいランナーについて](https://docs.github.com/ja/actions/concepts/runners/larger-runners)） |
| セルフホストランナー | 用意した分。ジョブのあとも残すランナーは、だれかが片づけないかぎりイメージと古いワークスペースで埋まっていく | だれでも、運用は自分 |
| Skipbox の専用のマシン | S で 80 GB、M で 160 GB、L で 320 GB、埋まってきたら減らす | 組織と個人アカウント、定額 |

## Skipbox がディスクにすること

プランごとに、アカウント専用のマシンが付き、ジョブのあとも残ります。ディスクはマシンの大きさで決まります。

- **ディスクは S で 80 GB、M で 160 GB、L で 320 GB です。**
- **そこに残るのは、あなたのジョブの状態です。** Docker のイメージ、レイヤー、ビルドキャッシュ、`~/.npm`、pnpm のストア、`~/.cache`、Go・Gradle・Maven・Cargo のキャッシュ、`setup-*` で入れたツール。`actions/cache` が保存したものは、ディスクの半分までマシンのそばに残ります。
- **埋まりきりません。** ジョブのあとでディスクが 85% を超えるまでは何も消しません。超えたら、最後に使った日が古いものから 75% まで減らします。dangling なイメージ、Docker のビルドキャッシュ、そしてパッケージのキャッシュと残したビルドを、まるごと消していきます。それでも 85% を超えているときだけ、マシンを作り直します。
- **残すキャッシュとジョブは、同じディスクを使います。** 大きなイメージや大きなビルドの成果物など、自分で何十 GB も書くジョブは M か L にします。

| ラベル | マシン | ディスク | プラン |
|---|---|---|---|
| `skipbox` | 4 vCPU・メモリ 16 GB | 80 GB | S、月 6,000 円 |
| `skipbox-8x16` | 8 vCPU・メモリ 16 GB | 160 GB | M、月 12,000 円 |
| `skipbox-16x32` | 16 vCPU・メモリ 32 GB | 320 GB | L、月 23,000 円 |

実行時間は無制限です。4 vCPU で月 20,000分なら、GitHub の請求は 約 35,120 円、Skipbox の S は 6,000 円です。

## 移行は runs-on を 1行書き換えるだけ

```yaml
jobs:
  build:
    runs-on: skipbox-8x16 # ubuntu-latest から書き換える
    steps:
      - uses: actions/checkout@v4
      # 「Free disk space」のステップは外せる
      - run: docker build -t app .
```

`skipbox-8x16` はプラン M で動きます。`runs-on: skipbox` は S とトライアルで動きます。

1. Skipbox に GitHub でログインする
2. Skipbox の GitHub アプリを入れて、使うリポジトリを選ぶ
3. `runs-on` を書き換えて push する

## セキュリティ

- マシンはアカウントごとの専用です。ほかの会社のジョブと同じマシンで動くことはありません。
- ジョブが終わるたびに、ランナーの認証情報、プロセスとコンテナ、ホームディレクトリの認証情報のファイルを消します。「毎回クリーン」なら、ジョブごとに新しいマシンで動きます。
- 書き込み権限のない人のコード（フォークからのプルリクエストなど）は、使い捨ての VM で動きます。キャッシュは読めますが、書き換えられません。

くわしくは[ジョブの分離のしくみ](https://docs.skipbox.dev/ja/isolation)にあります。

## ディスクが足りなくなるジョブで試す

カード不要で、7日間かジョブの合計 3,000分まで無料です。トライアルは `runs-on: skipbox` で、S と同じ 80 GB のマシンです。ジョブをそこに移し、プリインストールのツールを消すステップを外して動かしてください。

## よくある質問

### GitHub Actions のランナーのディスクはどのくらい？

GitHub のドキュメントでは、標準の Linux ランナーの SSD はプライベートリポジトリでも公開リポジトリでも 14 GB です。runner-images のメンテナーも、保証する空きはどちらも 14 GB だけだと書いています。ディスクそのものはもっと大きいのですが、残りはランナーのイメージに入っているツールで埋まっているので、14 GB と考えてください。

### GitHub Actions で No space left on device が出たら？

まず何が埋めたのかを見ます。df -h でファイルシステムごとの使用量、df -i で inode、sudo du -xh --max-depth=1 / で大きいディレクトリ、docker system df で Docker のイメージとビルドキャッシュです。そのうえで、書き込みを減らし（ビルドの合間に Docker を prune する、効くものだけキャッシュする）、使わないプリインストールのツール（Android SDK、GHC、CodeQL、.NET）を消し、それでも足りなければディスクの大きいランナーで動かします。

### ubuntu-latest で何を消せばディスクが空く？

ジョブが使わないツールです。GitHub の runner-images の issue では、/usr/local/lib/android（あるユーザーの一覧で 12 GB）、/usr/local/.ghcup、/opt/hostedtoolcache/CodeQL、/usr/share/dotnet、/usr/local/share/boost を消しています。$AGENT_TOOLSDIRECTORY を消すとツールキャッシュごと空きますが、そこにツールがある前提のセットアップのステップが動かなくなります。何 GB も消すのは、毎回の実行で時間がかかります。

### GitHub の大きいランナーはディスクも大きい？

大きいです。2 vCPU で 75 GB、4 vCPU で 150 GB、8 vCPU で 300 GB、64 と 96 vCPU で 2,040 GB まで。ただし使えるのは GitHub Team と GitHub Enterprise Cloud の組織だけで、分課金です。

### Skipbox のジョブはディスクをどのくらい使える？

アカウント専用のマシンのディスクは、S で 80 GB、M で 160 GB、L で 320 GB です。ジョブのあとも残すキャッシュも同じディスクにあり、ジョブのあとで 85% を超えていれば、最後に使った日が古いものから 75% まで減らします。セルフホストランナーのディスクのように埋まりきることはありません。自分で何十 GB も書くジョブは M か L にします。

### 試すのにお金はかかる？

かかりません。カード不要で、7日間かジョブの合計 3,000分まで無料です。S と同じマシンで動きます。ディスクが足りなくなるジョブを runs-on: skipbox にして、プリインストールのツールを消すステップを外してください。

2026-11-13 更新 · https://skipbox.dev/ja/guides/github-actions-no-space-left-on-device
