Xcode の Clean Build Folder と DerivedData 削除の違い
AskClean チーム · 更新日 2026-11-02
Clean Build Folder が消すのは、いま開いているスキームのビルド成果物です。DerivedData を削除すると、ビルド成果物に加えてインデックス、モジュールキャッシュ、ログまで、より広い範囲がリセットされます。ビルドが壊れたときはまず Clean Build Folder を実行し、インデックスが壊れたときはそのプロジェクトの DerivedData フォルダだけを削除します。ディスク容量を本当に空けたいなら、もうビルドしないプロジェクトの DerivedData フォルダを削除してください。
違うのは掃除の深さではなく範囲
Product > Clean Build Folder(Shift + Command + K)は、いま開いているプロジェクトとスキームの中だけで動作します。その範囲のコンパイル済みの成果物と中間ファイルを破棄するので、次のビルドはソースからやり直しになります。対象は 1 つのプロジェクトに限られ、作り直すのに時間がかかるものは意図的に残します。
DerivedData は、既定の保存場所を使うすべてのプロジェクトが共有する最上位のディレクトリです。場所は ~/Library/Developer/Xcode/DerivedData で、これまでに開いたプロジェクトやワークスペースごとにサブフォルダが 1 つずつあります。サブフォルダを 1 つ削除すれば、そのプロジェクトだけがリセットされます。ディレクトリ全体を削除すると、手元のすべてのプロジェクトで、次に開いたときに再ビルドとインデックスの再作成が必要になります。
つまり、この 2 つは「軽い掃除」と「徹底的な掃除」の関係ではありません。Clean Build Folder は範囲が狭くコストの小さい操作で、DerivedData の削除は範囲が広く、インデックスを失うコストを伴います。どちらが適切かは、壊れているものがビルド成果物の中にあるのか、外にあるのかによって決まります。
ビルドが壊れたら、狭い範囲から始める
ブランチの切り替え、ビルド構成の変更、リソースファイルの編集の直後から失敗するようになったなら、実行中のアプリを終了し、まず Clean Build Folder を使います。もっともコストの小さいリセットで、インデックスも残るため、「ビルド+数分間のインデックス作成」ではなく、ビルド 1 回で作業に戻れます。
症状がビルド成果物とは関係なさそうなときは、そのプロジェクトの DerivedData フォルダの削除に進みます。修正済みのコードに Xcode がエラーを表示し続ける、定義へのジャンプが違う場所に飛ぶ、自分で定義した型をコード補完が認識しなくなった、といった症状です。これらはインデックスの症状で、Clean Build Folder はインデックスに触れません。
知っておきたいケースが 1 つあります。「クリーンしても直らなかったのに、DerivedData を削除したら直った」となる典型的な理由です。プリコンパイル済みモジュールのキャッシュ(ModuleCache.noindex)は、プロジェクトのサブフォルダではなく DerivedData の直下にあり、Clean Build Folder はここに届きません。SDK やツールチェーンを変更した後にモジュールキャッシュが古くなった場合、エラーを解消するにはこのキャッシュを削除するしかありません。
どちらのコマンドも、ソースコードや依存関係に実在するバグは直せません。クリーンビルドの後も同じエラーが出るなら、掃除をやめてコンパイラのメッセージを読んでください。原因はプロジェクト設定、Package.resolved、選択している SDK、またはコードそのものにあります。
どちらもディスク容量を空ける方法ではない
Clean Build Folder は診断のためのツールで、容量が少し空くのは副次的な効果にすぎません。現在のプロジェクトの分は空くことがありますが、他のプロジェクトのビルド成果物、すべてのインデックス、モジュールキャッシュはそのまま残ります。容量を取り戻すために実行しても、的外れな対策にしかなりません。
本当の目的が容量なら、逆の順番で進めます。まず DerivedData のサブフォルダのサイズを測り、何か月も開いていないプロジェクトのフォルダを削除します。数十 GB がたまっているのはたいていそこ、つまり一度ビルドしたきり二度と開いていない使い捨てのクローンです。
いきなり rm -rf を使わないでください。Finder なら選んだフォルダをゴミ箱に入れられ、ゴミ箱を空にするまでは元に戻せます。削除したフォルダが、実はいまビルド中のプロジェクトのものだった、という場面で、この違いが効いてきます。ターミナルは自動化には便利ですが、使うのは正確なパスを確認してからにしてください。
数字をうのみにせず、結果を確かめる
作業の前に DerivedData のサイズを記録し、2 つの方法のどちらか一方だけを実行してから、もう一度測ります。Clean Build Folder の後は、現在のスキームをビルドします。DerivedData フォルダを削除した後は、Xcode を開いて最初のビルドとインデックス作成が終わるまで待ちます。
この順番で進めれば、取り戻した容量と、そのために払ったコストを切り分けられます。誰にでも当てはまる目安の数字はありません。結果は、その Mac でビルドしてきたプロジェクト、構成、アーキテクチャの数によって変わります。
どちらを使うべきか
| 状況 | やること | 復旧のコスト |
|---|---|---|
| 現在のスキームでビルドが失敗する | Product > Clean Build Folder | このプロジェクトを 1 回再ビルドするだけです。すべてのプロジェクトのインデックスは残ります。 |
| 古いエラーが消えない、定義へのジャンプがおかしい | ~/Library/Developer/Xcode/DerivedData/<project> | そのプロジェクトだけ、フル再ビルドとインデックスの再作成が必要になります。 |
| SDK を変更した後、Clean Build Folder でもエラーが消えない | ~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex | 次のビルドでモジュールが再コンパイルされます。Clean Build Folder ではここに届きません。 |
| 本当にディスク容量が必要 | ~/Library/Developer/Xcode/DerivedData | 大きくて古いサブフォルダを削除します。それらのプロジェクトは、次に開いたときに再ビルドされます。 |
| 古いシミュレータランタイム | Xcode Settings > Components | まったく別のカテゴリです。どちらのコマンドも触れません。 |
この表は範囲を示すもので、何 GB 空くかを約束するものではありません。作業の前後に、ご自分の Mac で測ってください。
よくある質問
Clean Build Folder で DerivedData も削除されますか?
されません。開いているプロジェクトとスキームのビルド成果物を消すだけです。すべてのプロジェクトのインデックス、モジュールキャッシュ、ログも保存している共有の DerivedData ディレクトリを削除するのとは、別の操作です。
1 つのプロジェクトの DerivedData フォルダを削除しても安全ですか?
安全です。中身はすべてソースコードから生成されたもので、Xcode が作り直します。コードと git 履歴には影響しません。コストは、削除後の最初のビルドがフルビルドになり、その後にインデックス作成が走ることだけです。
先に Xcode を終了する必要がありますか?
DerivedData を手作業で削除する場合は、終了してください。削除している最中にインデクサがファイルを使い続けたり、作り直したりするのを防げます。組み込みの Clean Build Folder コマンドなら、Xcode 自身が処理するので終了は不要です。
クリーンしてもエラーが消えないのはなぜですか?
原因がそもそもキャッシュではなかった可能性が高いでしょう。コンパイラのメッセージ、スキームの設定、依存関係のバージョン、Package.resolved、選択している SDK、そして現在のブランチで実際に何が変わったかを確認してください。
Clean Build Folder では直らず、DerivedData の削除で直ったのはなぜですか?
たいていはプリコンパイル済みモジュールのキャッシュが原因です。ModuleCache.noindex はプロジェクトのサブフォルダではなく DerivedData の直下にあるため、Clean Build Folder では届きませんが、DerivedData を削除すれば一緒に消えます。
参考資料