-parallel-testing-enabled・destination・Simulator の表と、ビルドロック・パス・1TB/2TB 水位の受入に絞ります。
パラメータ表:-parallel-testing-enabled・destination 数・Simulator 並行
-parallel-testing-enabled YES はターゲットを複数 destination に分散します。跨区では「ジョブあたりの destination 上限」と「ノード上の Simulator 同時上限」を別レバーに。destination を増やしても CoreSimulator/メモリが先に飽和し、壁時計が伸びないことが典型です。
-parallel-testing-enabled |
destination 数(1 プロセス目安) | Simulator 並行予算(ノード目安) |
|---|---|---|
| NO(既定に近い単路) | 1(-destination 1 本) |
実体 1〜2。UI テストは 1 に寄せると安定。 |
| YES・ユニット中心 | 2〜3(同一 SDK/同一ランタイム帯に揃える) | 起動ブートが重ならないよう 2〜3。ジョブ同時数は別枠で抑える。 |
| YES・UI/スナップショット混在 | 2 まで(まずは destination で足さず、ノード並列で足す) | 2 固定+メモリ監視。跨区では遅延より「欠落より再現性」を優先。 |
git/IO 節流は watchman・ディスク節流稿 と併読。共有ボリュームで DB を触るなら SQLite WAL 稿 の単一ライターも必須です。
ビルドロック:共有 Derived/成果物への単一ライター
同一 DerivedData や成果物ディレクトリへの同時書き込みはインデックス欠損を招きます。スケジューラに加え、短い区間だけ flock 等で publish を単一路に寄せます。
LOCK_FILE="/var/tmp/xcode-derived-publish.lock"
flock -n "$LOCK_FILE" bash -c '
xcodebuild -scheme "$SCHEME" -parallel-testing-enabled YES test
rsync -a "$LOCAL_DERIVED/Build/Products/" "/Volumes/CIArtifacts/$BUILD_ID/"
' || { echo "lock busy"; exit 17; }
コンパイルはローカル、publish だけロック内に。配置の考え方は Nomad・ビルドロック稿 の単一昇格レーンと同型です。SSHFS はロック不可、APFS/確実な NFS のみ対象に。
Derived Data パス:ローカル固定と共有キャッシュの境界
推奨はローカル -derivedDataPath(例 …/DerivedData/$JOB_ID)に閉じ、成果物だけを退避。共有キャッシュは読み取り中心にし、書き込みはロック付き publish に一本化。
- CI 変数: ジョブ ID 付きで衝突回避、成功時のみアーカイブ。
- Simulator: ランタイム配下のサイズを別メトリクスで監視。
- 跨区: 帯域前提は 料金・プラン比較(ログイン不要) と Runbook で固定。
ディスククリーニングしきい値:1TB/2TB 水位受入チェックリスト
Parallel Testing を広げるほど中間成果物とランタイム複数版がディスクを削ります。使用率ウォーターマークと受入確認の合わせ技(数値は目安)。
| 使用率帯 | 1TB ラインの行動 | 2TB ラインの行動 |
|---|---|---|
| 〜70% | xcrun simctl delete unavailable、古い DerivedData 世代、CI テンポラリを週次で掃除。 |
同左。2TB でもルールは同じで、猶予を消費しない運用が前提。 |
| 70〜80%(黄) | 増設またはアーカイブ退避をスプリント内に計画。-parallel-testing-enabled YES の destination 上限を下げる。 |
黄信号は遅れて現れやすい。ジョブ同時数と Simulator 並行を先に下げる。 |
| 80〜90% | 新規フルビルドと重い UI スイートを止め、成果物同期の帯域も縮小。 | ランタイム複数版が残っている場合は 2TB でも再び崖手前。未使用ランタイム削除を優先。 |
| 90% 超(赤) | 新規テスト扇を止め、ノード追加またはディスク段階アップを最優先。スナップショットと隠れ領域を監査し、ダッシュボードに水位を常時表示。 | |
受入(抜粋): 週次で df と Simulator サイズ記録。-derivedDataPath 衝突なし。Parallel/destination を Runbook 固定。黄信号でチケット化。拡張は 購入・申し込み(公開ページ) から。
FAQ:Xcode 並列テストの勘所
destination を増やしても遅い: Simulator/ディスクが上限。ジョブ分割でノードあたり destination を抑える。
flock busy 多発: publish 範囲過大。粒度を細かくしロックを短く。
2TB でも黄: ランタイム多版が典型。しきい値は使用率で統一。
同型 Mac mini M4 で Xcode CI を跨区展開
ログイン不要の公開ページでプラン比較から申し込みまで。Parallel Testing とディスク段階を先に揃え、Simulator 並行と水位で詰まる前にノードを足せます。