DevOps / 監査 2026年4月14日

2026 決定マトリクス:Mac mini M4 CI Runner 上の Git Worktree とクリーンクローン

NodeMac Team

ビルド基盤編集者

チェックアウト戦略はすべての 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 テストが不安定

実行可能なディスク予算(出発点)

  1. ベアミラー上限:512 GB ホストではモノレポミラーを 120 GB 未満に;手削除ではなく監査付きスクリプトで剪定。
  2. 並列 worktree:IO メトリクスが持続読み取りスループットに余裕を示さない限りホストあたり最大 4
  3. クリーンクローンスクラッチ:git clone --depth 1 と LFS ピークに最大作業ツリーの を確保。
  4. アラーム:CI ボリューム空きが 15%5 分超下回ったらページ。

監査メモ:各 Runner グループの信頼層を文書化。fork PR を一度でもチェックアウトした worktree ベースは、文書化されたワイプなしに署名リリース成果物を後でビルドすべきではない。

8 ステップのロールアウト

  1. リポを分類:信頼できる内部、パートナー、公開 fork の層に。
  2. 計測:各層で両モードの p95 チェックアウト+コンパイル時間を 1 スプリント測定。
  3. パス規約を実装:例 /ci/jobs/<id>/tree を自動化が独占。
  4. ジョブ後フックを配線:worktree、DerivedData、ジョブ ID に紐づくシミュレータキャッシュを削除。
  5. グローバルキャッシュをブロック:コンテンツハッシュ + 信頼層がキーでない限り。
  6. メトリクス追加:チェックアウト秒、LFS メガバイト、ホスト別空きディスク率。
  7. ゲームデイ:四半期に 2 回ディスクフル想定を演習。
  8. ハードウェア拡張:予算が危険な共有を強いるとき——NodeMac はリージョンごとに専用 Mac mini M4 をコロ lead time なしで追加可能。

よくある質問

共有 Mac mini M4 CI ホストで git worktree はいつ安全か?

各 worktree パスがジョブ単位で分離され、フックが制御され、サブモジュールが固定され、クリーンアップが worktree と同居キャッシュの両方を削除するとき。ベアリポを対話型開発セッションと共有しないこと。

クリーンクローンがランダムに失敗するのはなぜか?

多くはグローバルキャッシュ、LFS ネットワーク、スキャナが出力に触れること。キャッシュをジョブ単位にスコープし、失敗をネットワークグラフと相関させる。

並列 worktree の追加ディスクは?

同時 worktree ごとに作業ツリーと共有オブジェクトストアを、Xcode プロジェクトならジョブごとの DerivedData も見込む。

予測可能な CI のための専用 Mac mini M4

信頼層ごとにホストを分離し、自動化は SSH、2 つのチェックアウトを視覚比較する必要があるときは VNC。

NM
NodeMac Cloud Mac
5分でデプロイ

クラウド専用 Apple Silicon Mac。SSH/VNC 即時接続、HK·JP·SG·US ノード対応。

今すぐ始める