🥦

【170GB削減】Flutter開発でストレージ空き容量がパンパンになったときの対処法

に公開

「私の場合はこうすると空き容量を増やせました」を書きます。

▲こんな感じで容量がいっぱいになってしまった時の対処法

先に結論

結論から書くと、以下をすると合計170GBほど減らせました。

  • miseを使ってる場合:
    • mise pruneする(110GB→10GB)
  • iOSシミュレーターを使ってる場合
    • XCodeの「Window → Devices and Simulators」から不要なシミュレーターを手動でポチポチ消す(たぶん100GB→50GBくらい)
  • dockerを使ってる場合:
    • 以下を実行する(40GB→30GB)
      • docker image prune -a(未使用のImageの削除)
      • docker volume prune(未使用のVolumeの削除)
      • docker builder prune(未使用のBuild Cacheの削除)
  • pnpmを使ってる場合:
    • pnpm store pruneする(30GB→20GB)

上から順に効果が大きかったやつです。

1つずつ詳しく書いていきます。

mise

今のチームでは、miseというツールでFlutterを管理しています。

GitHub上でRenovateというツールを導入しているお陰で、最新版のFlutterが出るとRenovateが自動でバージョンを上げてくれます👇️
Renovateが自動でFlutterのバージョンをあげてくれるPRを作ってくれたスクショ▲メジャーバージョン以外は自動でマージされるようにしてる

なので、更新のたびにローカルでもmise iを実行してFlutterのバージョンを上げていました。

しかしその結果、古いバージョンのFlutterがローカルに大量に残り続けて、100GB近くになっていました👇️

/Users/ユーザー名/.local/share/mise/installsにありました

古いバージョンのFlutterは不要なので、以下でまとめて削除:

mise prune

これで100GB減らせました。

iOSのシミュレータ

iOSアプリ開発をしていると、Xcodeのシミュレーターもかなり容量を食います。
特に複数のiOSバージョン・デバイスをインストールしていると数十GB単位で肥大化します。

削除は以下の手順でできます:

  1. Xcodeを開く
  2. メニューから Window → Devices and Simulators を選択
  3. Simulators タブを開く
  4. 不要なシミュレーターを右クリック → 「Delete」

XcodeのWindow → Devices and Simulators から不要なシミュレーターを削除しようとしているGif動画▲今はもう1個しかありませんが、ここにめちゃくちゃ並んでたので使わないシミュレーターを1個ずつ削除しました

これで50GBくらいまで減らせた気がします(正確に覚えてない⋯)。

pnpm

pnpmはモバイル開発と関係がないのですが、弊社のアプリのバックエンドは基本的にNode.jsです。

そしてNode.jsのパッケージ管理をpnpmを使っています。

なので、様々なプロジェクトで積み上がったpnpmのパッケージストアが、気づけば40GBになっていました。

全てのライブラリが現役で使われているわけではないので、以下で不要なライブラリを削除:

pnpm store prune

これで10GB減らせました。

Docker

Dockerは開発中にイメージやボリューム、ビルドキャッシュをどんどん作ります。
なので放置すると容量を圧迫してしまいます。

というわけで、まず現状を確認します👇️

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          28        22        18.03GB   9.722GB (53%)
Containers      29        3         2.086MB   2.085MB (99%)
Local Volumes   28        19        10.44GB   1.654GB (15%)
Build Cache     254       0         3.76GB    3.76GB

これは要するに「合計40GBくらい使っていて、そのうち15GBくらいは削除してもいいですよ〜」という状態のようです。

(「RECLAIMABLE」と書かれている部分は、「現状は未使用ですよ」的な意味らしい)

ただ、Containersは、Stopしているだけのコンテナも含まれるらしいのでContainersはpruneしたくないです。

そういうときは、以下のコマンドを実行してContainers以外をpruneします👇️

# 未使用のImagesを削除する
docker image prune -a

# 未使用のLocal Volumesを削除する
docker volume prune

# 未使用のBuild Cacheを削除する
docker builder prune

これを実行した結果、こうなりました👇️

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          22        22        14.38GB   5.487GB (38%)
Containers      29        3         2.086MB   2.085MB (99%)
Local Volumes   21        19        9.034GB   246.8MB (2%)
Build Cache     129       0         0B        0B

これで約10GB空きました。

(Imagesだけ5GBも残ってしまって「何で?」という感じなのですが、正直miseとiOSのシミュレータでほとんど目的を達成できてしまったため、深く調べる気が起きませんでした⋯)

ちなみにContainersを含めて4つまとめてpruneしたい場合は、以下を実行します👇️

docker system prune

まとめ

  • mise, pnpm, Docker, iOSシミュレーターは放置するとどんどんキャッシュが溜まる

  • pruneコマンドなどで削除できる

  • ただし、消すと後で再ダウンロードや再ビルドが必要になることもあるので注意

おわり

PrAha

Discussion