2026 Mac クラウド ディスパッチ可能ビルドプール:ジョブシャーディング、DerivedData アフィニティ、キュー SLO チェックリスト
PR をエラスティックなホストランナーに、ナイトリーを専有 Mac に載せる設計は出来上がっているのに、複数ノードを足すと二階部分が崩れます。Mac クラウドがバラバラの VPS のように振る舞い、Archive と軽い増分が同一 NVMe キューを奪い、リンク時間アウトが製品不具合に見える。本稿は macOS ビルダーをプログラム可能なキャパシティにしたいチーム向けに、四つの痛みパターン、シャード設計マトリクス、五段階のロールアウト、財務にも通る三指標、FAQ をまとめます。読後は逸話ではなく一枚のチェックリストでキャパ計画を守れます。
目次
1. 痛み:単一ホスト癖、シャード欠如、アフィニティ逸脱、SLO 言語不一致
単一 SSH Mac から複数 CI ノードへ広げると失敗要因は CPU からスケジュールとキャッシュ方針へ移ります。Swift 大ワークスペースは NVMe キューとモジュール局所性に敏感で、Linux ビルドファームと同型の設計跳躍が要りますが Apple 系は共有ルート罰が強い点が違います。
- 単一ホストの SSH 反射:スケジューラはランダム配置。ラベルとキュー契約が無いとログと物理パスが一致せず事象が再利用されません。
- シャード無しの疑似並列:スロットが多くても DerivedData が一本ならディスク層で直列化しリンク段タイムアウトが出ます。
- アフィニティ逸脱:連続ビルドが別パーティションに落ちると増分利得が崩れ、更新が原因だと誤診します。
- CPU しか見ない SLO:分と緑だけでは会議が止まるのでキュー比率・リンク分散・再試行分数を一枚へ。
2. マトリクス:シャード粒度、キュー形状、ディスク方針
続編的位置づけ:ウォームパス、PR/ナイトリーの振分、分課金とキュー。レビューでは主シャード軸・ディスク割当・並列上限をセットで記載します。
| 次元 | スキームでシャード | テストスライスでシャード | ラベルベースのプール |
|---|---|---|---|
| 主な利得 | 重いスキームごとにリンク競合を下げる | 並列テストのキュー尾部を短くする | Archive を軽ジョブから物理分離する |
| 主なリスク | シャード過多で checkout オーバーヘッド増 | 不均等スライスで偽陰性 | ラベル漂流は自動化の衛生が要る |
| ディスク方針 | スキーム別サブディレクトリと夜間 gc | スロット別 DerivedData | Archive ホストはビルドと成果物の二分割 |
| キュー SLO ヒント | スキームあたり同時実行上限 | スライス別タイムアウトと再試行上限 | Archive 世界並列は一〜二に抑える |
3. DerivedData アフィニティとスタンピード抑制
アフィニティはキャッシュ再利用率を上げる配置です。スロットごとに DERIVED_DATA_PATH、Archive は別キュー、空き一五パーセ未満で新規 Archive 停止、観測 Webhook と同チャネルへ。
export JOB_SLOT=${JOB_SLOT:-1}
export DERIVED_DATA_PATH=/Volumes/ci/nvme/slot-${JOB_SLOT}/dd
export COCOAPODS_CACHE_PATH=/Volumes/ci/nvme/slot-${JOB_SLOT}/pods
xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16' build
バックオフはリンク段は疎に、コンパイルは速失敗。二段階キュー閾値で並列調整とキャパ記票を分けます。
4. プロファイルから三回受け入れまでの五ステップ
- プロファイル:増分/シミュレータ/Archive を分け比率測定。リンク比率高止まりは共有 DD を疑う。
- パス契約:
JOB_SLOT・ラベル・ディレクトリをテンプレ固定、共有キャッシュ直書き禁止。 - 並列ゲート:Archive 世界一〜二、PR はバックオフ付き上限、シミュレータは別キュー。
- 観測:キュー・空き容量・再試行比をクラスタパネルへ。リンク timeout は既定インフラ票。
- 三回受け入れ:同一コミット三回で P95 比較、分散残存なら二台目低並列優先。
5. 引用しやすい三指標
- キュー比率:E2E の一五パーセ超でコミットと相関ならシャードかゲート優先。
- リンク分散:三回同一で P95 が二五パーセ乖離なら共有 DD・空き容量・Archive 混在を疑う。
- 再試行分数比:四分の一超なら並列と上限を先に締める。
三者同時悪化はキャパ事案扱い。
6. ウォーム記事・エラスティック記事との組み合わせ
エラスティックは振分、ウォームは単機内部、本稿は複数ホストの協調。シャード・アフィニティ・SLO 言語をセットで。
7. FAQ
Q: 二台でもプール? A: 契約と観測があれば yes。無ければ痛みを分かち合う二台の SSH です。
Q: スキーム先かテスト先か? A: リンク群集とキュー尾部のどちらが支配かで選び、Archive は常に隔離。
Q: いきなり分散リモートキャッシュ? A: ローカル NVMe 分割とジョブ別パスが整う前は大抵不要で、外部キャッシュは一貫性と egress が増えます。
8. まとめ
プール化はシャードで並列の真偽、アフィニティで増分信頼、SLO でレビュー再現性を決めます。キューとディスクを同時に読む運用へ。
共有ホストプールだけに頼るとディスクレイアウトとベンダ既定の並列上限が見えにくく、macOS を完全に自地として扱えません。シャードとアフィニティ無しに小ディスクノードを積むと Archive と PR が同じリンクスタンピードを再発行し尾部と再試行分数が同時に悪化します。VPSMAC の Apple Silicon Mac クラウドを借りて重いリンク鎖を専用または低並列ベースラインへ載せ、テンプレにシャードと観測契約をコード化し、全ジョブで一つの DerivedData ルートを共有しない運用が、iOS デリバリを定常キャパとして安定させる近道です。