レイテンシ予算 · 同期境界 · ロックリース · 検証可能な Mac Mesh リレー
テックリードとモバイル基盤担当者が複数のリモート Mac メッシュで作業すると、コピー変更はローカルで済んだのに別ノードではコンパイルが落ちるといった詰まりが起きやすいです。同期境界が曖昧、DerivedData ポインタが残らない、ハンドオフ中にロックリースが切れる、といった理由が典型です。本文では軽いローカル編集で足りるケースと、重いビルドをリモートセッションに固定すべきケースを切り分け、README に書くべきレイテンシ予算を 3 つ提示し、リポジトリ・鍵・派生パスの境界を整理します。6 ステップの Runbookとノード切替マトリクスもセットです。分流チェックリスト初版、Mac Mesh オーケストレーション、SSH と VNC のリレーと合わせて読んでください。
軽い編集とはバイナリ契約を変えない変更です(コメント、文言、アセット差し替え、小さな設定トグル)。ABI、マクロ、Swift モジュール境界、署名パイプラインに触れる場合はノート PC とメッシュ間のドリフトを避けるためリモート CI セッションへ寄せます。共有ビルドランナーのキュー経済にその分離が載ります。
隠れキャッシュ:ローカル Xcode インデックスとリモート DerivedData が食い違い、ローカルだけ緑で CI が赤。
中間ポインタ:ブランチ名は揃っているが、アーカイブパスが前ノードの一時フォルダを指したまま。
キーチェーン文脈:ローカルでは鍵を開いたが、無人リモートでは初回署名が落ちる。
キュー競合:二人が同じメッシュノードに乗り換え、リース更新なしでビルドを踏み潰す。
跨リージョン RTT:README に書かれないインタラクティブ予算のせいでリモート IDE の遅延がスペック不足と誤解される。
注:転送方式の比較が目的なら先に SSH と VNC を読んでください。本ページはどこで計算させるかだけを扱います。
レビューでは表をそのまま貼り、数字は跨リージョン mesh の典型的な計画帯です。自チームのトレースに差し替え、集計方法も残してください。
| 観点 | ローカル軽編集 | リモート重ビルド | ハイブリッド |
|---|---|---|---|
| 向く変更 | 文言・設定・アセット差し替え | ABI・署名・アーカイブ・性能クリティカル | ローカルで PR、夜間フルビルドはリモート |
| 資格情報 | 署名文脈を省略しうる | プロファイルとキーチェーンゲートを一致させる必要 | ハンドオフ封筒に成果物ハッシュ |
| 失敗の形 | 主にマージ衝突 | キュー枯れ・ロック漂移・キャッシュ串味 | ポインタ腐敗またはリース不一致 |
| mesh 依存 | オフラインでも可 | ノード ID とリージョンにバインド必須 | オーケストレーション メタデータ前提 |
分流の良し悪しは「ノード切替後に数分で中間ポインタとロック所有者を説明できるか」で決まり、「ローカルがたまに通るか」ではありません。
以下は旧稿の 分流チェックリスト と併用します。旧稿が行列項目を定義する一方、本稿はロックリースと閾値コマンド形を追加します。
ワークロード種別を宣言:MR テンプレで「文言のみ/ABI 影響/署名影響」をチェック。
対象プールを固定:region + pool_id を残し、「空いている Mac なら誰でも」を禁止。
ハンドオフ封筒を送る:ブランチ HEAD、derived_slice_token、queue_ticket_id。
ロック TTL を宣言:コンパイル P95 に合わせ +10 分のハード上限。
プローブ:ノードがインデックス摘みと空きディスク閾値を書き、閾値未満ならキュー取得を拒否。
ポストモーテム項目:失敗には封筒ハッシュとロック所有者が必須。xcodebuild 末尾だけは不可。
export HANDOFF_JSON="$(jq -nc \
--arg head "$(git rev-parse HEAD)" \
--arg slice "${DERIVED_SLICE_TOKEN}" \
--arg ticket "${QUEUE_TICKET_ID}" \
--arg pool "${MAC_MESH_POOL_ID}" \
'{git_head:$head, derived_slice:$slice, queue_ticket:$ticket, pool:$pool}')"
curl -sf -X POST "${MESH_HANDOFF_URL}" -d "${HANDOFF_JSON}" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: ${QUEUE_TICKET_ID}"
失敗の多くは「Git が揃った」を「状態全体が揃った」と混ぜることです。プロファイル細部は プロビジョニング統治 の記事側です。
| 境界 | 揃えるもの | 典型的な失敗サイン |
|---|---|---|
| Git | ブランチ・サブモジュール・LFS ポインタ | ビルドが古い submodule SHA を参照 |
| DerivedData | 名前付きスライスやキャッシュ名前空間 | Swift モジュール表面が不一致 |
| 鍵とプロファイル | プロファイル manifest ハッシュ、キーチェーン解放方針 | 無人環境で初回署名が落ちる |
| キュー | ticket_id の更新と所有者 | 幽霊ビルドが CPU を奪う |
警告:DerivedData を共有ボリュームへコピーするなら保持期限と GC 方針が必須。省略すると長期休暇後に mesh が一斉に爆発します。
ポインタ凍結:中間パスとキュートークンをトレース ID 付きでログ化。
ロック解放:ビルド停止または runner ジョブ取消、ゾンビ xcodebuild が無いことを確認。
ディスク確認:宛先ノードの空きが派生ピーク予算を上回ること。
セッション再構築:新ノードで CI ユーザー文脈とキーチェーン方針を再作成。
プローブ再生:フルパイプライン前に最小ターゲットでコンパイル。
封筒更新:ハンドオフ JSON の pool と ticket を書き換え。
以下は設計レビュー用の帯です。自チームのテレメトリに差し替え、観測ウィンドウも明記してください。
| チーム規模 | リリース頻度 | 跨リージョン比率 | まず安定しやすい選択 |
|---|---|---|---|
| 小 | 週複数 | 低 | 固定リモートセッション + 明示 TTL |
| 中 | 日次 | 中 | ハイブリッド + 封筒自動検証 |
| プラットフォーム | 継続 | 高 | 専用リモート席 + ロック指標ダッシュボード |
個人ノート PC にリモート重ビルを預けるとスリープ・OS アップデート・監査不能なキーチェーン確認でキュー SLO が壊れます。ローカルフルビルドだけに寄せると Archive ピーク時に帯域と熱設計がさらにきつくなります。
契約で語れる稼働時間と専用ノード境界が必要な mesh 全体コンパイルには、場当たりハードでは監査可能な SLA を出しにくいです。iOS CI/CD と AI エージェントのリレー自動化には、VpsMesh の Mac Mini クラウドレンタルが通常より適しています。リージョンとスペックを選び、ノードを専有し、キュー方針を運用契約に書き込みましょう。