SSDの壁:なぜMacの動作が重くなるのか集中して作業している最中に、システムがカクつき始め、アプリが応答を停止し、あの忌々しい通知が表示されます:Your disk is almost full.(ディスク領域が残りわずかです)。256GBや512GBのMacBookでは、この限界は予想以上に早くやってきます。
開発者にとって、解決策は古い写真を数枚削除するほど単純ではありません。本当の原因は、隠れたライブラリキャッシュ、忘れ去られたビルド成果物、そして巨大なコンテナイメージの中に埋もれています。macOSのシステム設定で「ストレージを最適化」をクリックしても、~/Libraryフォルダに蓄積された技術的負債の表面をなぞる程度にしかなりません。
本当の容量食いを見極めるmacOSストレージGUIの「システムデータ」カテゴリはブラックボックスです。使用量が誤って計算されることも多く、どこに無駄があるのか推測するしかありません。ターミナルを使用して、真実を確認しましょう。
まず、ディスク全体の概要を確認します:
df -h /
実際にどのディレクトリがストレージを消費しているかを確認するには、ホームディレクトリ内の容量の大きい上位10個のフォルダを表示する次のコマンドを実行します:
du -sh ~/* 2>/dev/null | sort -rh | head -n 10
~/Libraryが上位に来ても驚かないでください。SSDを古いプロジェクトの墓場に変えてしまう、特定の開発ツールについて見ていきましょう。
解決策1:Xcodeの技術的負債を一掃するiOSやmacOSの開発経験があるなら、Xcodeは最大のストレージの敵である可能性が高いです。Xcodeには、自動的には削除されないビルドデータやログが蓄積されます。
DerivedDataの削除DerivedDataフォルダには、ビルドの中間結果やインデックスが保存されます。活発に開発を行っている場合、このフォルダは簡単に30GB以上に膨れ上がります。これは完全に削除しても安全です。次回「実行」したときに、Xcodeが必要なものを再構築します。
rm -rf ~/Library/Developer/Xcode/DerivedData/*
古いiOSシミュレータの削除Xcodeのアップデートのたびに、古いシミュレータのランタイムが残されることがよくあります。それぞれが5GBから10GBのスペースを占有します。
# インストールされているランタイムを一覧表示
xcrun simctl list devices
# 利用不可(古い)シミュレータをすべて削除
xcrun simctl delete unavailable
解決策2:パッケージマネージャーのクリーンアップHomebrewやnpmなどのツールは速度を重視して設計されているため、これまでに触れたすべてのパッケージの全バージョンをキャッシュします。
HomebrewのクリーンアップHomebrewはフォーミュラの旧バージョンや未完了のダウンロードを保持します。以下のコマンドで容量を取り戻しましょう:
brew cleanup -s
実行前にどれくらいの容量が節約できるか正確に確認したい場合は、まずbrew cleanup -nを実行してください。
Node.jsとYarnのキャッシュJavaScriptパッケージのグローバルキャッシュは際限なく増え続けます。数ヶ月間これらをクリアしていない場合、数GBの不要なファイルが溜まっているはずです。
# npmキャッシュを強制的にクリア
npm cache clean --force
# Yarnキャッシュを一掃
yarn cache clean
解決策3:Dockerコンテナの整理Dockerは、間違いなくMacのストレージを最も激しく消費するツールの一つです。未使用のイメージ、停止したコンテナ、宙ぶらりんなボリュームを合わせると、50GB以上の「ゴースト」データが見つかることも珍しくありません。
# 未使用のイメージ、コンテナ、ネットワークを削除
docker system prune
# 完全にリセットする場合、未使用のイメージとボリュームをすべて削除
docker system prune -a --volumes
Docker Desktopの設定を確認してください。「Disk image location」ファイル(Docker.raw)が肥大化している場合は、「Resources」タブで「Disk image size」の上限を下げる必要があるかもしれません。
解決策4:大きなファイルを手動で探す忘れ去られた2GBのデータベースダンプや1GBのログファイルが、目立たない場所に隠れていることがあります。findコマンドを使用して、500MBより大きいファイルを見つけます:
sudo find / -type f -size +500M -exec ls -lh {} + 2>/dev/null
プロのヒント:2>/dev/nullを付けることで、システム保護されたフォルダからの「Permission Denied(アクセス拒否)」というノイズを除去できます。
検証:解決を確認するクリーンアップが終わったら、エラーが消えたと思い込まずに、結果を検証しましょう。
- 再度
df -h /を実行します。少なくとも20GB〜30GBの空き容量を確保することを目指してください。- macOSは空き容量を「スワップ」メモリとして使用します。ディスクの空き容量が10%未満だと、警告が消えてもMacの動作が重く感じられることがあります。- マシンを再起動します。再起動により、ターミナルコマンドでは触れられない一時的なシステムデータを保持していることが多い/private/var/foldersがクリアされます。## まとめ- **ターミナルを信じる:**GUIのストレージ内訳は見積もりに過ぎません。duこそが真実です。- **定期的にメンテナンスする:**月に一度はbrew cleanupを実行しましょう。- **Libraryを狙う:**開発関連の肥大化データの多くは~/Library/Cachesと~/Library/Developerにあります。- **Dockerを外部へ:**常に容量不足になる場合は、Docker Desktopの設定から、Dockerの仮想ディスクを外付けSSDに移動することを検討してください。

