2026年 独占リモート Mac CI:git blobless/浅いクローン/sparse-checkout と LFS/サブモジュール——フェッチ時間、キャッシュヒットと SSH パイプラインの checkout 失敗を再現可能な意思決定マトリクス+FAQ
単一の独占リモート Macで CI を回すとき、クローンは一度きりのコストではなく、実行ごとの課税です。往復遅延、オブジェクト取得、LFS、サブモジュールの再帰、ワークスペースがウォームキャッシュに乗るか——本稿では blobless、浅いクローン、sparse-checkout、LFS、サブモジュールを一枚の意思決定マトリクスに置き、SSH 越しの checkout 失敗を runbook 順に切り分ける表をまとめます。まだ専有ノード台数とキュー深さを検討中なら、先に
2026年 iOS/macOS CI リソースプール選定:単台高配の専有リモート Mac vs 複数台の専有ノード
を参照してください。
1. 各仕組みが解く問題
- Blobless クローン(
--filter=blob:none):コミットグラフとツリーを先に取り、blob はオンデマンド。巨大リポでビルドが木の一部だけ触る場合に効く——ただし後続ステップが欠落 blob に触れなければ偽陰性(checkout は成功したのにコンパイルがファイル不足)になり得ます。 - 浅いクローン(
--depth):履歴を切ってオブジェクト量を削る。マージベースやgit describe、サブモジュール固定 SHA まわりが壊れやすいので、CI では fetch の深さを固定するか、リリースはタグ運用で揃える必要があります。 sparse-checkout:宣言したパスだけ実体化——巨大モノレポでは blobless と併用されがち。スクリプトが暗黙に参照するパスをすべて allowlist しないと「ランダムにファイルがない」挙動になります。- Git LFS:ポインタは Git、実体は LFS ストレージ。CI では
git lfs pull(または fetch/checkout フック)、資格情報、帯域、ロックファイルに揃えたキャッシュキーが要ります。 - サブモジュール:1 回の clone が N 回のリモート往復に。SSH 身份、再帰の深さ、
.gitmodulesの URL 書き換えがパイプラインでよく詰まります。
2. 再現可能な意思決定マトリクス(独占 Mac CI)
下表はリポジトリの形 × 目的ごとのデフォルト戦略です。ジョブがリモート Mac 上の SSH で動く場合は、非対話の資格情報と、runbook どおりランナーユーザーがワークスペースを見えることもセットで押さえてください。
| シナリオ | 推奨 | 主なリスク/緩和 |
|---|---|---|
巨大モノレポで ios/ とツールチェーンだけ必要 |
blobless + sparse +(任意)浅いクローン | リスク:スクリプトが cone 外を参照 → ビルド時に失敗。緩和:sparse ルールを文書化し、最初の CI ステップでディレクトリ検査。 |
| 中規模で監査や版付けのため全履歴が必要 | フルクローン、または shallow なしの blobless | リスク:浅い履歴が describe を壊す。緩和:リリース用ジョブだけ別途フル fetch。 |
| LFS アセット(アート、モデル等) | 通常 clone +明示的な git lfs fetch/checkout |
リスク:資格情報・帯域。緩和:LFS オブジェクトキャッシュをジョブキー(ブランチ/ロックハッシュ)で分離。 |
| サブモジュール多め/ネスト | submodule update --init --recursive + SSH 身份は一本化 |
リスク:ホスト鍵、デプロイキー範囲、サブモジュール URL 誤り。緩和:insteadOf とイメージに焼いたフィンガープリント。 |
| 小さなコミットが頻繁で、checkout 後のコンパイルまでを最短に | 永続ワークスペース + git fetch + reset --hard |
リスク:汚れたツリー。緩和:ジョブ末尾に clean、または N ビルドごとにフル re-clone。 |
3. フェッチ時間と「キャッシュヒット」の意味
専用 Mac では、キャッシュはだいたい三層に積み上がります。混同しないでください。
- ランナー/プラットフォームキャッシュ:キーでディレクトリを復元(依存関係、DerivedData 等)。Git のオブジェクト DB の再利用とは別物です。
- ローカル bare ミラー(
git clone --mirror+ reference clone):高頻度ビルドに強い。ディスク枠と、並行ジョブ間の隔離のバランスが課題。 - 増分オブジェクト:
fetchは新コミットだけ。blobless ではファイルに初めて触れたとき blob を引きに行く——ログは「checkout は速いのにコンパイルが急に遅い」になりがちです。
同一ホストでトークンを SSH 越しに長く回すコンポーネントがあると、対話シェルでは鍵があるのにジョブではないという差が増幅します。ミラー置き場とクリーンアップをプラットフォームキャッシュに寄せるかローカル bare に寄せるかを決める前に、環境分裂の切り分けは OpenClaw 遠隔 gateway の Pairing/Relay とトークン——リモート Mac の SSH 再現チェックリスト+FAQ の順序も参照すると、原因の見え方が揃います。
4. SSH パイプライン:checkout 失敗の再現可能な切り分け順
意図的に環境優先、Git ロジックは後にしています。runbook にそのまま載せやすい順です。
| 症状 | 最初に見るもの | よくある根本原因 |
|---|---|---|
Permission denied (publickey) |
パイプライン用ユーザーと対話 SSH ユーザーで HOME が一致するか;ssh -T git@host |
LaunchAgent/launchd ではシェルプロファイルが読めず、ssh-agent と鍵が注入されない。 |
Host key verification failed |
known_hosts のパスと権限 |
CI ユーザーのホームが読み取り専用、またはジョブごとにワークスペース消去——イメージに焼いたフィンガープリントが必要。 |
| サブモジュールのディレクトリが空 | git submodule status;HTTPS と SSH の URL |
submodule update していない、または別資格情報;insteadOf が不足。 |
| LFS ファイルが小さなポインタのまま | git lfs env;エンドポイントと資格情報 |
LFS 未インストール/未 pull、または古いポインタ状態をキャッシュしている。 |
| sparse-checkout 後にヘッダ不足でコンパイル失敗 | sparse ルールと include パス;シンボリックリンク | ルールが狭すぎる;Linux ランナーと混在すると大文字/シンボリックリンクの差で落ちる。 |
5. FAQ
Q1: CI では blobless はフルクローンより常に良い?
必ずしもそうではありません。ビルドが木全体を不可避に触る(フルツリー grep、メタデータ走査など)と、遅延 blob 取得の総時間が増えることがあります。典型パイプラインで「fetch + checkout + compile」を測ってから決めてください。
Q2: 浅いクローンは CocoaPods/SPM の解決を壊す?
場合があります。ツールチェーンがタグや履歴に依存する場合、浅い clone はマージベースや推論を不安定にします。「リリース」と「PR」で fetch の深さを分け、ログで履歴不足と依存の破損を区別しやすくしてください。
Q3: Git の前に OS のファイルキャッシュをいじるべき?
まずフルクローンの繰り返しを減らすことと、LFS オブジェクト用の別キャッシュを優先してください。ローカルは APFS で十分速く、詰まりは多くがリモートと TLS です。巨大リポでは bare ミラー+ reference clone がカーネル調整より効くことが多いです。
このクローン方針を「運用で粘る」なら Mac mini が向く理由
blobless、sparse のルール、LFS/サブモジュールの規律は、どれもパス・ユーザー・資格情報がビルドを跨いで安定している前提です。Apple Silicon の Mac mini を独占 CI ノードにすると、ディスク配置と権限モデルが読みやすく、マルチテナントでワークスペースを踏まれにくいです。macOS は Unix ツールと Homebrew、SSH/ssh-agent の切り分けが素直で、M シリーズは git fetch とコンパイル、codesign が混在しても効率よく回り、アイドル時の消費電力も抑えられます。Gatekeeper・SIP・FileVault は、CI 専用アカウントに絞った監査とも相性が良いです。
2026 年時点でも、再現性の高い clone とキャッシュ挙動を runbook に落とすなら、専用リモート Mac mini M4 はコストパフォーマンスの良い出発点です。SSHMac のホームページでプランを確認し、このマトリクスをパイプライン雛形とインシデント手順に組み込んでください。
Git/LFS/SSH の専有リモート Mac でキャッシュを安定させたいですか?
SSHMac Remote Mac mini
実機 Apple Silicon 上で blobless/sparse/ミラー運用を試し、予測可能な SSH で上記マトリクスを適用——ノート PC のスリープや熱によるブレを避けられます。