MacでXcode、シミュレータ、Dockerが使っている容量を空ける方法
開発ツールはMacを静かに埋めていく:何を消し、何を残し、何が戻ってくるのか
結論から言うと、Macで開発者の容量を最も食うのは、XcodeのDerivedData、シミュレータのランタイムと古いシミュレータ、接続したiPhoneのDevice Supportファイル、ビルドのアーカイブ、Dockerの未使用イメージとビルドキャッシュです。多くは必要なときに再生成または再ダウンロードされるため、削除して安全です。Mac版DiskMopは「空き容量を増やす」と「macOSの使用領域」から整理し、各項目で何が起きるかを説明します。
このガイドでは、それぞれがどこにあるか、気軽に消せるもの、再作成できないもの、手動またはDiskMopで行う方法を説明します。
要点
- XcodeのDerivedDataとシミュレータのキャッシュはXcodeが再生成します。次のビルドが1回だけ遅くなります。Device Supportファイルは、デバイスを接続したときに再びコピーされます。
- Xcodeのアーカイブは別物です。リリースしたビルドを保持し、クラッシュレポートのシンボル化に必要です。DiskMopはチェックなしのままにし、削除は取り消せないと示します。
- シミュレータのシステムイメージはXcode>設定>Componentsから再ダウンロードでき、イメージがない古いシミュレータはそもそも起動できません。DiskMopはそれらをシステム標準のsimctlツールで削除します。
- DiskMopのDocker項目はdocker system pruneを実行します。未使用のイメージ、停止中のコンテナ、ネットワーク、ビルドキャッシュが削除され、データがあるボリュームには一切触れません。
DiskMopでMacのXcodeとDockerの容量を取り戻す
DiskMopが隠れたキャッシュ、アンインストール後の残りファイル、不要なシステムファイルを自動検出して安全に削除します。
Macの開発者向けストレージ:何であり、消すとどうなるか
| 項目 | 場所 | 消した場合 | DiskMopでは |
|---|---|---|---|
| XcodeのDerivedData | ~/Library/Developer/Xcode/DerivedData | Xcodeが再生成。ビルドが1回遅くなる | 「空き容量を増やす」、初期状態でチェック済み |
| シミュレータのキャッシュ、ランタイム、古いシミュレータ | ~/Library/Developer/CoreSimulatorとシステムイメージ | 再生成または再ダウンロード。古いシミュレータはそもそも起動不可 | 「空き容量を増やす」と「macOSの使用領域」 |
| Device Supportファイル | ~/Library/Developer/Xcode/iOS DeviceSupport | 次の接続時にデバイスから再コピー | 「空き容量を増やす」 |
| Xcodeのアーカイブ | ~/Library/Developer/Xcode/Archives | 再作成不可。クラッシュのシンボルに必要 | 「空き容量を増やす」、チェックなし、取り消し不可 |
| Dockerのイメージとビルドキャッシュ | Docker Desktopのデータ | 必要時に再取得または再ビルド。ボリュームは残る | 「macOSの使用領域」 |
開発ツールが大きな容量を使う理由
Xcodeは次のビルドを速くするためにビルドの中間ファイルを保持し、接続した各デバイスからデバッグ用シンボルをコピーし、シミュレータのバージョンごとに完全なシステムイメージをインストールします。Dockerは取得したすべてのイメージと、ビルドのたびに増えるビルドキャッシュを保持します。どれも間違いではなく、速度のために最適化されていて、自動では整理されません。
256GBや512GBのドライブのMacでは、これがゆとりのあるディスクと満杯のディスクの差になることがよくあります。心当たりがあるなら、開発者以外の面はMacの起動ディスクを埋めているもので扱っています。
Xcode:DerivedData、Device Support、アーカイブ
DerivedDataは~/Library/Developer/Xcode/DerivedDataにビルドの中間ファイルを保持します。削除は妙なビルドエラーへの定番の対処で、コストはビルド1回分の遅れだけです。~/Library/Developer/Xcode/iOS DeviceSupportとwatchOSフォルダにあるDevice Supportは、接続したiPhoneやiPadからコピーしたシンボルを保持します。Xcodeは次回に再びコピーし、数分かかります。
~/Library/Developer/Xcode/Archivesのアーカイブは、リリース用に作ったビルドです。リリース済みバージョンのクラッシュレポートをシンボル化するために必要で、同一のビルドは再作成できません。そのためDiskMopはチェックなしのままにし、削除は取り消せないと警告します。デバッグする可能性のないバージョンのアーカイブだけを削除してください。

