2026-04-16 iOS CI ディスク掃除:シミュレータランタイム、アーカイブ、レンタルクラウド Mac の launchd
香港・東京・ソウル・シンガポール・米国東部のレンタルMac mini M4では、df -h がデータボリューム空き約12%未満になるまでディスクは無限に見えます。その後は各 xcodebuild test が抽選のようになります。本稿(2026-04-16)では、コンパイルキャッシュを分離してもなぜディスクが膨らむか、最大ディレクトリの地図、実運用の simctl メンテ、アーカイブ保持の数式、launchd テンプレを示し、ジョブ単位 DerivedData 分離(2026-04-15)および ヘッドレスシミュレータテストへ橋渡しして、衛生戦略を端到端で揃えます。
「DerivedData は掃除しているのに」クラウド Mac のディスクが満杯になる理由
ジョブごとの DERIVED_DATA_PATH はコンパイル競合には効きますが、グローバル消費には効きません。Xcode 16.x 向けに入れた各 iOS ランタイムは依然 /Library/Developer/CoreSimulator にあり、UI テストはデバイスデータに300〜900 MB足すこともあります。アーカイブは dSYM とビットコードスライスを複製します。同一ホストで3つの Xcode マイナーを回しながら古いランタイムを残すと、気づく前に80〜140 GB失うチームは珍しくありません。ディスク遥測とキュー深度を揃え、janitor で頭打ちになってから 料金で拡張を検討してください。
- 古い起動済みシミュレータ が CoreSimulator マウントを生かし削除を妨げる。
- 古い watchOS / tvOS ランタイム が iOS のみビルドでも残る。
- アーカイブ は共有 SSH ホストで保持オーナーがいないと積み上がる。
- 一部イメージでは
/tmpへ移した xcresult が再起動後も残る—明示的に掃除する。
フットプリント:ギガバイトの行方
| パス / 領域 | 典型的な幅 | 自動化してよい? |
|---|---|---|
~/Library/Developer/Xcode/Archives |
累計 15〜120 GB | 可—日付ポリシーとオブジェクトストレージへ先にアップロード |
~/Library/Developer/CoreSimulator/Devices |
8〜60 GB | 部分的—unavailable 削除とメディアキャッシュ剪定 |
/Library/Developer/CoreSimulator/Volumes(ランタイム) |
複数版で 25〜90 GB | 注意—必要 SDK 行列と調整 |
~/Library/Developer/Xcode/iOS DeviceSupport |
5〜25 GB | ポリシーが許せば 180 日より古い版は可 |
/Users と /Volumes/builds を載せる NVMe で空き 50 GB 未満でページ、25 GB 未満では新規ジョブを止め、アーカイブ途中のカーネル書込失敗を避ける。
オペレータが実際に叩く simctl
CI キューがシミュレータゼロ稼働のときだけ実行するか、メンテラベルでランナーを空にしてから実行してください。
xcrun simctl shutdown all
xcrun simctl delete unavailable
xcrun simctl erase all # 使い捨てプレビュー機のみ—共有本番系ビルダーでは承認なし禁止
ランタイム一覧を週次で xcrun simctl list runtimes から設定リポジトリへ書き、東京とシンガポールのノードを揃えます。
アーカイブ:財務も納得する保持算術
.xcarchive を規制品として扱い、オブジェクトストレージへアップロードし、ローカルはロールバック方針で14 または 30 日保持後に削除。90 日ローカルが必要ならディスクを明示購入—既に圧縮されたスライスに zip しても 35% を超えることは稀です。
| 保持 | おおよそ月次増分(単一アプリ・週次アーカイブ) | 緩和 |
|---|---|---|
| ローカル 7 日 | 12〜20 GB | 夜間 tar + アップロード + 削除 |
| ローカル 30 日 | 45〜70 GB | 階層ストレージ + チェックサム検証 |
| 無限「念のため」 | 無制限 | 共有レンタル Mac では禁止 |
launchd による janitor(クリック運用なし)
CI ユーザー所有の非対話スクリプトにラップし、~/Library/Logs/ci-janitor.log へログ。1 パスで 15 GB 超削除なら非ゼロ終了で Slack に痕跡。リージョンごと日曜 03:00 現地—香港の日曜早朝はカリフォルニアではまだ土曜夜なのでずらす。
~/Library/Developer/Xcode/UserData を丸ごと削除しない—スニペットとブレークポイントがあり、エンジニアが反乱しミステリ赤ビルドが戻る。
DerivedData とテスト戦略の併用
グローバル掃除のあとも各パイプラインで DERIVED_DATA_PATH をジョブ単位で設定—2026-04-15 の分離記事参照。UI 重いスイートは ヘッドレスシミュレータテスト で並列 destination を抑え、janitor と稼働中の SimulatorTrampoline が争わないようにする。
積極的掃除後のウォッチポイント
初回掃除後ジョブはシンボル再取得や DeviceSupport 再構築で+4〜+11 分かかることがあります。p95 ビルド時間を48 時間追跡し、22% 超の跳ね上がりならポリシーが過剰—バックアップから戻すか保持を広げる。
FAQ:レンタル Apple Silicon のディスク衛生
| 質問 | 短答 |
|---|---|
| Archives を NFS へシンボリックリンク? | 低遅延リンクのみ;そうでなければアップロード後にローカル削除。 |
| Apple Silicon は CoreSimulator データを圧縮? | APFS クローンは一部テンプレに効く—会計には使わない。 |
| janitor スクリプトのオーナーは? | プラットフォームチーム + on-call ローテーションを ヘルプ に記載。 |
リージョン、NVMe、もう一台 Mac が要るとき
ディスク圧迫はしばしば1 台に負荷が集中しているサイン。週 >40 GB 回収しても空きが20%付近なら JP と SG ビルダーでチーム分割か第二の米国東部ノードを—Git と ASC への遅延もバイト数と同じくらい重要。料金でベアメタル階層を比較し、ブログ索引で署名・公証・OpenClaw を追跡。
まとめ:共有レンタル Mac ではグローバルなシミュレータ + アーカイブ衛生は任意ではなく、夜間ビルドが予測可能か「SSH するまで赤か」の差になる。自動化し測定し、ジョブ単位 DerivedData 規律とセットにする。