xcode-disk-cleanup について
xcode-disk-cleanupは、Xcode関連のディスク使用状況を監査し、承認された対象を整理するスキルです。候補ごとに容量、リスク、再生成コストを示し、使用中または重要な開発資産を保護します。
主な機能
- 01Xcodeストレージの読み取り専用監査
- 02候補のパス・容量・リスク表示
- 03承認済み整理の直前検証
- 04使用中・重要資産の保護
- 05整理後の監査と空き容量確認
活用シーン
- 01古いDerivedDataやキャッシュの調査
- 02シミュレーターとランタイムの整理候補確認
- 03Xcodeとリリース成果物の評価
- 04整理後のストレージ変化の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ avdlee/ xcode-disk-cleanup-agent-skill --skill xcode-disk-cleanupインストール後、Claude Code で/xcode-disk-cleanupを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/generated-data.mdrelease-artifacts.mdsafety-model.mdsimulators.mdxcode-installations.mdscripts/xcode_disk_cleanup.py詳細
Xcode ディスククリーンアップ
安全性の取り決め
- すべてのクリーンアップ依頼は、監査の許可として扱い、削除の許可とは見なしません。
- 正確な候補 ID、パスまたはシミュレーター識別子、測定済みサイズ、リスク、再生成コストを提示する前に、ストレージを変更してはいけません。
- 監査後に行われるカテゴリ単位の依頼(たとえば「古いドキュメントキャッシュをすべて削除して」)は、該当する最新の確定済み選択セットがすでにユーザーにすべて列挙されている場合、そのセットへの承認として扱います。再検証後、そのターンで実行してください。セットを再提示して、もう一度確認を求めてはいけません。特別なコマンドや確認の繰り返しは不要です。「Xcode をクリーンアップして」や「すべて削除して」のような監査前の包括的な依頼は、引き続き監査のみとします。
- 通常のファイルやディレクトリは、デフォルトでゴミ箱に移動します。ゴミ箱を空にするまで空き容量は回復しないことを説明し、その実行について別途承認を求めてください。
- 変更の直前に、対象の識別情報と実行中プロセスによる使用状況を再検証してください。
- ワイルドカード、範囲を限定しない
rm -rf、sudo、SIP の変更、または CoreSimulator や MobileAsset が管理するディレクトリ内での手動削除は決して行わないでください。 - 正確な配布済みビルドが別の場所にバックアップされていることをユーザーが証明し、さらに削除を個別に承認しない限り、アーカイブと dSYM は保持してください。
Package.resolved、署名アセット、認証情報、カスタム DocSet、現在使用中の Xcode、実行中のシミュレーター、または必要な SDK/ツールチェーンを提供する唯一の Xcode を削除してはいけません。- 候補の合計サイズと、実際に回復した APFS 空き容量は分けて報告してください。
クリーンアップを適用する前に、references/safety-model.md を読んでください。
ワークフロー
1. 事前確認
- ホストが macOS であり、同梱スクリプトを利用できることを確認します。
- Xcode、Simulator、
xcodebuild、Swift のビルド、テスト、アーカイブ、パッケージ解決の各プロセスが実行中か確認します。 - Xcode または Simulator アプリが開いていることは状況として考慮しますが、自動的にクリーンアップを阻止する要因とはしません。ビルド、テスト、アーカイブ、パッケージ解決のプロセスが実行中である場合、その処理で特定の候補が使用中である場合、または対応する削除 API がアプリ/デバイスの停止を必要とする場合は、影響を受けるクリーンアップを延期します。
psにアプリが表示されるというだけの理由で、ユーザーに終了を求めてはいけません。再生成可能なドキュメントキャッシュについては、Xcode を開いたまま古いキャッシュを移動すると、再読み込みされるまでローカルのドキュメントが一時的に利用できなくなることがありますが、Xcode や Simulator を終了する必要はありません。そのコストを代わりに説明してください。- プロジェクト内の
.buildと.derived-dataをスキャンするための任意のソースルートを特定します。ホームディレクトリ全体を走査してはいけません。
2. 読み取り専用の監査を実行
python3 "${SKILL_DIR}/scripts/xcode_disk_cleanup.py" audit \
--output-dir .xcode-disk-cleanup-audit \
[--scan-root /path/to/projects]
生成された次の両方のファイルを読みます。
.xcode-disk-cleanup-audit/report.md.xcode-disk-cleanup-audit/audit.json
このスクリプトは、DerivedData、ドキュメントキャッシュ、CocoaPods キャッシュ、シミュレーターデバイスとランタイム(古くなり、新しいバージョンに置き換えられたベータ版ランタイムを含む)、孤立したランタイムボリューム、シミュレーターの dyld キャッシュ、Xcode 管理コンポーネント、Xcode インストーラー、インストール済み Xcode、アーカイブ(配布されたことのない孤立したものを含む)、すべてのプラットフォームの DeviceSupport、診断ログ、XCTest デバイスクローン、旧式の DocSet、および明示的に指定されたプロジェクトルートを監査します。
共有コンパイラキャッシュ(ModuleCache.noindex、プリコンパイル済み SDK モジュール)とグローバル SwiftPM ダウンロードキャッシュは、意図的に対象外としています。これらは開発に使用中のマシンで常に使われており、消去しても長期的な空き容量はほとんど増えず、実際のビルド時間に大きな負担をもたらすためです。これらを提案してはいけません。
3. 調査結果の検証と補足
カテゴリールーターを使用します。
| 調査結果 | 参照先 |
|---|---|
DerivedData、モジュールキャッシュ、プロジェクトの .build、CocoaPods | references/generated-data.md |
| シミュレーターデバイス、ランタイム、dyld キャッシュ、XCTest クローン | references/simulators.md |
| アーカイブ、dSYM、DeviceSupport、ログ、DocSets | references/release-artifacts.md |
| Xcode の DMG/XIP とインストール済みの Xcode | references/xcode-installations.md |
| 確認と削除の動作 | references/safety-model.md |
スキャナーの分類を機械的に受け入れないでください。所有者が不明なもの、カスタムパス、バックアップ、ツールチェーンの要件を確認してください。
4. 提案を提示する
回収可能な GiB の多い順に並べ、以下を表示します。
- 候補 ID
- カテゴリーと正確なパス/識別子
- 回収可能な GiB
- リスク:再生成可能、破壊的、または保持
- 根拠 — 古さ(日数)、置き換え元、ワークスペースの欠如など、「古い理由」を簡潔に記載します。分類ラベルだけでは不十分です。
- 再ビルド、再ダウンロードが必要なもの、または永久に失われるもの
- 提案するアクション
提案は一覧性を保ってください。
- フォルダーの候補はクリック可能な
file://リンクとして表示し、ユーザーが承認前に確認できるようにします。候補 ID は、承認に必要な場合に限り表示し、項目の表示名にはしません。 - 監査の
evidenceフィールドとreasonフィールドを注記に引き継いでください。スクリプトには各項目が「古い」理由(「4 日間変更なし」「2026-07-21 にアーカイブされた 16.4.1 (325) に置き換え済み」「同じドキュメントを引き続き利用可能」など)がすでに記載されています。この情報を省くと、説明可能な提案が単なるファイル一覧になってしまいます。 - およそ 0.5 GiB 未満の個別項目は非表示にします。項目ごとの完全な一覧は、参照用に
report.mdに残します。「小さな項目」枠を設けて提案を水増ししないでください。質問が増えるだけで、有用な情報は増えません。 - 利用できないシミュレーターは、ランタイムごとの表にまとめます。
- 小さなカテゴリーも含め、各カテゴリーには合計サイズを付けた独自の小見出しを設けます。ドキュメントキャッシュや孤立したアーカイブなどを、別カテゴリーの表の下の段落で要約すると見落とされやすくなり、見落とされた項目は適切に承認できません。
- 実際の反証となる情報が確認できない限り、スキャナーの分類を信頼します。特に、
Orphan archiveの候補は、Organizer の配布記録がなく、同じアプリのより新しいアーカイブが存在するという証拠をすでに含んでいます。他の場所ではアーカイブをデフォルトで保持するからといって、再び保持対象に分類しないでください。
各カテゴリーは、マシンに合わせてラベルを調整し、次の例のように書式を整えます。
### Orphaned DerivedData — 15.5 GiB · regenerable
All four belong to workspaces that no longer exist.
| Folder | Size | Why stale |
|---|---:|---|
| [RocketSim-beqqrx…](file:///Users/me/Library/Developer/Xcode/DerivedData/RocketSim-beqqrximmvoaakbpvjshhqhuacyv) | 5.6 GiB | Workspace deleted; unchanged for 1 day |
| [RocketSim-fjapct…](file:///Users/me/Library/Developer/Xcode/DerivedData/RocketSim-fjapctdhvtzcaaabmtsyumkmcarf) | 4.0 GiB | Only package downloads, no build products; unchanged for 4 days |
以下を含めます。
- リスク別の候補 GiB 合計
- 現在の空きディスク容量
- APFS のクローンとスナップショットにより、候補のサイズは単純に合算できないという警告
- 正確な ID を指定した明確な承認依頼。ユーザーがカテゴリーを選択したら、選択されたすべての ID、合計サイズ、リスク、提案するアクションを、変更されない単一の選択セットとして再提示します。後からの平易な削除依頼によって、対応するセットが承認されることを一度だけ伝えます。ID の再入力や指定されたフレーズの使用を求めたり、変更のない再検証後に再確認を求めたりしないでください。
5. カテゴリ選択を展開し、承認済み ID のみを適用する
監査の完了後、「古い DerivedData をすべて削除して」や 「古くなったドキュメントキャッシュをすべて整理して」のような依頼では、 以下のすべての条件を満たす場合に限り、そのカテゴリ内で現在監査済みの候補すべてを 承認できます。
- 選択した各項目が、カテゴリ固有の検証にすでに合格し、正確で安定した ID、 パスまたはシミュレーター識別子、サイズ、リスク、アクションを備えていること。
- アシスタントが、展開後の ID 一覧、合計サイズ、アクションを固定された選択セットとして 表示し、自然言語によるカテゴリ指定の依頼でこのセットが承認されることを説明すること。
- その後、ユーザーがそのカテゴリの削除を明確かつ肯定的に依頼すること。これが唯一の 承認であり、カテゴリ全般ではなく、表示されたセット内の ID のみを許可します。 再検証後、すぐに適用してください。特別な合言葉やユーザーからの追加の応答を 決して要求しないでください。
- 再検証が成功すること。承認済みの候補すべてで ID、識別情報、リスク、アクションが 同一である場合、監査結果を更新しても承認は無効になりません。更新後の監査結果を そのまま使用して処理を進めてください。新しい候補を追加してはいけません。
- 承認済みの項目が変更された場合、アクティブになった場合、または再分類された場合は、 その項目を除外して報告してください。安全であれば、変更されていない承認済み項目の 処理は続行してください。進めることで承認済みの範囲またはアクションが実質的に 変わる場合に限り、再度確認してください。
監査前に広範な依頼からカテゴリへの該当性を推測してはいけません。また、個別の 保護措置と承認が満たされていない限り、保持対象、アーカイブ/dSYM、アクティブな アセット、シミュレーター操作を含めてはいけません。
現在の監査で確定した ID セットについて、ID ごとの直接の承認、または固定された 展開済み ID セットへの自然言語による承認があった場合に限り、apply を呼び出してください。
python3 "${SKILL_DIR}/scripts/xcode_disk_cleanup.py" apply \
--audit-file .xcode-disk-cleanup-audit/audit.json \
--ids "<approved-id-1>" "<approved-id-2>" \
--confirm I_APPROVED_THE_SELECTED_ITEMS \
--output .xcode-disk-cleanup-audit/cleanup-result.json
シミュレーターデバイスとランタイムの削除は取り消せないため、追加の承認に加えて 以下が必要です。
--confirm-irreversible I_APPROVED_IRREVERSIBLE_SIMULATOR_DELETION
古いランタイムを候補として提示できるのは、simctl が削除可能と報告し、インストール済みの
Xcode SDK のいずれもそのビルドを解決せず、同じプラットフォームでより新しいランタイムに
置き換えられている場合に限ります。これは、より新しい Xcode ベータ版をインストールした後、
Xcode の「設定」→「コンポーネント」に残るベータ版プラットフォームの例です。
会話内に該当するユーザー承認がない限り、いずれの確認フレーズも渡してはいけません。
「追加の承認」とは、取り消せないシミュレーターカテゴリに対する、明確で個別の意思を 意味します。必ずしも別のメッセージである必要はありません。正確なシミュレーター ID と 恒久的なデータ損失を提示した後で、「DerivedData と利用できないシミュレーターを削除して」 のような単一の依頼があれば、通常の承認と、カテゴリ固有の取り消せない操作への追加承認の 両方が含まれます。そのターン内に両方を再検証して実行してください。「すべてきれいにして」 のような一般的な依頼は、取り消せない操作への承認にはなりません。
6. 検証
- 監査を再実行します。
dfの実行前後の空き容量を比較します。- 「ゴミ箱に移動」と、空き容量が直ちに回復した状態を区別します。
- 保護対象と未承認の候補が残っていることを確認します。
- 成功、失敗、保留した項目を報告します。
Xcode インストーラーとアプリケーションのルール
- Spotlight と一般的なダウンロードフォルダーから
.xip、.dmg、.zipインストーラーを検索します。 - 解析したバージョンがインストール済み Xcode と一致する場合に限り、インストーラーを候補として提示します。一致しない場合は不確かなものとして報告します。
- 古い Xcode は、自動選択せず候補として提示する場合に限り許可されます。その Xcode がアクティブ/実行中ではなく、同じチャンネルのより新しいインストールが存在する必要があります。
- Spotlight の
kMDItemLastUsedDateが示すのは LaunchServices による起動であり、コマンドラインでの使用状況ではありません。xcode-select、DEVELOPER_DIR、実行中のプロセス、.xcode-version、CI スクリプト、一意の SDK/ツールチェーンの証拠と組み合わせてください。 - 安定版の Xcode がベータ版に取って代わる、またはその逆であると推測してはいけません。
出力品質チェックリスト
- 変更を加えずに監査を完了した
- すべての項目に正確なサイズと安定した ID がある
- 削減可能な容量と実際に回復した容量を分けている
- アーカイブ/dSYM はデフォルトで保持する
- 実行中のプロセスと選択中の Xcode を保護する
- 完全に列挙された固定の選択項目一覧を提示した後、ユーザーが正確な ID を直接承認するか、曖昧さのないカテゴリ指定を行った
- 不可逆な操作について個別に承認を得た
- クリーンアップ後の監査で、承認された項目のみが変更されたことを確認した