2026 六国リモート Mac 巨大モノレポ:partial clone、blobless と affected ビルドの FinOps チェックリスト

約 18 分で読めます · MACCOME

シンガポール、日本、韓国、香港、米国東海岸、米国西海岸専用リモート Mac上に巨大モノレポを載せるチームは、失敗のたびに CPU を疑いがちです。実務では支配的なコストは多くの場合、Git オブジェクトグラフの取得時間、ワーキングセットの形、そしてリース会計と噛み合わない CI トリガー方針にあります。本稿では監査に耐えるパラメータ行列と FinOps チェックリストを示します。shallow、blobless、treeless、sparse checkout の使い分け、パスフィルタと affected ビルドの版管理、Git とレジストリのホットパスをノードリージョンへ同居させる方法、そして DerivedData と成果物に対するディスクウォーターマークをリース窓ごとに強制する手順です。既存のモノレポ変更検知 runbookXcode Cloud ハイブリッド CI マトリクスDerivedData 再現性チェックリストと併読してください。CocoaPods/SPM のミラーとディスク観点はミラー記事で補完します。

モノレポが短期または専用リースにぶつかったときの六つの痛み

  1. コールドスタートの壁時計が clone に飲まれる:最初のジョブが数十 GB を落としてから xcodebuild を開始し、キュー深度が上がる一方で FinOps は「並列を足せ」としか見えず、オブジェクト取得曲線が見えません。
  2. blobless と treeless の無責任混在:インタラクティブ用途は treeless でディスクを節約し、コンプライアンス夜間ジョブは完全 blob を要する、という境界が文書化されていないと、失敗は「ネットワークの揺らぎ」に見えます。
  3. パスフィルタが狭すぎる:共有 proto ディレクトリが変わってもフィルタ拡張が追従しない、欠陥が main に入る、ポストモーテムでルールが README にしかないことが判明する、という流れです。
  4. ディスクウォーターマークがリースから切り離されている:日次ホストで DerivedDataSourcePackages に上限がなく、シミュレータ並列でユニファイドメモリと SSD が同時に張り付き、スワップ嵐になります。
  5. クロスリージョン egress の行が欠落している:blobless のミスで origin から blob を取りに行き、Git リモートのリージョンがビルダーとズレると、短期リース内の追いつき取得コストが計算コストを上回ります。
  6. ハイブリッド CI との責務重複:Xcode Cloud が shallow レイヤーをキャッシュしているのに専用ホストはフル clone し、同じ blob に二重課金します。ハイブリッドマトリクスに、どのオブジェクトグラフ段階をベアメタルに残すかを明文化してください。

六国ノードが買うのは予測可能な専用 IO と安定したリージョナル egressであり、モノレポが買うのは単一リポジトリでの協業です。パイプラインにオブジェクトグラフ予算が無い限り、混乱はノート PC からクラウドへ移転するだけで、弾力リースがキュー崩壊を修復することはありません。四半期レビューでは vCPU 分単価だけでなく GB·分とルールセット改定回数を同じスライドに載せると意思決定が改善します。

本ガイドはPods/SPM ミラーチェックリストと補完的です。Git スリミングは「リポジトリがどれだけ大きいか」、ミラーは「解決がどれだけ騒がしいか」に答えます。本ページは前者とトリガーに焦点を当て、依存解決そのものだけに依存しない運用へ導きます。実際の現場では、ミラー障害と blob ミスを同一ダッシュボードで見ないと、原因切り分けに日数を要します。

組織的な失敗モードはルールセット版が無いことです。パスフィルタが複数 YAML に散らばると、レビューで週次差分を説明できません。コンテナイメージタグと同じ厳格さで AFFECTED_RULESET=v2026.05.08(例)を必ずログへ出してください。加えて、フィルタ拡張は変更管理チケットと紐付け、緊急時の「とりあえず全パス」が恒常化しないようにします。

戦略 ディスクとコールドスタート リスク/アンチパターン リース FinOps との結び付き
フル clone 最も完全だがコールドスタートは最遅、ピークディスクも最大 巨大リポジトリと短期リースには不向き 月次ベースラインやリリース直前の窓向け
Shallow(--depth) 履歴を切り詰め、clone を実質的に縮小 深い履歴や特定のマージベースを要するワークフローを壊す 再構築が安いバースト日次ホストに強く合う
Blobless(clone.filter) 作業ツリーは速く、blob はオンデマンド ランダムな blob ミスで egress が揺れる 予算表に Git リモートとノードリージョンの同居を明記する
Treeless ピークディスクをさらに削減 監査が弱く、デバッグ税が高い 明示例外付きのコンパイル専用ジョブのみ
Sparse checkout ファイル数が減り、インデクサ負荷が下がる 運用コスト、共有ヘッダ欠落による不可解な失敗 affected ルールと共有ディレクトリ許可リストとセットで使う
info

第一原理:専用リモートホスト上の GB·分はすべて台帳行に写すこと——オブジェクト取得、コンパイル、キャッシュ、成果物、ログです。オブジェクトグラフ予算が無いと、すべてが「マシンが遅い」に潰れます。

