DevOps と監査 2026年4月15日

2026 決定マトリクス:Mac mini M4 CI における lockfile ハッシュ依存キャッシュのキー設計

NodeMac Team

インフラストラクチャアーキテクト

Apple Silicon CI のスループットを壊す最速の方法は、キャッシュをGit ブランチ名で付けることだ。ブランチキーは Package.resolvedPodfile.lockGemfile.lock が静かに変わったコミット間でもグラフを再利用し、「ランダム」な赤とさらに悪いファントムグリーンを生む。2026 年は依存キャッシュをコンテンツアドレスストレージとして扱う:lockfile をハッシュし、ツールチェーンのビルド番号を固定し、キャッシュミスが健全である理由をポリシーで共有しよう。

運用コンテキスト:ディスクと成果物の保持worktree とクリーンクローンRunner アフィニティ。香港、日本、韓国、シンガポール、米国でより隔離された Mac mini M4 が必要なら 料金 を比較し、SSH/VNC のパターンは ヘルプ を参照。

lockfile ハッシュがブランチラベルに勝つ理由

ブランチラベルは「この開発ライン上のすべてが状態を共有する」と暗示する。依存グラフはラインに従わず、正確な解決結果に従う。1 つのマージでアプリのソースに触れずに推移的バージョンが上がり、バイナリは無効でもブランチ名は変わらない。lockfile をハッシュするとキャッシュヒットは証明義務になる:ハッシュが一致すれば、ツールチェーンを除いてリゾルバ出力が同一である証拠がある。

  • 再現性:監査人は緑ビルドを特定の lockfile ダイジェストと相関できる。
  • 並行 PR:同じブランチ名の 2 つの PR(fork ワークフロー)が静かに衝突しなくなる。
  • ディスク経済:ハッシュ上の LRU は「ブランチフォルダごと削除」より成長を抑えやすい。

マトリクス A:エコシステム別キー設計

エコシステム ロック入力 推奨パス接尾辞
SwiftPM + Xcode Package.resolved + Xcode build spm/<sha256(resolved)>/xc<build>
CocoaPods Podfile.lock + Ruby バージョンファイル pods/<sha256(lock)>/ruby<ver>
Bundler Gemfile.lock bundle/<sha256(lock)>
npm / pnpm package-lock.json または pnpm-lock.yaml js/<sha256(lock)>/node<major>

マトリクス B:共有キャッシュが依然として危険な場合

lockfile ハッシュが完璧でも、リストア中に post-install スクリプトが走れば救えない。スクリプト実行をサンドボックスし復元成果物を検証しない限り、これらのジョブはコールドパスとして扱う。

シグナル 方針 緩和
post_install が Pods を変更 ジョブ間でリストアを共有しない 毎ビルドでフックを実行し、ダウンロード blob のみキャッシュ
チェックサム未検証のバイナリ Pod 信頼できない入力として扱う リポジトリでコンテンツハッシュ付き vendor を固定
Fork PR ビルド キャッシュ名前空間を分離 内部モノレポのキャッシュパスを再利用しない

監査に耐える数値デフォルト

  1. ハッシュアルゴリズム:正規化した lockfile バイト列の SHA-256(CI では CR/LF 差を除去)。
  2. LRU 幅:ホスト・エコシステムごとに直近 12 ハッシュを保持。
  3. 最大経過:LRU に関わらず 14 日ヒットなしなら追放。
  4. アラート:キャッシュボリュームが専用 CI ディスクの 70% を超えたらページ。

セキュリティ注記:キャッシュはサプライチェーンの一部だ。侵害された lockfile が共有 tarball を汚染し得るなら、盲目的な再利用より一時ダウンロード+検証を優先する。

8 つのロールアウト手順

  1. 棚卸し:lockfile がコミットされていないリポジトリを特定——存在するまでキャッシュを禁止。
  2. ダイジェスト出力:すべてのビルドで後から相関できるよう CI アーティファクトとして。
  3. キャッシュマウント:SPM 解決には高速 APFS ボリュームへ。ネットワーク共有は避ける。
  4. メトリクス配線:ヒット率、リストア秒数、追放回数。
  5. 文書化:CONTRIBUTING.md にコールドキャッシュ期待を記載。
  6. Fork ワークフローを明示テスト——信頼ティアで名前空間を分ける。
  7. チェックアウト方針とペア(worktree ガイド)で二重共有を避ける。
  8. ハードウェア拡張:追放スラッシング時は NodeMac がリージョンごとに専用 M4 を追加——調達遅延なし。

FAQ

ブランチ名キャッシュがファントムグリーンを招くのはなぜ?

lockfile 変更をまたいでバイナリを再利用するから。lockfile をハッシュし、ヒットはリゾルバ出力の一致を意味させる。

SPM と DerivedData は同じキー?

いいえ——関心の分離。SPM は解決、DerivedData はコンパイル索引でジョブやツールチェーン次元を含める。

剪定の頻度は?

上限付き LRU と最大経過追放。常にディスクアラートと結びつける。

誠実なキャッシュのための専用 Mac mini M4

ホストごとに信頼ティアを分離し APFS を高速に保ち、共有ノート PC の謎バイナリと戦わない。

NM
NodeMac Cloud Mac
5分でデプロイ

クラウド専用 Apple Silicon Mac。SSH/VNC 即時接続、HK·JP·SG·US ノード対応。

今すぐ始める