2026年企業Mac CI:GitLab RunnerとGitHub Actionsの裸金属共存

マルチSaaS体制ではGitLab RunnerGitHub Actions セルフホストRunner同一台の高スペック裸金属Apple Siliconに載せたい場面が増える。先にCPU・RAM・NVMeの予算を二系統で割り、シークレット境界キャッシュパスを混線させないことが成功条件だ。 関連:マネージドキューと分単位クォータの対照FAQ

1. 並行クォータ:二系統の「同時実行予算」

GitLabはRunnerの同時ジョブ数executor、GitHubはランナー当たりのジョブ同時数Organization/RepoのConcurrencyが別物。単一ホストでは合算がRAMとコアを超えないよう、数字で表にする。xcodebuildが重いなら片系統を常時1ジョブに縛るのが安全だ。

目安:合計同時数はストレージIOPSより先にメモリが壁になりやすい。

2. タグラベルルーティング:混線を防ぐ命名規約

GitLabはtags、GitHubはruns-onラベルで振り分ける。mac-ci-glmac-ci-ghaのようにプレフィックスを分離し、誤マッチで隣プラットフォームのジョブが乗らないようにする。同一ラベル名を両方で使うのは運用事故の温床だ。 関連:同一ホスト上での隔離再ビルドとCI共存の実例

3. シークレット隔離:キーチェーンと実行ユーザ

別OSユーザまたは別キーチェーンファイルで署名資格を分ける。環境変数注入はログマスクとセット。可能ならOIDCで短命トークンに寄せ、長寿命PATをホストに残さない。監査はRunner IDとジョブIDで相関できる形に固定する。

4. NVMeキャッシュ分区:DerivedDataとRunner作業領域

APFSボリュームまたはサブディレクトリ強制DerivedDataactions-runner/_work・GitLabのbuilddirを物理的に分離する。共有キャッシュは読み取り専用レイヤーに限定し、書き込みはジョブ単位プレフィックス+TTL掃除で衝突を避ける。

5. 実装FAQ

  • 優先度:夜間ヘビーとPR軽量を同一Runner名で混ぜない。
  • ポート:両Runnerの通信とローカルヘルスチェックをRunbookに明記。
  • 退避:片方メンテ時もう片方だけ残すフェイルオーバー手順を用意。

専有MacとMac miniで境界を保つ

共有ホストでは隣ジョブのNVMe尾が境界を侵す。専有Apple Siliconならクォータ表とキャッシュ分区がそのまま効く。macOSxcodebuildGatekeeper/SIP/FileVaultを一続きで説明でき、Apple Siliconの統合メモリは二Runnerの並行に向く。Mac mini M4は待機電力が低く、常時ウォームのコストを抑えやすい。

裸金属上の二系統Runnerは変数が多い。ホームで専有ノードの構成を確認し、今すぐ購入してクォータと隔離を固めるのが合理的だ。