チェックアウト戦略はすべての macOS パイプラインの静かな倍率因子だ:同じ Mac mini M4 でも git worktree なら「十分速い」と感じられ、DerivedData がジョブ間で漏れると「謎のフレーク」になる。2026 年、明示的な worktree 対クリーンクローン 方針を公開するチームはキュー時間 と 監査リスクの両方を下げる。本稿は 2 つのマトリクス、数値ディスク予算、8 ステップのロールアウト、社内 Runbook に貼れる FAQ 構造化データを提供する。
本方針を ディスクとアーティファクト保持、容量エンベロープ、Runner アフィニティ規則 と組み合わせる。香港・日本・韓国・シンガポール・米国に専用ホストを追加する場合は 料金 から始め、SSH/VNC アクセスパターンは ヘルプ を参照。
チェックアウト方式は Git の豆知識ではなくスケジューリング問題である理由
セルフホスト macOS Runner は既定でステートフル:グローバルキャッシュ、ユーザーレベルのキチェーン項目、Xcode の既定 DerivedData はフェンスしない限りジョブをまたぐ。ジョブごとのクリーンクローンは Git オブジェクトを分離するがコンパイラを自動分離しない。Worktree は単一オブジェクト DB を共有する——高速——がクリーンアップスクリプトのミスを増幅する。チェックアウト方式をシークレットや署名アイデンティティと並んだ ブラスト半径 の物語の一部として扱う。
- Worktree は多数ブランチが同一リビジョンストリームをビルドするとき
git fetchバイトを最小化する。 - クリーンクローン はチェックアウト後フックがツリー外ツールを変更するリポジトリで隔離を最大化する。
- スケールでは ハイブリッド(ウォームベアミラー + 短命 worktree)が一般的だが厳格なパス規約が必要。
決定マトリクス A:worktree、クリーンクローン、ハイブリッドの選択
| リポジトリシグナル | 推奨モード | 注意点 |
|---|---|---|
| モノレポ、高回転、共有 Xcode バージョン | ハイブリッド(ベアミラー + worktree) | worktree ごとに -derivedDataPath で DerivedData を固定すること |
| 小規模アプリ、依存少、再現性重視 | ジョブごとクリーンクローン | LFS 帯域に注意;ホストで blob をチェックサム検証付きキャッシュ |
| ハードウェア結合 ID のリリース署名 | 専用ホスト + クリーンクローン | 信頼できない fork と worktree ベースを共有しないこと |
| 外部貢献者の fork PR ビルド | 一意パス上のエフェメラルクローン | 信頼境界をまたぐ共有ベアミラーを無効化 |
決定マトリクス B:キャッシュ配置と漏洩リスク
チェックアウト方式は Git オブジェクトの居場所 を選び、キャッシュ配置は 次のジョブに何が残るか を選ぶ。両方を揃えないと「クリーンクローンしたのにグローバルパス経由でコンパイラ状態が漏れる」ことが起きる。
| キャッシュ | M4 Runner の安全な既定 | 漏洩の兆候 |
|---|---|---|
| Swift Package Manager | ジョブごとにワークスペース一時配下へ SourcePackages |
グローバルキャッシュを lockfile ハッシュなしで再利用すると PR 間でバージョンずれ |
| CocoaPods / Bundler | クローン内 vendor またはコンテンツアドレス tarball キャッシュ | ネイティブ拡張が誤ったアーキテクチャフラグを拾う |
| Xcode DerivedData | 常にジョブ ID でパスをスコープ | 別ブランチの部分インデックス後に UI テストが不安定 |
実行可能なディスク予算(出発点)
- ベアミラー上限:512 GB ホストではモノレポミラーを 120 GB 未満に;手削除ではなく監査付きスクリプトで剪定。
- 並列 worktree:IO メトリクスが持続読み取りスループットに余裕を示さない限りホストあたり最大 4。
- クリーンクローンスクラッチ:
git clone --depth 1と LFS ピークに最大作業ツリーの 2× を確保。 - アラーム:CI ボリューム空きが 15% を 5 分超下回ったらページ。
監査メモ:各 Runner グループの信頼層を文書化。fork PR を一度でもチェックアウトした worktree ベースは、文書化されたワイプなしに署名リリース成果物を後でビルドすべきではない。
8 ステップのロールアウト
- リポを分類:信頼できる内部、パートナー、公開 fork の層に。
- 計測:各層で両モードの p95 チェックアウト+コンパイル時間を 1 スプリント測定。
- パス規約を実装:例
/ci/jobs/<id>/treeを自動化が独占。 - ジョブ後フックを配線:worktree、DerivedData、ジョブ ID に紐づくシミュレータキャッシュを削除。
- グローバルキャッシュをブロック:コンテンツハッシュ + 信頼層がキーでない限り。
- メトリクス追加:チェックアウト秒、LFS メガバイト、ホスト別空きディスク率。
- ゲームデイ:四半期に 2 回ディスクフル想定を演習。
- ハードウェア拡張:予算が危険な共有を強いるとき——NodeMac はリージョンごとに専用 Mac mini M4 をコロ lead time なしで追加可能。
よくある質問
共有 Mac mini M4 CI ホストで git worktree はいつ安全か?
各 worktree パスがジョブ単位で分離され、フックが制御され、サブモジュールが固定され、クリーンアップが worktree と同居キャッシュの両方を削除するとき。ベアリポを対話型開発セッションと共有しないこと。
クリーンクローンがランダムに失敗するのはなぜか?
多くはグローバルキャッシュ、LFS ネットワーク、スキャナが出力に触れること。キャッシュをジョブ単位にスコープし、失敗をネットワークグラフと相関させる。
並列 worktree の追加ディスクは?
同時 worktree ごとに作業ツリーと共有オブジェクトストアを、Xcode プロジェクトならジョブごとの DerivedData も見込む。