六ステップ runbook:README の shallow 記述から監査可能なパイプラインへ

  1. 三信号を測定するgit clone の壁時計、ワーキングセット GB、初回グリーン xcodebuild 前の空きディスク。六国すべてで同一プローブを回しベースラインを保存します。
  2. ジョブクラスごとにグラフモードを割り当てる:PR チェック、ナイトリー、リリースフルビルドは暗黙のデフォルトを共有してはいけません。CI で GIT_CLONE_MODE を明示的に export します。
  3. パスフィルタ/affected ロジックを版管理する:ルールは Git に置き、main 系パイプラインでハッシュを必ず印刷します。共有ディレクトリ変更にはレビューラベルでカバレッジ拡張を義務付けます。
  4. ディスクウォーターマークスナップショット playbookに沿った順序で DerivedDataSourcePackagesxcresult を上限付きで退避します。
  5. クロスリージョンの追いつき計画:blobless のミス率が閾値を超えたら、同一リージョンのミラーシードへフェイルオーバーするか、承認チケット付きで一時的に取得範囲を広げます。
  6. リース帰属:オブジェクト取得分とコンパイル分を分離し、バーストホストには攻めの戦略、月次プールにはベースラインを載せます。

ステップ二と三の間に人間ゲートを置き、パスフィルタ拡張は二名承認にします。「とりあえず緑」がサイレントにパスを再グローバル化しないようにします。承認ログは四半期にサンプリングし、例外の常態化を早期に検知します。

ステップ四は順序付きスクリプトでなければなりません。再生成可能なキャッシュを先に消し、最後にリポジトリへ触れます。短期リース最終日のディスクアラートでオブジェクト破損を招かないためです。ディレクトリ境界は変更検知 runbookと相互参照してください。

bash
# 例:blobless + depth(リモート URL は置換)
export GIT_CLONE_MODE=blobless_shallow
git clone --filter=blob:none --depth=50 \
  https://git.example.com/acme/monorepo.git "$CI_WORKSPACE/repo"

# 監査用:ルールセット版を印刷
echo "AFFECTED_RULESET=${AFFECTED_RULESET:-v2026.05.08}"

三つの KPI(Grafana またはレビュー議事録向け。閾値は自社ベースラインへ)

  • Clone からグリーンまでの中央値(C2G)git clone 開始から初回成功シミュレータビルドまでの分。週次で 25% 超の上昇がありルール変更が無いなら、CPU より先にblob ミスまたはミラー劣化を疑います。
  • 空きディスク 12 GB 未満のジョブ割合(256 GB ルート巻の例):三日連続で 8% を超えたらキャッシュ階層化またはリースアップグレードレビューを開きます。
  • affected の偽陰性率:共有ディレクトリに触れる週次カナリア PR はフルチェックを必ず通し、取りこぼしがあればルールセット版を上げポストモーテムを義務化します。

巨大リポをノートから rsync する/depth=1 固定は「方針なし」より悪い理由

rsync は監査不能なワーキングツリー漂移を CI に注入します。今日のローカルパッチ行は明日の緑ビルドと成果物ハッシュの不一致を生みます。永久 depth=1 はレビューを欺き、履歴と依存監査可能性を壊すため、コンプライアンスの問いに「分からない」しか返せません。これらの近道に対し、六国のいずれかでオブジェクトグラフ方針とリースを同じ FinOps シートに載せられる専用 Apple Siliconが必要で、Git とレジストリのホットパスを同居させ、DerivedData ウォーターマークをスクリプト化できるとき、MACCOME クラウド Mac miniは受理チケット化が容易です。シンガポール、日本、韓国、香港、米東西のノードを日次から四半期リースで束ね、フル履歴と五シミュレータを短期リース単体に載せる前に、コールドスタートとディスクピークを封じ込められます。

さらに、runner ラベルとリース SKU を同じスプレッドシートで管理すると、エンジニアリングと財務の言語が一致し、議論が「CPU 使用率だけ」に閉じるのを防げます。これは六国展開における再現性とコスト可視性の両方に効きます。

締め:clone 方針は CLONE_POLICY.md に書き、CPU SKU だけに書かない

成果物は三表です。ジョブクラス別 Git モード行列パスフィルタ版と例外ウィンドウリース行にマッピングしたディスク退避。新入社員は初日に、自分の PR がどの clone モードか、いつフィルタを広げるか、アラート時に最初に消すディレクトリはどれかを答えられる必要があります。ハイブリッド CIと併用する場合、どのキャッシュ層を Xcode Cloud に残し、どのオブジェクトグラフ段階をベアメタルに残すかを明文化しないと、同一 blob に二重課金します。

最終五分チェックは、ルールセット版がマージとともに上がること、そしてGit リモートがノードリージョンと揃うことです。揃わない場合、リージョンを増やしても遅さを地理的に複製するだけです。次四半期のキャパシティ計画では C2G とディスクアラートを必ず同じレビューアジェンダに載せてください。

FAQ

六国ビルダーで treeless は許容されますか。

明示例外付きで可能です。セキュリティスキャンや履歴重いジョブは別経路に残し、blob 追いつき egress を監視してください。価格文脈はレンタル価格を参照してください。

affected の偽陰性からどう復旧しますか。

PR チェックにナイトリーまたはリリース前の拡張を組み合わせ、ログへルールハッシュを必ず出します。運用メモはヘルプセンターにもあります。