2026 多地域リモート Mac:Jenkins/Buildkite の macOS エージェント、GitHub Actions・GitLab とのずらしキュー、リース配分

約 15 分 · MACCOME

対象読者:すでに GitHub Actions または GitLabシンガポール、東京、ソウル、香港、米国東海岸、米国西海岸 の Apple Silicon ホストで回しており、承認が重いパイプラインや連携が多いキュー向けに Jenkins または Buildkite を足したいが、二つのスケジューラが同じ NVMe と署名コンテキストを同時に飽和させたくないチームです。成果:UTC のずらし窓、能力ラベル、DerivedData の名前空間を書面化した契約に加え、予測可能なリリース尖峰にだけ 日/週単位のバーストレンタルを出す判断基準です。構成:六つの落とし穴 → 意思決定表二枚 → 貼り付け用スニペット → 六ステップ Runbook → 三 KPI → 締めの指針。セルフホストランナーのラベルおよびタイムゾーン越えリレー CIと併読してください。

別 Mac を借りるより、エージェントを増やすほうがリスクが高い理由

2026 年のリモート Mac はインタラクティブ作業、夜間 CI、署名許可リストが混在しがちです。GitHub Actions と GitLab はリポジトリイベントとキューの対応がすでに明瞭です。Jenkins コントローラや Buildkite キューを足すと、同じ実行面上に第二の制御ループが入ります。時間でずらさずパスも分離しないと重ね合わせが起き、コントローラ A はホストが空いていると見なしている一方で、コントローラ B が同一ユーザー下で四本の xcodebuild を走らせている、という状態になります。以下の六つは「セルフホストの信頼」を最も早く損なうパターンです。

  1. ラベルがプラットフォーム名であって能力ではない:macios だけでは Xcode のマイナー、署名要件、UI セッション可否を表せず、Jenkins と Actions が同じ文脈へ盲配布します。
  2. 並行上限が YAML だけに存在:ワークフロー側の max-parallel は、別コントローラが同じ macOS アカウントでジョブを起動するのを止めません。
  3. 全員で DerivedData ルートが一つ:二系統のパイプラインが同じホームを既定にするとモジュールキャッシュが壊れ、「Swift モジュールが見つからない」幽霊が出ます。
  4. UTC ではなくチャットでずらす:APAC の日中プッシュと米国のリリース窓が、凍結タグと書面の窓なしで衝突します。
  5. バーストノードが既定ラベルを共有:短期レンタルがシークレットと Xcode 確認の前にプールへ入り、承認ジョブが半設定ホストに落ちます。
  6. トポロジを無視:コントローラはソフトウェアで切り離せても、NVMe キューと Git/レジストリへの RTT は切り離せません。成果物から遠いリージョンは、ずらし失敗を増幅します。

ランナーラベルとシークレット分離がまだ文書化されていない場合は、第二のコントローラに進む前に GitHub Actions と GitLab Runner のチェックリストへ戻ってください。本稿は 再現可能ビルドのスナップショット記事と組み合わせ、コントローラごとの DerivedData 接頭辞を同じベースラインに書き込みます。

表 1:第二コントローラの適合 — 制御面がどこにあるか

アーキテクチャレビュー向けです。間隔は一般的な工学上のトレードオフであり、ベンダ SLA ではありません。

次元Jenkins(典型的なセルフホスト制御面)Buildkite(ホスト型制御面+セルフホストエージェント)Actions/GitLab との共存
キューと承認パラメータ付きリリース向けプラグインが成熟パイプラインとマルチリポジトリのキュー視認性が明確既定ラベル集合は共有しない。bk-jk- など接頭付きタグを使う
実行の結合コントローラとエージェントの版を揃えるのは利用側エージェント更新は SaaS リリースから独立して動かせる並行度を上げる前に、ずらし窓の内でエージェントを更新する
運用負荷高い(プラグイン、バックアップ、アップグレード)中程度(エージェント+ブートストラップのシークレット)どの UTC 時刻以降に誰が macOS ジョブを流せるか文書化する — 口頭だけの方針は避ける
info

注:Buildkite はキュー名とエージェントタグで親和性を表し、Jenkins はラベルとノード属性を使います。語彙は違っても目的は同じで、Xcode のメジャー/マイナー、署名要件、UI セッション方針をエンコードし、スケジューラに推測させないことです。

表 2:二重コントローラずらし下での M4 と M4 Pro の並行予算(目安)

専用ベアメタル、健全な NVMe、常駐 LLM ゲートウェイのような重いサイドカーがない前提です。自前のコンパイルグラフで調整してください。数値は計画の目安でありベンチマークではありません。

ハードウェア典型的な非 UI 並行ビルド複数 Simulator/UI テストあり六地域でのヒント
Mac mini M4重いコンパイルはおおよそ 1〜2 本+軽作業が多い重いコンパイルから UI テストを時間分割し、キュー深さを安定させる主 Git リージョンに寄せ、狭いずらし窓の中でフェッチの尾を短くする
M4 Proモジュールグラフ次第で並行 2〜3 本が多いSimulator ワーカーを増やせるが、コントローラごとにキャッシュルートを分ける必要があるリージョンが分かれるときは、長い成果物アップロードと短い内輪ビルドをリースプールで分ける

