複数 Mac mini M4 でビルドを分割しても、最終成果物は一本のストーリーに揃える必要があります。CPU より先に詰まるのは、成果物の一貫性・ディスク余裕・跨リージョン遅延の設計です。

ガードレールなしでは並列クラスタが詰まる理由

専有 Mac 2〜8台規模の CI 向けに、意思決定マトリクス・rsync フラグ表・flock ロック・1TB/2TB 水位・跨リージョン遅延チェックを一枚化しました。ノードは同型で揃えるほど再現性が上がります。

  • 成果物分裂: 同一ツリーへの並行書き込みでフレームワークが半壊する。
  • 同期ストーム: 跨リージョンのフルコピーが上行を食い、体感を落とす。
  • ディスク崖: DerivedData が APFS を圧迫しキャッシュが途中失敗する。

意思決定マトリクス:トポロジと制約

パターン 向いている場面 リスク
単一ライター+昇格 厳格な出所管理や署名バンドルが必須。 ライターがホットスポット化。
ゴールデンノードからの rsync 扇展開 読み取り中心ワーカーと差分バイナリ。 下記キャップで挙動が読みやすい。
オブジェクトストア前段 巨大成果物とマルチクラウド egress 契約。 macOS 側の統合コストが高い。

POSIX 親和性から rsync 扇展開が多く、昇格(promote)だけ単一路にすると QA の引き取りが安定します。

今日から使えるパラメータ化 rsync

リージョン別プロファイルでフラグを固定化。ゴールデン BUILD_ROOT をチェックサム・部分再開・帯域上限付きで送る例です。

#!/usr/bin/env bash
set -euo pipefail
PROFILE="${1:-apac}"
case "$PROFILE" in
  apac) BW="60000"; TIMEOUT="25m";;
  amer) BW="45000"; TIMEOUT="35m";;
  *) BW="30000"; TIMEOUT="40m";;
esac
/usr/bin/timeout "$TIMEOUT" rsync -azh --delete-delay --partial \
  --checksum --bwlimit="$BW" --omit-dir-times \
  "$GOLDEN_HOST:$GOLDEN_PATH/" "$LOCAL_ARTIFACT_ROOT/"
フラグ 目的 メモ
--delete-delay 同期成功まで削除を遅延。 長時間転送中のツリー欠損露出を抑える。
--partial 未完了ファイルを保持して再開可能に。 timeout と併用しハングを切る。
--bwlimit ストリームあたり KiB/s でスロットル。 課金ティアに合わせ対話ビルドの体感を守る。
/usr/bin/timeout 壁時計ガードレール。 終了コード 124 でメトリクス送出。

共有ツリーを守るビルドロック

公開だけ flock で排他し、正規パスの同時書き換えを防ぎます。ロックはローカルか軽量 NFS メタのみ。SSHFS 上ではロックしないでください。

LOCK_FILE="/var/tmp/ci-artifact-promote.lock"
flock -n "$LOCK_FILE" bash -c '
  ./scripts/compile.sh
  rsync -az --delete ./out/ "/Volumes/Artifacts/promote/"
' || { echo "lock busy"; exit 17; }

1TB と 2TB の容量水位(ウォーターマーク)

70%
DerivedData の積極削除とログローテーションを有効化。
80%
黄信号:アーカイブ退避か上位ディスクを計画。
90%
赤信号:空きが戻るまで新規扇展開を止める。

2TB もシミュレータ積み上げで再び崖に近づきます。90% はスナップショット等を踏まえたハードストップ。IO 飽和前に 料金・プラン比較 で段階を決めます。

跨リージョン遅延の受入チェックリスト

  • SSH: VPN 経由往復中央値 70ms 未満を目安。
  • rsync: 週次で dry-run+チェックサム成功を1回。
  • Git fetch: 最大スライスが 5 分以内。

ASEAN と米西海岸を跨ぐなら近接リージョンに中継扇を置き脚を短く。日本拠点は 東京の購入ページ で台数と帯域前提を固められます。

HTTP も壁時計を切る例:

curl --max-time 8 --connect-timeout 3 -fsS \
  https://status.example.internal/artifact-ready >/dev/null

ロールアウトは「ゴールデン確定 → プロファイル rsync → flock は昇格のみ → 80% アラート → VPN 変更後に再計測」。追加ノードは 購入・デプロイ で同型を揃えます。

FAQ:運用と調達の勘所

Git で足りないか: ソースは Git。大容量成果物は rsync が現実的。

flock が常に失敗: ロック範囲が広すぎ。昇格のみに絞る。

第二リージョン: チェックリスト遅延がスプリントで2回超えたら分割し、VPN 変更後に再計測。

運用目安。 本番へは dry-run で削除を検証。数値は経路依存の目標で SLA ではありません。
並列 Mac クラスタ

同型 Mac mini M4 で扇展開 CI

裸金属を足し、rsync プロファイルで成果物を揃え、黄信号前にストレージを上げましょう。

クラスタ/並列リソースを購入 プランを比較