DiskMopで解決: 概要
すべてのディスク使用状況を1つの画面で確認できます。クリーンアップ可能な領域を即座に特定します。
シミュレータとランタイム
シミュレータの各バージョンには、しばしば数GBのシステムイメージがあり、Xcodeが「Xcode>設定>Components」でダウンロードと管理を行います。必要なときに再ダウンロードできるので、もうテストしないバージョンのイメージを削除しても安全です。システムイメージがすでにないシミュレータは起動できず、システム標準のツールであるxcrun simctl delete unavailableで削除できます。
DiskMopはシステムフォルダを消すのではなく、同じsimctlツールでこれを行い、何が起きるかの説明とともに「macOSの使用領域」に一覧します。次回の起動時にシミュレータが再生成する一時データであるシミュレータのキャッシュは、「空き容量を増やす」ページにあります。
Docker:イメージ、ビルドキャッシュ、ボリューム
docker system dfはDockerの使用量を表示し、docker system pruneは停止中のコンテナ、未使用のネットワーク、宙に浮いたイメージを削除し、-aオプションを付けると未使用のイメージをすべて削除します。DiskMopのDocker項目は、未使用のイメージ、停止中のコンテナ、ネットワーク、ビルドキャッシュを削除し、データベースなどのデータがあるボリュームには決して触れません。Dockerは次回必要なものを再取得または再ビルドするので、1回だけ取得が遅くなると考えてください。
これはDocker自身のコマンドで実行されるため、Dockerがインストールされていて、処理中でないことが必要です。スキャンは無料で、多数の項目をまとめて整理するのは買い切りのDiskMop Proの機能です。無料版では1件ずつの削除を数回試せます。開発者向けの項目は、diskmop.comからダウンロードするバージョンで動作します。npm、Yarn、pip、Homebrew、CocoaPods、Gradle、Cargoなどのパッケージキャッシュは「空き容量を増やす」に表示され、初期状態ではチェックなしです。ツールが再ダウンロードします。ほかの大きなファイルについてはMacで大きなファイルを見つける方法を参照してください。
よくある質問
XcodeのDerivedDataを削除しても安全ですか?
はい。Xcodeが再生成します。次のビルドが1回だけ遅くなり、DerivedDataの削除は妙なビルドエラーへの一般的な対処です。
Xcodeのアーカイブを削除してもいいですか?
それらのリリースをデバッグする可能性がない場合に限ります。アーカイブはクラッシュレポートのシンボル化に必要で、再作成できません。そのためDiskMopはチェックなしのままにし、削除は取り消せないと示します。
DiskMopはDockerのボリュームを削除しますか?
いいえ。docker system pruneで未使用のイメージ、停止中のコンテナ、ネットワーク、ビルドキャッシュを削除し、データが保存されているボリュームには決して触れません。
古いiOSシミュレータを削除するには?
もうテストしないシミュレータのシステムイメージを「Xcode>設定>Components」で削除し、イメージがないシミュレータにはxcrun simctl delete unavailableを実行します。DiskMopは両方を「macOSの使用領域」に一覧します。
評決
開発ツールは、256GBや512GBのMacを静かに満杯にします。保持しているものの大半は再生成または再ダウンロードされ、そうならない唯一のもの、Xcodeのアーカイブは、意図的な判断に値します。
Mac版DiskMopはDerivedData、シミュレータ、Device Support、Dockerの未使用データを整理し、まず各項目を説明し、チェックしない限りボリュームとアーカイブには触れません。スキャンは無料なので、決める前にサイズを確認できます。
DiskMopでMacのXcodeとDockerの容量を取り戻す
DiskMopが隠れたキャッシュ、アンインストール後の残りファイル、不要なシステムファイルを自動検出して安全に削除します。