ブランチ更新のたびに古いXcode Cloudビルドが走り続け、公開用処理まで止めてよいか迷っています。
後続コミットで結果を置き換えられる検証ワークフローだけ自動キャンセルを有効にし、公開用アーカイブや再実行できない処理は無効化するか、別ワークフローに分けてください。
Xcode Cloudを管理するIT・プラットフォーム担当者は、トリガーとキャンセル対象の設計に使えます。
UIテストや回帰試験を管理する担当者は、どの結果を残すべきか判断できます。
アーカイブやTestFlight配布を運用するチームは、公開結果が中断されないか確認できます。
まず決めること:結果を置き換えられるか
自動キャンセルは、単に実行中のジョブを減らすための設定ではありません。Appleのワークフロー資料では、自動キャンセルを有効にしたワークフローで新しいビルドがキューに入ると、進行中のビルドがキャンセルされる場合があると説明されています。Xcode Cloudワークフローの設定資料で、対象ワークフローと設定内容を確認してください。
判断軸は「新しい結果が古い結果を代替できるか」です。ブランチの最新状態だけを確認する検証なら候補になります。一方、各実行に監査・診断上の価値がある処理や、配布物を作る処理は、最新コミットかどうかだけでキャンセルを決めないでください。
| ワークフローの用途 | 自動キャンセルの考え方 | 先に確認すること |
|---|---|---|
| ブランチ更新時の基本検証 | 有効化を検討 | 古いコミットの結果を破棄してよいか |
| 短時間に連続するコミットの検証 | 最新状態で代替できる場合に検討 | 各実行の診断記録が必要か |
| UI回帰テスト | トリガーを絞るか、独立ワークフローに分離 | テスト結果がチームのゲート要件を満たすか |
| アーカイブ・配布 | 無効化または検証ワークフローと分離 | アーカイブと配布の完了を個別に確認できるか |
メリットは、古い検証を後続の結果で置き換えられることです。デメリットは、キャンセルが成功や合格を意味せず、必要な診断結果まで失う可能性があることです。
ブランチ更新:置き換え可能な検証だけを残す
まず、Xcode Cloudのワークフローで何が起動条件になっているか確認します。Appleの資料では、ワークフローの開始条件を設定できるため、ブランチ変更などのイベントと対象ワークフローの対応を見直してください。ワークフローの開始条件と設定およびワークフロー戦略の設計ガイドを参照できます。
実運用では、トリガーが広すぎると、対象外のブランチやイベントでも検証が起動し、キャンセルの判断が複雑になります。対象ブランチ、変更イベント、実行するアクションを整理し、検証用ワークフローに必要なものだけを残します。ワークフローのアクションはAppleのアクション設定資料で確認できます。
注意:キャンセルされた実行は、検証に合格した記録ではありません。ブランチ保護やマージ判定で、キャンセル状態を成功扱いにしないことを確認してください。
設定後は、テスト用の変更で次の点をひとまとまりに確認します。実際にどのイベントが起動したか、実行対象のコミットが何か、新しい実行によってどのビルドがキャンセルされたか、最後に必要な検証結果が残ったかを実行記録で照合してください。表示上の終了状態だけでなく、コミット識別子とテスト結果も見ます。
連続コミット:最新の検証だけで足りるか
短い間隔で複数回プッシュされると、途中のコミットを個別に検証する価値があるかが判断点になります。ビルド可能性や基本テストを最新状態で再確認でき、途中の実行結果を保存する必要がないなら、自動キャンセルを候補にできます。
反対に、障害の再現調査、変更ごとの比較、監査記録が必要な処理では、途中の実行にも独立した意味があります。こうした処理を最新コミット確認と同じワークフローに詰め込まず、実行目的ごとに分けてください。Xcode Cloudの環境変数や実行コンテキストを調べる場合は、環境変数の公式リファレンスを照合し、ログの解釈を取り違えないようにします。
Xcode Cloudで連続コミット時に最新の検証だけを残すには
ブランチ検証の対象範囲を絞ったうえで、そのワークフローの自動キャンセルを有効にします。その後、連続した更新をテスト用ブランチで発生させ、先行ビルドのキャンセル状態と後続ビルドのコミット識別子を記録で確認します。キャンセルされた実行を成功判定に含めず、後続の検証結果だけで必要なゲートを通過できることも確認してください。
UI回帰:毎回起動させず、門番の条件を守る
複数のシミュレーターを使うUI回帰テストは、すべてのブランチ更新で必ず走らせるのではなく、変更内容やチームの判定ルールに合わせてトリガーを検討します。選択肢は、開始条件を絞る方法と、基本検証からUIテストを別ワークフローに分ける方法です。どちらを選ぶ場合も、必要な変更に対してテストが起動することを確認します。
Xcode CloudのUIテストは毎回のコミットで起動すべきか
UI変更を含む更新や、マージ前に回帰確認が必須となる更新では、必要なテストが完了する設計にします。それ以外の更新で常に起動する必要があるかは、チームのゲート要件に照らして決めてください。Appleはテストの実行結果と解釈方法をテスト結果の説明で案内しています。キャンセル済みの実行を、UIテスト合格の代わりにはできません。
公開用アーカイブ:検証と配布を分ける
TestFlight向けの配布や正式なアーカイブは、単に最新ソースを検証する処理ではありません。生成物の記録や配布状態が必要なら、ブランチ検証の自動キャンセルから切り離してください。自動キャンセルを無効にするか、公開用ワークフローを独立させるかは、既存の承認・配布手順に合わせて判断します。
Xcode Cloudの公開用アーカイブでは自動キャンセルを無効にするべきか
キャンセルによって必要なアーカイブや配布結果が失われる設計なら、無効化するか、公開処理を独立させます。公開ワークフローを開始したことや、実行が終了したことだけでは配布完了の証拠になりません。ビルド、アーカイブ、アップロード、配布先での状態をそれぞれ確認します。アプリ配布用ワークフローの作成資料とビルド状態の説明を照合し、アップロード手順はビルドのアップロードに関する案内に沿って確認してください。
混合CI:Xcode CloudとMac実行ノードの境界
Xcode Cloudで運用する処理と、固定した環境やチーム管理下の実行ノードを必要とする処理を、要件ごとに分けます。たとえば、標準的なブランチ検証はXcode Cloudに残し、社内の実行条件や個別の受け入れ確認が必要なタスクは、Mac側の独立した実行経路で扱う設計が考えられます。これは一律の移行推奨ではなく、環境要件と受け入れ条件に基づく分担です。
接続を設計するときは、どのイベントがどちらの実行経路を起動するか、成果物やログをどこで確認するか、失敗時にどの担当者が再実行するかを明文化します。Xcode Cloud側の実行記録とMac側の受け入れ記録を並べて比較し、トリガーの重複や結果の取りこぼしがないか検証してください。
自主管理のMacノードは、実行環境を細かく管理できる一方、OS更新、アクセス権、容量、障害時の復旧をチームで担う必要があります。長期にわたり高稼働で使い、物理的な接続も必要なら、Macの購入が適する場合があります。まず限定したCIタスクで遠隔Macを試すなら、MACCOMEの案内で利用方法を確認し、対象タスクを切り出して受け入れ条件を決めてください。Mac miniを使った実行環境を検討する場合は、Mac miniの注文案内も参照できます。
現在のCI構成で起きやすい問題は、実行環境の管理負担、必要なときに使えるMac容量の制約、公開処理と日常検証が同じ経路に混在することです。こうした要件を一時的に検証したい、またはチーム管理下のMac実行ノードを試したい場合は、MACCOMEのレンタルを候補にできます。安定した高稼働を長期に求める場合や、物理ポートへの接続が必須の場合は、自社購入を含めて比較し、まずは分離可能なCIタスクから評価してください。