DevOps / 監査 2026年4月16日

2026-04-16 iOS CI ディスク掃除:シミュレータランタイム、アーカイブ、レンタルクラウド Mac の launchd

MacXCode エンジニアリングチーム 2026年4月16日 約14分

香港・東京・ソウル・シンガポール・米国東部のレンタル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%付近なら JPSG ビルダーでチーム分割か第二の米国東部ノードを—Git と ASC への遅延もバイト数と同じくらい重要。料金でベアメタル階層を比較し、ブログ索引で署名・公証・OpenClaw を追跡。

まとめ:共有レンタル Mac ではグローバルなシミュレータ + アーカイブ衛生は任意ではなく、夜間ビルドが予測可能か「SSH するまで赤か」の差になる。自動化し測定し、ジョブ単位 DerivedData 規律とセットにする。

余裕のある M4 ビルダーをレンタル

HK · JP · KR · SG · US · SSH / VNC