プラットフォーム/モバイルのリードが 2026 年に iOS/macOS ビルドをリモート Mac へ移すとき、典型の出だしは「まずランナーを登録し、方針はあと」です。その結果、ラベルが曖昧になり、ディスクを圧迫する並行度になり、署名コンテキストが絡み合います。本稿はシンガポール、東京、ソウル、香港、米国東海岸、米国西海岸でノードを選ぶチーム向けに、痛みの分解、制御面の比較表2枚、貼り付け可能なワークフロー断片、6ステップの手順書、監視指標3つを示します。マルチプロジェクト容量およびCI 向け SSH と VNCの各記事と相互に参照し、CI レビューと発注判断に使います。
セルフホストランナーは、オーケストレータに実際の macOS 実行面を晒します。GitHub Actions はリポジトリ/組織レベルのランナーを使い、GitLab はエグゼキュータ種別つきのプロジェクト/グループランナーを使います。ラベルが汎用のまま(mac、ios など)だとワークフローが同一ホストを奪い合い、DerivedData と IO のホットスポットが積み上がり、失敗は明確なリソース圧ではなくランダムなタイムアウトに見えます。ホストを足したりいきなり M4 Pro に飛ぶ前に、次の6つの痛み分類へ分解してください。
clean が並行プロジェクトを巻き込みます。.xcarchive や依存キャッシュの移動がマシン代の節約を帯域と時間で相殺します。次の表でランナー役割と GitHub/GitLab の差を議論可能にし、そのうえで YAML を写し、実行ステップに落とします。
スコープの切り分けは次のとおりです。マルチプロジェクトの記事はキューとレンタル配分を扱い、本稿はMac を登録し、ワークフローが確実に正しい環境へ当たるようにすることです。表1はアーキテクチャレビューで使います。
| 観点 | 共有ランナープール | 専用ビルドホスト |
|---|---|---|
| 典型ジョブ | Lint、単体テスト、軽い xcodebuild、本番署名なし | アーカイブ、TestFlight アップロード、マルチシミュレータ行列、厳格な署名 |
| ラベル | 細かい粒度:macos-14、xcode-16、no-signing など、合成可能 | プロジェクト専用タグ。他リポジトリが runs-on で乗れないようにする |
| 並行度 | 控えめな並列+キューあふれはバーストホストへ | 並列はディスクのテレメトリに束ね、飽和より安定を優先する |
| シークレットとアカウント | 専用 CI ユーザー、キーチェーンまたはプロファイル戦略で分割 | 固定の署名身分、ローテーション責任者、監査証跡 |
| 向くとき | 結合が低く、短いキューが許容できる | コンプライアンス、顧客納品、再現性の要るリリースゲート |
いずれもリモート Mac を動かせますが、シークレット注入、ランナー可視性、キャッシュの習慣は異なります。表2はプラットフォームとエンジニアリングの語彙を揃えます(フィールド名は各ベンダーの現行ドキュメントで確認してください)。
| 観点 | GitHub Actions(セルフホスト) | GitLab Runner(shell/ssh) |
|---|---|---|
| スケジューリング | リポ/組織ランナー+ runs-on: [self-hosted, …] | tags の一致+登録スコープ(プロジェクト/グループ/インスタンス) |
| シークレット | Secrets/Variables、Environments。短命クラウド資格は OIDC | CI/CD 変数、マスク変数。グループ継承と保護ブランチに注意 |
| 並行度のつまみ | 行列ジョブはランナー側のプロセス上限を自前で課す | concurrent とランナー単位設定。分離なしに同一ユーザーへ複数エグゼキュータを載せない |
| よくある落とし穴 | セルフホストが対話ログインの環境変数を引きずることがある | 複数ランナープロセスが Xcode ライセンスやポートを奪い合う |
# GitHub Actions:汎用 macOS ではなく能力ラベルにジョブを束ねる
jobs:
ios_build:
runs-on: [self-hosted, macOS, xcode-16, m4-ci]
concurrency:
group: ios-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_16.app
# GitLab CI:tags がリモート Mac 上のランナーに写る
ios_build:
tags: [macos, xcode16, m4-ci]
script:
- xcodebuild -version
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
注:ラベル名は社内 Runbook に Xcode パス、署名の可否、最大並列ジョブ数とともに登録し、古いワークフローのコピペだけに頼らないでください。
リージョンの事前作業はマルチリージョンガイド、接続の選択はCI 向け SSH と VNCを前提とします。
Grafana、Datadog、週次レポートに貼れるフィールド名の例です。
専用ホストで2週間安定したら、重い行列用に第2ノードや M4 Pro を検討します。
運用補足:xcodebuild と Swift Package の解決がネットワークとディスクを同時に飽和させると、P95 はコンパイラ吞吐だけでなくインデックスとキャッシュ書き込みから伸びがちです。CPU だけでなくキュー長とディスク await を並べて見ます。ランナーのオンライン時間をレンタル請求と紐づければ、財務が「なぜ専用が要るか」を説明できます。さもなければ共有プール論争が証拠なしに繰り返されます。
ネスト仮想化は Metal、署名、USB ワークフローに摩擦を足します。個人ノートはスリープと更新が無人ジョブを壊します。本番相当の Apple Silicon には、ランナーラベルと並行度を運用ベースラインに落としたうえでのベアメタル専用、選べるリージョン、合成可能なレンタル条件が向きます。
断片化したデスクトップだけでは、長寿命ゲートウェイ、AI エージェント実行層、マルチリポジトリ CI を支えにくく、権限プロンプトと突発 OS 更新が自動化をランダム失敗にします。MACCOME は複数リージョンのMac mini M4/M4 Proベアメタルを柔軟な期間で提供し、セルフホストランナーのベースライン実行層と受け入れ済みバースト容量として使えます。リージョン、SSH/VNC、マルチプロジェクトの各記事のあと、料金ページでパッケージを揃え、成果物パスに合うリージョンを注文します。
主成果物リージョンで短いレンタルを試し、月次から四半期へのベースライン拡張はその後に判断します。極短いピークは日次/週次バーストで吸収し、誤ったティアにキャッシュフローを閉じ込めないでください。
よくある質問
先にランナーですか、ラベルですか?
まずラベルの意味とランナーあたりの並列度を固定し、キューとディスクを観察します。レンタル料金を開き、マルチリージョン選定と合わせてください。
GitHub と GitLab のシークレットで一つに揃える要点は?
長寿命シークレットは git に置かず、署名は別 macOS ユーザーで分離します。接続パターンはCI 向け SSH と VNCを読み、ヘルプセンターも参照してください。
並行プロジェクトではほかに何を読みますか?
マルチプロジェクト容量とレンタル配分でランナー役割をマイルストーンに揃えます。