症状:開発者数に合わせてMacを増やしたのに、PRの待ち時間やリリース前の署名待ちが解消しない。
最短解法:Xcode 27 企業 CI 並行容量を、人数ではなくピーク同時実行数、タスク種別、単一タスクの占有時間、署名分離で計算します。安定した基礎負荷は固定Macノード、変動するピークはリモートMacの弾性容量に分け、固定プールと弾性プールを組み合わせる構成が安全です。
この記事の対象者
Xcode 27への移行とApple Siliconビルド機の予算を決める技術責任者向けです。
GitHub Actions、JenkinsなどのCI基盤でキューを管理するチームは、実測値を必要ノード数へ変換できます。調達担当者は、容量の証拠、拡張条件、撤退条件を確認できます。
Xcode 27の容量計画で最初に分けるべき指標は何か?
Xcode 27はApple silicon Macでのみインストールおよび実行できます。これは、Intel Macを単純に増設する計画が成立しないことを意味します。Appleの公式リリースノートでこの実行要件を確認したうえで、対応ノードの台数ではなく、どの種類のジョブがいつ集中するかを測ってください。
AppleのXcode 27リリースノート
典型的な失敗は、開発者が増えたためMacビルドノードも同じ割合で増やすことです。実際には、PRビルド、夜間回帰、シミュレーターによる並列テスト、アーカイブと署名、正式リリースで占有時間と排他条件が異なります。
容量は次の変数に分けて記録します。
- 到着率:一定時間内にCIへ入るジョブ数
- 実行時間:キューから取り出して完了するまでの時間
- ピーク窓:ジョブが集中する時間帯
- 再試行率:失敗後に再実行される割合
- 署名ロック:同時に処理できない証明書やプロビジョニング資産
- 待ち時間:ジョブ投入から実行開始までの時間
- 依存関係:プライベートリポジトリ、パッケージ、社内APIへの接続条件
「Xcode 27の企業CIにMacビルド機は何台必要か」という問いには、人数だけでは答えられません。保有人数ではなく、ピーク時の同時実行タスク数と1タスクあたりの占有時間を記録して初めて、必要台数を算定できます。
並行数とキューをどう計算するか?
iOS CI/CDの並行ビルド容量は、保有ノード数ではなく、ピーク時に同時に処理したいジョブの数から始めます。保守的な計画では、保底並行数、ピーク並行数、安全余裕を別々に定義します。
保底並行数 = 平常時に同時処理するジョブ数
ピーク並行数 = ピーク窓に到着するジョブ数 × 平均実行時間
必要容量 = ピーク並行数 + 再試行分 + 障害時の余裕
ここで「平均実行時間」を使うだけでは不十分です。PRの小さな増分ビルドと、クリーンビルド、テスト、アーカイブを混ぜると、短いジョブが長いジョブの後ろで待たされるからです。タスク種別ごとに到着率、実行時間、同時実行数を分けて集計してください。
最低限、CIから次の記録を抽出します。
- ジョブ投入時刻と実行開始時刻を保存します。
- 実行開始時刻と終了時刻から占有時間を計算します。
- PR、回帰、テスト、署名、リリースの種別を付与します。
- ピーク窓のキュー長と再試行数を分けて集計します。
- 署名ロック、キャッシュ欠落、ネットワーク待ちを失敗原因として分類します。
- 直近の実データから固定容量と弾性容量の境界を決めます。
GitHub Actionsを使う場合は、ジョブごとに適切なRunnerへ振り分けます。GitHubの公式ドキュメントには、Xcode 27を示すxcode-27ラベルとarm64 Runnerの選択方法が記載されています。ただし、イメージの状態、公開範囲、組織の同時実行上限、料金条件は変わり得るため、導入日に公式資料を再確認してください。
Runnerの選択方法とラベル
GitHub Actionsの制限事項
ノードを増やすべきか、単一Macを高性能化すべきか?
単一タスクの時間短縮と、チーム全体のスループット増加は別の効果です。高性能なMacへ交換して1ジョブが速くなっても、署名処理や共有キャッシュが排他状態なら、キューのピークは残ります。
| 観測された症状 | 主なボトルネック | 優先する対策 |
|---|---|---|
| CPU使用率が高く、同じジョブが長時間占有する | 単一タスクの計算量 | Apple Siliconノードの基準構成を再評価 |
| CPUに余裕があるのにキューが伸びる | ノード数またはルーティング | Macビルドノードを増やし、タスクを分散 |
| クリーンビルドだけ遅い | キャッシュ、依存関係、ワークスペース | キャッシュ命中率とチェックアウト時間を分離測定 |
| 署名ジョブだけ止まる | 証明書、鍵、公開処理の排他 | 署名専用プールへ分離 |
| リモートノード追加後に失敗が増える | 環境再現、私設ネットワーク、資格情報 | イメージ、接続、秘密情報の受け渡しを検証 |
基準テストは同一コミットで揃えます。クリーンビルド、増分ビルド、並列テスト、アーカイブ、署名を別ジョブとして実行し、実行時間、キュー時間、CPU、メモリ、キャッシュ状態、失敗理由を記録します。構成や性能の具体値は、企業の実記録または自社の実測なしに一般化しないでください。
Apple Silicon CIノードの台数を増やす条件は、CPUやメモリが飽和した場合だけではありません。ピーク窓のキューが許容値を超え、キャッシュやネットワークを改善しても待ち時間が戻らないなら、並行容量を追加します。一方、ジョブの大半が依存関係取得や署名待ちなら、ノード追加よりパイプライン分割が先です。
固定プールと弾性プールをどう分けるか?
Mac打包サーバーをピーク並行数だけ用意すると、平常時に容量が余ります。反対に、平常負荷だけで台数を決めると、リリース前のキューが急増します。そこで、役割ごとにプールを分けます。
| プール | 主な入口 | 分離する資産 | 拡張・復旧の条件 |
|---|---|---|---|
| 共有ビルドプール | PR、増分ビルド、通常テスト | ワークスペース、キャッシュ、ログ | キュー長と待ち時間を基準に増設 |
| 署名プール | アーカイブ、配布用パッケージ | 証明書、秘密鍵、プロビジョニング資産 | 通常ジョブから隔離し、失敗時は別ノードへ切替 |
| 弾性ピークプール | 夜間回帰、移行試験、リリース集中 | 一時ワークスペース、短期資格情報 | 起動時間、環境再現、私設接続を事前確認 |
| 災害復旧用プール | 主要ノード停止時の代替 | 最小限のソースと署名手順 | 定期的な再構築と切り戻しを実施 |
リモートMacは、Xcode 27で発生するビルド待ちを解消する手段になり得ます。ただし、ノードが利用可能になった時点で容量が完成するわけではありません。Xcodeの導入、依存関係の取得、キャッシュの再生成、社内ネットワーク接続、秘密情報の注入に時間がかかれば、名目上のノード数より実際の処理能力は小さくなります。
GitHub-hosted Runnerや大きなRunnerを使う場合も、料金だけで判断しないでください。Runnerのサイズ、arm64対応、同時実行、利用時間、組織側の制限を確認し、単位ジョブの費用へ変換します。公式の大きなRunner仕様とActions料金は、契約時点のページで確認してください。
大きなRunnerの仕様
Actions Runnerの料金
条件分岐で選ぶ容量構成
- 平常負荷が安定し、毎月のジョブ量を予測できるなら、固定Macノードを基礎容量にします。
- ピーク窓だけキューが伸び、通常時に余剰が出るなら、固定プールへリモートMacの弾性プールを追加します。
- 署名資産を通常ジョブと共有しているなら、台数を増やす前に専用署名プールへ分離します。
- 起動後の環境構築が長く、私設ネットワークへ接続できないなら、弾性ノードを本番の保底容量にしません。
- 固定ノードが停止してもリリースを継続する必要があるなら、代替ノードの再構築と切り戻しを先に検証します。
- 長期的に常時稼働する負荷なら、単位タスクコストと保守費を比較し、固定購入、レンタル、ホステッドRunnerを再計算します。
単位タスクコストで調達案を比較する
企業Mac基盤のTCOは、端末価格だけでは比較できません。固定購入では減価、保守、交換、空き容量、担当者の運用時間を含めます。リモートMacでは利用時間、初期環境の受け渡し、データ転送、接続経路、停止時の代替策を含めます。ホステッドRunnerでは実行時間、Runner種別、同時実行枠、キャッシュとアーティファクトの扱いを確認します。
単位タスクコスト
= 固定費の按分
+ 稼働時間に応じた費用
+ 運用・保守費
+ 失敗再実行の費用
+ 待ち時間による開発コスト
| 利用状況 | 第一候補 | 理由 | 見直す条件 |
|---|---|---|---|
| 基礎負荷が安定 | 固定Macノード | 空き容量を抑えやすく、環境を固定しやすい | 稼働率が低い、更新負担が増えた |
| 短期移行や試験 | リモートMacの弾性容量 | 購入前に実際のキューと環境適合性を確認できる | 起動、接続、復旧の実測が基準未達 |
| リリース時だけ集中 | 固定プール+弾性プール | 平常時の余剰を抑えながらピークに対応 | ピークが恒常化した |
| CI停止時の代替 | 予備のリモートMacまたは別プール | 再構築手順を検証しやすい | 署名資産や社内接続を移せない |
Macの調達条件を確認できるKVMNODEの案内を使う場合も、掲載条件だけで台数を決めないでください。自社のジョブ実行時間、同時実行数、データ保持要件、接続経路を渡し、容量試験の条件として確認する必要があります。Apple Siliconの購入とレンタルを比較する場合は、Mac miniの調達判断も、地域、納期、保守、撤退条件を含むTCO表に落とし込んでください。
放量前に確認する受け入れ基準
「ノードがオンラインになった」だけでは、企業CIの受け入れ条件を満たしません。実際のリポジトリと実際の署名フローで、ピーク時のキュー、成功率、環境再構築、再試行、切り戻しを確認します。
- 代表的なコミットを固定し、クリーンビルドと増分ビルドを実行します。
- 並列テスト、アーカイブ、署名、正式リリースの経路を別々に測定します。
- 通常負荷とピーク負荷で、待ち時間、実行時間、失敗率を保存します。
- ノード再起動後にXcode、依存関係、証明書、キャッシュを再現します。
- 弾性ノードを追加し、ジョブのルーティング、私設ネットワーク、ログ保存を確認します。
- 追加容量を停止し、固定プールだけへ安全に戻せることを確認します。
判定は4種類に分けます。
- 合格:ピーク時も許容待ち時間内で、署名分離と復旧が成立します。
- 期限付き改善:ビルドは通るものの、キャッシュ、ログ、再構築に未解決項目があります。
- 弾性ノード追加:基礎容量は足りていますが、特定のピーク窓だけキューが超過します。
- 調達延期:実行環境を再現できない、署名を隔離できない、または切り戻せません。
GitHub Actionsの同時実行制御を使う場合は、同じ環境を奪い合うジョブを適切に直列化します。リリースや署名を無制限に並列化すると、ノードを増やしても資産ロックがボトルネックになります。
ワークフローの同時実行制御
再確認のタイミング
最終確認日は2026年9月23日です。Xcode 27の公式リリースノート、Runnerのラベルとイメージ、arm64対応、組織の同時実行制限、料金を、導入直前に再確認してください。料金や利用量の把握方法はActionsの利用量と請求に関する公式説明を基準にします。
Xcode、macOS、Runnerイメージ、課金条件、社内CIのジョブ構成が変わった時点で、同じ測定表を再実行してください。容量計画を年次予算だけで固定せず、ピーク並行数、失敗再実行、署名待ち、弾性ノードの復旧時間を更新する運用にします。
企業Macの購入だけに依存すると、ピーク用の余剰容量、故障時の交換、設置場所、保守担当、固定資産化が負担になります。一方、CIホステッドRunnerだけに寄せると、料金変動、同時実行枠、社内ネットワーク接続、署名資産の隔離が制約になりやすいです。短期の移行やリリース集中を先に検証するなら、KVMNODEのリモートMacを弾性プール候補として比較し、実際のジョブ記録で採否を判断する方が、固定ノードを過剰購入するより安全です。
まず基礎負荷、ピーク並行数、署名分離、リリース時間帯を測定表にまとめてください。そのうえで、固定プール、弾性プール、予備容量を含むPoC条件を作り、料金だけでなく、環境再構築と切り戻しまで確認してから本契約へ進むのが適切です。