三類型の痛み
- 署名境界:同一ログイン文脈の混在でキーチェーンとプロファイルがずれ、codesign失敗の切り分けが難しい。
- 並列とI/O:同一DerivedData/Pods/成果物ルートへの同時書き込みで中間生成物が壊れる。
- 暗黙のキュー:ロック待ち・ジョブ上限・ランナーが不整合でゾンビがプールを塞ぐ。
SSH隔離 vs キーチェーン分割
SSHのみでは署名不足。両方必須。
| 観点 | SSHセッション隔離 | キーチェーン/署名の分割 |
|---|---|---|
| 守る対象 | ログイン・所有者・セッション境界 | 証明書/秘密鍵・codesign ID・プロファイル整合 |
| 典型 | アカウント分離、ロール鍵、Jump、鍵共有禁止 | 専用キーチェーン、CI非対話アンロック、環境別プロファイル |
| 誤解 | SSH=署名安全、同一アカウント多セッション混在 | ログインキーチェーン共有、ローテなし |
並列・flock・キュー
flockとRunner/スケジューラの上限を同源に。
| 方針 | 向く場面 | パラメータの感覚 |
|---|---|---|
| 直列+flock | 単一クローン、共有DerivedData、共通ツール/prefix書込 | 重ジョブ1。flock -w 30~60。重い待ち5超で警告 |
| 限定並列 | worktree分離、独立サンドボックス、読取キャッシュ高 | 重1~2・軽2~4。空き15%未満で縮小連動 |
| PFキュー | GHA 等 | ラベル=mutex、深さ10超で拡張→Runner表 |
Derived Data 比較
READMEとベースライン表にパス固定、掃除責任も明記。
| 方針 | 利点 | リスクと緩和 |
|---|---|---|
| 既定DerivedData | 手早い | 同ルート競合→排他・掃除必須 |
| リポ/worktree別 | 責任・並列説明が明確 | ディスク増→剪定+ビルドIDログ |
| 共有RO+書込サンドボックス | 再コンパイル短縮 | umask/所有者/flockをキューと一致。worktree表 |
タイムアウト一覧
p90〜p95+余白で調整。
| 項目 | 推奨値/説明 |
|---|---|
| ロック待ち | 30~60秒。再キュー/明示リトライ。無限待ち禁止 |
| ジョブ全体 | 目安45~90分。アーカイブ/notaryは別枠延長 |
| フェーズ | 依存・compile・署名を分割計測。超過はツリーkill+ロック解放 |
| アラート | 重い待ち5超黄/10超赤。重い新規投入を止めやすく |
- □ ログ共通:ビルドID・アカウント・鍵分割。
- □ 揺らぎ→並列減+半端掃除、安定性。
運用五ステップ
- 排他図:DerivedData・依存・署名・成果物・flock区間を一枚に。
- アカウント/キーチェーン:必要な分割のみ。プロファイルは環境別、ローテ記名。
- 同源設定:flock・Runner・キュー深度を同じ源から。
- パス固定:リポ/worktreeごとのルートを文書化。
- 二並列試験:待ち・リトライ・汚れ残りを確認。
FAQ
問:デフォルトキーチェーンでCI?
非推奨。専用キーチェーンをジョブで明示し、アンロック最小化。
問:並列数=物理コア?
まず排他とキュー。重い統合は一路〜二路が多い。
問:タイムアウトkillでキーチェーン破損?
キーチェーンより半端ディレクトリがリスク。kill後はサンドボックス破棄かクリーン再実行。