六ステップ Runbook:ラベル辞書からレビュー可能なクロージャまで

  1. ラベル辞書を凍結する:Jenkins、Buildkite、Actions/GitLab のタグと意味を列挙し、mac-01 のような即席ラベルを禁止する。
  2. Unix ユーザーまたは少なくとも DerivedData 接頭辞をコントローラごとに割り当てる:~/DerivedData-gha~/DerivedData-bk、パイプラインで -derivedDataPath を明示する。
  3. UTC のずらし窓を書く:例「Buildkite は m4-signing を UTC 10:00〜14:00 のみ」。リレー CIのビジネスタイムゾーン表と揃える。
  4. バーストレンタルは別タグにし、プール投入をゲートする:SSH、Xcode、エージェントバイナリ、シークレット注入が終わるまで burst をキューに付けない。
  5. 次節の三 KPI をアラートに接続する:ディスクキュー深さ、二系統エージェントのハートビート欠落、ずらし違反。
  6. 四半期レビュー:ビジネスがずらしルールを破った週を記録し、並行度を無秩序に上げるより M4 Pro の月次プールを増やすか判断する。
yaml
# Buildkite 例:キュー+エージェントタグ(名前空間は置き換え)
steps:
  - label: "iOS build (ずらしプール)"
    agents:
      queue: "mac-m4"
      os: "darwin"
      xcode: "16.2"
      controller: "buildkite"
    commands:
      - xcodebuild -scheme App -destination 'generic/platform=iOS' -derivedDataPath "$BUILDKITE_BUILD_PATH/DerivedData-bk"

# Jenkins:ノードラベル+パイプライン環境の DERIVED_DATA で対応

ダッシュボードに載せる三 KPI

  1. ディスクキュー深さ:IO 待ちがしきい値を数分超えたら、尾部遅延を両系統に膨らませる前に第二コントローラ側のエンキューを止める。
  2. ハートビート SLA:同一ホスト上の Buildkite、Jenkins、GitLab Runner の切断バーストを別々に数える。同時のジッターはインタラクティブログインや GPU 負荷が奪っていることが多い。
  3. ずらし違反:禁止窓に macOS プールへ入ったジョブを数え、逸話的な「Mac をもう一台」ではなく専用 M4 Pro 月次プールの根拠にする。

しきい値は経験的ガードレールであり Apple やクラウド SLA ではありません。SRE スタックと整合し、重複や沈黙アラートを避けてください。

制御論の言い方をすれば、第二コントローラは別のフィードバックループです。NVMe と署名コンテキストが共有のままなら、制御面が洗練されていても負荷下では結合します。キャッシュの論理/物理分離は、エージェントを増やすことより重要です。六地域では Git と成果物の配置も同設計し、CPU だけずらしてもリージョン横断のバルク転送は直りません。

アドホックな短期ノードが二重コントローラの背骨になりにくい理由

二重コントローラは監査可能性の要求が上がります。ずらし窓、ラベル辞書、シークレット注入順序がレビュー可能である必要があります。専用テナンシーやリース上限なしの場当たり共有は、障害対応で Jenkins と Actions を同じインタラクティブユーザーに寄せ、コンプライアンスとトリアージコストを悪化させがちです。

個人ノートと非公式共有ホストでは、安定した出口、キーチェーン境界、書面のずらし方針を同時に満たしにくいです。APAC と北米でコンパイルプールと承認/署名プールを分ける組織では、複数リージョンの足跡と月次/四半期レンタルが予測可能なガバナンス付きベアメタル Mac クラウドのほうが、アドホック調整に勝ちやすいです。MACCOME は六地域で Apple Silicon ベアメタルと柔軟なストレージ階層を提供します。並行度を広げる前にラベルでエージェントプールを分離する用途に使えます。公開のレンタル料金を確認し、成果物の経路に合う地域ページを選んでください。

パイロットの型:主 Git と主コラボの近くでホスト二台を選び、一系統だけを KPI 付きで二週間走らせ、その後に第二コントローラの窓を開ける — コントローラ変更とキャパ変更を同一リリース夜に重ねないこと。

よくある質問

Jenkins と GitHub Actions は同一 macOS ユーザーを共有できますか?

可能ですが弱い到達状態です。アカウントと DerivedData を分けてください。ノードとリースのベースラインは多地域ノードガイドを参照してください。

ビジネスがずらし窓を破りました。どうしますか?

KPI インシデントとして記録し、ラベルとキャパをレビューします。無制限並行ではなく、承認チェーン用の専用 M4 Pro 月次プールに予算を回してください。サポート:ヘルプセンター

エージェント更新と Xcode 更新は同じ夜に入れるべきですか?

避けるのが無難です。同一夜の変更はきれいな二分探索を妨げます。六ステップ Runbook の凍結順に従い、ランナーラベルのプレイブックと併読してください。