2026リモートMacXcodeDerivedDataccachesccachersyncSFTP

2026 リモートMac:Xcode DerivedData と ccache/sccache 同期、SFTP、rsync 増分、ロックと並行の決定マトリクス

Apple Silicon 向けに DerivedData やコンパイラキャッシュを WAN 鏡像するとき、方針がないと ロックsqliteマトリクス が rsync 成功の陰で衝突します。ccachesccache のみ運ぶ条件、剪定 DerivedData、GUI SFTP と自動化の差を整理し、APFS/rsyncSHA256並行 SFTP署名へ接続し、SFTPMAC ホスト型で運用が現実化する視点で締めます。

DerivedDataccachesccachersyncリモートMacCI
2026 リモートMac Xcode DerivedData ccache sccache rsync SFTP 並行 ロック CI

痛み:キャッシュ同期は二級問題ではない

痛み1:DerivedData を静的フォルダ扱い。中間インデックスやモジュールキャッシュ、Swift フロントの一時状態は rsync 成功中でも半整合のままになり、再コンパイルのランダム成功が構造レースを隠します。

痛み2:コンパイラキャッシュとワークスペース全体を同一プロファイルで扱う。ccachesccache は形が読みやすい一方、DerivedData は Xcode マイナー、Swift ツールチェーン、プラグイン、フラグに強く結びつき、アップグレード後に一つの rsync 設定が突然壊れます。

痛み3:同一ボリューム上で CI マトリクスが重なる。sqlite とロックディレクトリで衝突します。SSH 転送層の健康はコンパイル層の健康を意味しません。

痛み4:APFS 意味論を無視。xattr と権限はコピーでも噛む。APFS マトリクス を先に。

痛み5:汚キャッシュのプレイブック欠如。毎時全削除か永遠に温存かの極端に寄りがちです。番号付きロールバックカードを 成果物マニフェスト と整合させ、キャッシュはボリューム差分で扱います。

痛み6:GUI SFTP を本番同期にする。スポット向き。鍵ピンOIDC とセットで。

痛み7:成果物昇格とキャッシュウォームを混線。署名ツリーは揮発キャッシュと同一ルートを共有しない。

脅威モデル:二つの信頼鎖

成果物は監査と暗号検証、原子リリース ロールバックを要求します。キャッシュは失敗してよいが署名バンドルを汚してはいけません。

ボリュームや SSH アカウントで物理分離すると調査が速いです。WAN はスキャンコストを増幅するためレーン別に帯域を見積ります。驱逐は権限とチケットを明文化し、partial 残骸は容量監視します。

四半期にロールバックカードを演習し、可観測性でコールド/ウォーム/劣化をラベルします。

測れる基線:議論を終わらせる

クリーンとウォーム、ccache 命中率、sccache キュー、DerivedData 傾き、終了コード、partial 残骸、並行数、フレーク密度を追跡します。

Xcode 更新後はゴールデンプロジェクトと rsync --version をログに紐付け、時間をスキャン・デルタ・ネット・fsync に分解します。

キャッシュ異常が鍵ローテと同週なら設定変更の重複を疑います。キャッシュDIRを状態機として扱い、FinOps は egress と ingress を分勘定にします。

決定マトリクス:コールド、コンパイラのみ、剪定 DerivedData、フルミラー、専用ボリューム

モデル向くケース利点リスク
同期なし、リモート単体ビルド小規模・低頻度最も単純コールドスタートが遅い
ccachesccache ルートのみClang 重視で驱逐許容境界が明確アップグレード後の衛生が要る
選定 DerivedData サブツリーSPM 解決の痛み、除外管理再フェッチ削減レイアウト結合が高い
フル DerivedData ミラー単一ライターのメンテ窓最大増分再利用ロックと索引衝突が最大
ジョブ/チーム専用 SSD共有プール隔離とクォータコストと自動化負荷

キャッシュ汚染が署名成果物に届き得るならアカウント分割を即実行し、codesign Runbook のチェックポイントで削除範囲を演習します。

手順:貼り付けて調整するコマンド骨格

# Per-job cache root (example)
# export CACHE_ROOT=/Volumes/cache/job-${CI_JOB_ID}
# mkdir -p "$CACHE_ROOT/ccache" "$CACHE_ROOT/DerivedData"

# rsync compiler cache only
# rsync -a --partial --partial-dir=.rsync-partial \
#   ./ccache-dir/ user@remote-mac:"$CACHE_ROOT/ccache/"

# Trimmed DerivedData with aggressive excludes (verify paths)
# rsync -a --partial --partial-dir=.rsync-partial \
#   --exclude '**/ModuleCache.noindex/**' \
#   ./DerivedData/SubTree/ user@remote-mac:"$CACHE_ROOT/DerivedData/SubTree/"

# Artifact lane still runs checksum manifests
# shasum -a 256 -c manifest.sha256

# Dirty-cache rollback for one job
# ssh user@remote-mac "rm -rf \"$CACHE_ROOT\""

スニペットは再利用アクションに包み、除外と CI 鍵ピン を同じレビューで見直します。

読む順番と CTA の揃え方

この記事の後に APFS整合性並行 SFTP署名原子リリース、最後に ホーム で容量計画へ。

飛ばし読みは偽のトレードオフを生みます。キャッシュルート・除外・ロールバック ID を明示し、オンロールはキャッシュ事故をネットと同格の Runbook に載せます。

FAQ と SFTPMAC のホスト型リモートMac

毎晩フル DerivedData は合理的か

専用窓と単一ライターのみ。日中のマトリクス重複は衝突リスクが残ります。

Redis は必須か

いいえ。ただし集中バックエンドの方がメトリクス化しやすく、分断時の降格を定義してください。

キャッシュ失敗でリリース停止か

成果物はチェックサムと署名で止める。キャッシュはコールドへ落としラベルで劣化を示す。

IDE ウォッチャとの関係は

本稿はコンパイラキャッシュ整合性が焦点。エディタ通知は別記事の範囲です。

まとめ:2026 年のリモートMacリンクで Xcode キャッシュを動かすにはジョブ隔離、信頼鎖分離、明示ロールバックが要です。フルミラーよりコンパイラルートを優先してください。

限界:自前フリートはボリュームと口座と監視と掃除を常に調整し、人員交代で方針が静かに漂流します。

SFTPMAC:ホスト型リモートMacは安定した Apple ビルド面と運用可能な転送レーンを束ね、署名成果物の出荷に集中させます。

アカウントレベルでキャッシュと成果物を分離すると、クォータと監査と回帰サンプルが揃えやすくなります。