2026 Mac クラウドで GitLab Runner(macOS)を運用:登録トークン、Executor、安全な並列数

Linux で Docker executor に慣れたチームほど、macOS では「アーキテクチャ不一致」「tags が合わず pending」「concurrent を上げすぎて DerivedData とキーチェーンが壊れる」でつまずきます。本稿は SSH 可能な Mac クラウドを GitLab のラベル付き容量として扱う前提で、Linux との差分、4 つの典型痛点、shell と custom の判断表、登録からスモーク job までの 5 ステップ、容量会議に貼れる硬指標、FAQ をまとめます。2026 年時点の Runner と GitLab の互換は必ず公式表で確認してください。

2026 年、Mac クラウド上で GitLab Runner と CI 並列を設計する開発者のイメージ

要点

1. 要約:Linux 習慣との差

Linux ではコンテナ境界で依存とファイルを隔離できます。macOS の xcodebuild は同一ユーザ空間で DerivedData・モジュールキャッシュ・キーチェーンを共有し、並列を CPU 数に合わせて上げるとリンクエラーやコンパイラ OOM がランダム赤として現れます。darwin-arm64 の GitLab Runner バイナリを誤って amd64 で動かすと、Rosetta 経由のツールチェーン混在で再現性が崩れます。目標は .gitlab-ci.ymltags と Runner 登録 tags を一字一句揃え、concurrent とクリーンアップを config.toml に残し口頭運用をやめることです。Mac クラウドはオフィス Mac の睡眠や出張リスクを避け、VPS と同様に SSH とラベルで水平拡張できることが強みです。

2. 痛点:トークン、tags、キーチェーン、ディスク

  1. 登録スコープ:インスタンス用とプロジェクト用トークンを取り違えると Runner が別階層に現れ、ローテ後に config.toml 未更新だと online だが job を取らない状態になります。
  2. tags ドリフト:YAML が macos-ios、Runner が macos-arm64 だけ、などミスマッチで永久 pending。再インストールのたびに README を更新しないと再発します。
  3. 署名と非対話セッション:shell executor はログインキーチェーンの前提が崩れるとコード署名が途中で消えます。CI 専用ユーザとパーティション設計が必要です。
  4. ディスク競合:並列 job が同じ DerivedData ルートを掃除し合うと中間成果物欠落で不安定化します。パス分離とタグ別プールが効きます。

3. shell と custom executor の判断表

観点shellcustom / 外部隔離
立ち上がり数時間単位でスモーク可能数日〜数週の整備が現実的
隔離弱い(同一ユーザ)ワークスペースや VM で強化可能
署名ログイン文脈と揃うと簡単シークレット注入設計が要る
並列戦略concurrent と tags で厳格化ホスト/ディレクトリ単位で分割しやすい
ディスクパス規約+定期クリーンジョブ後フックで消去やスナップショット
向く規模中規模以下の iOS 中心 CIマルチテナントや強いコンプライアンス
ヒント:custom を回せる前は、tags で PR と Archive を分け、concurrent を保守的に保ち、DerivedData ルートを固定する方が総コストで勝ちやすいです。

4. 登録から green job まで 5 ステップ

  1. インストール確認darwin-arm64gitlab-runner を配置し、uname -m と突合。Rosetta 下の amd64 ツールチェーン混在を禁止リストに入れる。
  2. register:正しいトークンで gitlab-runner register。将来の YAML と同じ tags を入力し、config.toml[[runners]] が増えたか確認。
  3. executor と concurrentexecutor = "shell"concurrent は 1〜2 から。PR 用 Runner 名とリリース用を分離。
  4. スモーク YAMLsw_versxcodebuild -version のみの job で tags ルーティングと成果物を検証。
  5. クリーンアップと閾値:DerivedData/キャッシュパスを文書化。空き容量アラート。夜間バッチやパイプライン末尾で掃除。
stages: [verify] mac-smoke: stage: verify tags: [macos-arm64, ci-pool-dev] script: - sw_vers - xcodebuild -version
concurrent = 2 check_interval = 0 [[runners]] name = "mac-cloud-pool-dev" url = "https://gitlab.example.com/" token = "REDACTED" executor = "shell"

5. メモリ・ディスク・並列の硬指標

中規模 Swift/iOS を想定した目安で実測必須。レビューでは p95 とキュー待ちを分離し、Runner 追加か concurrent 抑制かを判断。スワップ時はリンク尾が伸びやすいです。

6. Linux のみでは足りない理由と専用 Mac クラウドの価値

Linux Runner 群だけではネイティブ Xcode 署名と Apple 公式ツールチェーンを完走できません。ノート PC を借りる方式は可用性と監査で破綻しやすく、非 Apple ハードでの近似はライセンスと性能の壁があります。無人署名、Xcode 微バージョン固定、企業出口とレジストリ整合が必要なら、SSH と tags で増やせる専用 Mac クラウドを GitLab プールに載せるのが総保有コストで有利なことが多いです。Docker 風の隔離は macOS で価値がありますが運用面も増えるため、まずはネイティブ Mac クラウドで並列とディスクを制御する方が現実的なチームも多いです。開通を API 体験に近づけるには VPSMAC の 90 秒 API と CI/CD 連携記事で、発注から green までを一気通貫で設計してください。