ジョブ終了後にRunnerは自動注销されたのに、Macの作業ファイルやキーチェーンが残っている。
最短の解決策は、外部コードや通常テストを一時Runnerへ分け、署名・外部デバイス・固定環境だけを権限限定の常駐Runnerへ残す双轨構成です。
この判断は、Mac Mini M6のGitHub Actions Runnerを導入するプラットフォーム担当者、iOS・macOSのビルド基盤を管理するチーム、必要なノード数と拡張方法を決める技術責任者向けです。AppleはMac mini M6を発表していますが、2026年9月7日時点では初回出荷前のため、M6固有のリセット時間、キャッシュ効果、同時実行性能は確定していません。Appleの発表と実機検証を分けて考えてください。
判断の前提
GitHub Actionsでは、ジョブ終了後に登録を解除する一時Runnerが、自動拡張を行う構成の安全策として推奨されています。GitHub公式の自托管Runner文書でも、一時的なRunnerを使う場合のライフサイクルとログ保存が説明されています。
ただし、ここでいう「一時」はGitHub上のジョブ実行単位です。Mac本体のディスク消去、ユーザーセッションの終了、キーチェーンの破棄、OSイメージの復元が自動で行われるという意味ではありません。Runnerの注销だけを完了条件にすると、次のジョブが前のジョブの成果物や認証情報を読める危険があります。
Mac Mini M6のGitHub Actions Runnerを選ぶときは、次の3点を別々に評価します。
- コードの信頼境界。外部コントリビューターのプルリクエストを実行するか。
- 環境の再利用価値。Xcode、依存パッケージ、シミュレーター関連データを保持したいか。
- 保護対象の有無。署名証明書、秘密鍵、実機、固定ネットワークを使うか。
チーム別の構成判断
個人開発と信頼できるプライベートリポジトリ
タスクの発生元が自分の管理下にあり、並列実行が少ない場合は、常駐Runnerの方が保守しやすい場合があります。Xcodeやパッケージのキャッシュを維持しやすく、毎回の初期化処理も減らせるためです。
ただし、プライベートリポジトリだから全コードが安全とは限りません。依存パッケージ、Pull Requestの作成者、ワークフローの変更権限を確認し、ジョブごとに作業ディレクトリを清掃してください。GitHubも自托管Runnerへ投入されるコードと秘密情報の扱いについて、安全な利用方法を明示しています。
常駐を選びやすい条件
- 固定されたリポジトリだけを処理する。
- 署名情報を使わない通常のビルドが中心である。
- 失敗時に担当者がMacへ接続して復旧できる。
- 作業後の清掃とRunnerの再登録を自動化できる。
外部貢献を受けるオープンソースチーム
外部からのプルリクエストでは、ビルドスクリプトや依存処理がRunnerの権限範囲で実行される可能性があります。常駐Macにアクセストークン、SSH鍵、署名証明書が残っていると、ジョブの失敗がそのまま情報漏えいにつながります。
この場合は、ジョブごとに一つの実行環境を割り当て、終了後にRunnerを登録解除する設計を優先します。ただし、登録解除後にMacを信頼済み状態へ戻す処理が必要です。作業領域、DerivedData、パッケージキャッシュ、ログ、キーチェーンを消去できないなら、物理Macを「一時」と呼ぶべきではありません。
GitHub Actionsのワークフローで自托管Runnerを指定する方法は、公式のワークフロー設定文書で確認できます。ラベルの付け方だけで信頼境界が完成するわけではないため、リポジトリ、Runnerグループ、秘密情報の公開範囲も分けてください。
高頻度ビルドを行う小規模モバイルチーム
ビルド回数が増えると、常駐キャッシュの利点と環境漂移のコストが同時に現れます。キャッシュを残したMacは速く見えても、前のジョブの生成物や異なるXcode設定が次のジョブへ影響し、再現性を失うことがあります。
通常のコンパイルと単体テストは一時またはリセット可能な実行プールへ送り、配布用の署名処理は別のラベルへルーティングしてください。待ち時間、処理時間、失敗後の再実行回数を同じ期間で記録し、追加ノードが待ち時間を下げるか確認します。Apple Silicon向けアプリの互換性については、Appleの移行ガイドも確認対象になります。
署名とリリースを担う管理チーム
署名証明書や秘密鍵を、すべての一般Runnerへ配置してはいけません。リリース対象のリポジトリ、ブランチ、ワークフローの発行元を限定し、通常テスト用Runnerから署名用Runnerへジョブが勝手に流れないようにします。
一時Runnerで署名する設計も不可能ではありませんが、秘密情報の注入、キーチェーンの作成、署名処理、破棄、監査ログ保存を一連の証拠として確認できることが条件です。破棄の成功を検証できない段階では、権限を絞った常駐Runnerを少数維持する方が現実的です。
常駐署名Runnerの弱点は、長時間稼働による状態の蓄積です。OS更新、Xcode更新、証明書更新、失敗後の隔離を担当者任せにせず、検証用の再起動と復旧手順を決めてください。共有署名環境の受け入れ条件を整理する場合は、Mac共有署名環境の確認方法も運用項目の洗い出しに使えます。
大規模なプラットフォームチーム
プロジェクト数が多い場合、ノードの追加だけでは拡張できません。Runner登録、ラベル付与、ジョブログの外部保存、OSイメージ、失敗ノードの回収を同じ制御面で扱う必要があります。
GitHubのREST APIには、自托管Runnerの一覧取得や削除に使える操作があります。自托管Runner APIの仕様を利用して、登録済みなのにジョブを受け取れないノードや、処理終了後も残っているノードを検出してください。
Linuxコンテナのように、ノードを即時に複製・破棄できる前提をmacOSの物理Macへそのまま当てはめることはできません。Macの電源、ストレージ消去、ログ転送、OS復元、遠隔操作の失敗を含めて、チーム側でライフサイクルを編成する必要があります。
実装手順
-
ジョブを信頼境界で分類します。
外部プルリクエスト、通常のテスト、署名、実機接続、固定ネットワーク依存を別グループに分けます。 -
Runnerラベルとアクセス範囲を分けます。
一時実行プール、通常ビルド用常駐プール、署名用プールを別名で管理し、署名用ラベルを一般ワークフローへ公開しません。 -
ジョブ終了時の清掃項目を固定します。
作業ディレクトリだけでなく、DerivedData、依存キャッシュ、環境変数由来のファイル、キーチェーン、一時ログを確認します。 -
一時Runnerの再登録処理を試験します。
ジョブ終了、Runner登録解除、Mac側の清掃、必要なイメージ復元、再登録の順に動かし、途中で失敗したノードを自動隔離します。 -
署名情報を注入方式へ切り替えます。
固定ファイルとして置くのではなく、対象ジョブだけが取得できる仕組みにし、処理後に削除されたことをログで確認します。 -
キューと復旧の記録を始めます。
待ち時間、実行時間、同時実行数、再実行、登録失敗、清掃失敗、交換までの時間を記録します。 -
小さなワークフローで比較します。
同じコミットと同じツールチェーンを使い、常駐と一時の両方でキャッシュ命中、失敗後の再現性、復旧時間を比べます。M6の初回出荷後は、Apple公式仕様に記載された構成を確認したうえで実機測定を行ってください。Mac mini公式仕様だけから、実際のCI同時実行能力を推定してはいけません。
選択肢の比較
次の表は、Mac Mini M6を含むmacOS Runnerの役割を決めるための比較表です。性能の断定ではなく、信頼境界と運用責任を基準にしてください。
| 構成 | 向いているタスク | キャッシュ | 隔離と認証情報 | 復旧・拡張の要件 |
|---|---|---|---|---|
| 一時Runner | 外部プルリクエスト、通常検証 | 毎回失われる前提。必要なら安全なキャッシュだけ再取得 | ジョブ単位で分離し、終了後にMac側も清掃 | 登録解除、清掃、再登録、失敗ノードの隔離 |
| 受控常駐Runner | 固定ツールチェーン、実機、署名 | 高い再利用性。ただし環境漂移を監視 | リポジトリ、ブランチ、ワークフローを限定 | 定期更新、手動接続、バックアップ、交換機 |
| 双轨構成 | 通常検証とリリースを同時に運用 | 通常検証は再現性、署名側は必要なキャッシュを維持 | 一般ジョブと秘密情報を別プールへ分離 | キューを分け、ピーク時だけ一時ノードを追加 |
自動リセットが安定しない場合は、常駐Runnerを一時Runnerと呼んで運用しないでください。まず権限を削り、署名情報を外し、再現性を確認できる範囲から一時化します。
FAQ
GitHub Actionsの一時Runnerと常駐Runnerは、運用上どこが違いますか?
一時Runnerはジョブ単位で使い捨てる前提の実行単位で、プルリクエストや外部コードを扱う際に前のジョブの状態を引き継ぎにくい点が利点です。ただし、Runnerが自動注销されてもMac本体のファイル、キーチェーン、キャッシュまで消えるわけではありません。常駐Runnerはキャッシュと固定ツールチェーンを維持しやすい一方、清掃、権限分離、状態監視が必要です。
Mac Mini M6を一回限りのmacOS Runnerとして運用できますか?
運用できますが、GitHub上で一時Runnerとして登録することと、物理的なMacを初期状態へ戻すことは別の作業です。ジョブ完了後に作業ディレクトリ、派生データ、キーチェーン、一時ファイルを消去し、必要なら再登録やシステムイメージの復元まで実施してください。M6の実際のリセット時間やキャッシュ効果は、初回出荷後に同じワークフローで測定する必要があります。
iOSの署名処理を一時Runnerへ移す判断は、何を確認すべきですか?
証明書、秘密鍵、プロビジョニングプロファイル、配布アカウントをジョブへ注入する方式が監査可能で、処理後に確実に破棄できる場合に限って検討します。署名用キーチェーンを一般の検証ジョブと共有する設計は避け、対象リポジトリ、ブランチ、ワークフローを制限してください。手順を証明できない段階では、権限を絞った常駐の公開用Runnerへ分離する方が安全です。
自托管Runnerで別のタスク同士が互いに影響しないようにするには?
作業ディレクトリを毎回削除するだけでは不十分です。DerivedData、依存パッケージ、環境変数、キーチェーン、SSH鍵、一時ログ、Dockerや仮想化ツールの状態まで確認し、ジョブ終了時に消去してください。外部コードを実行する場合は一時Runner、異なる信頼境界には別のRunnerグループを割り当て、削除に失敗したノードを自動的に隔離する仕組みも必要です。
Mac Runnerの拡張台数は、どのキュー情報から決めればよいですか?
待ち時間だけでなく、ジョブの実行時間、同時実行数、失敗後の再実行、署名ジョブの集中時間、Runnerの登録失敗と回収失敗を記録してください。通常の検証とリリース処理を同じキューで測ると必要台数を誤ります。GitHubのREST APIでRunnerの登録状態を取得し、待機ジョブと突き合わせて、追加ノードが本当に待ち時間を下げたかを検証します。
現在のMac運用が1台の共有Macや汎用クラウドに集中している場合、タスクの互い違いによる作業ファイルの残留、署名情報の過剰共有、故障時の待ち時間が問題になりやすいです。自前購入は長期の固定負荷には向きますが、初回出荷前のM6を含む構成を短期間だけ検証するには、調達、初期設定、交換機の準備が負担になります。
まず通常テストのワークフローを一時Runnerで試し、リリース需要が増えた時期だけ同じイメージと権限境界のMac実行ノードを追加する方法なら、常駐台数を抑えながら判断できます。短期のMac実行環境や構成確認が必要なら、kvmsyncのMacレンタル案内で利用条件を確認し、運用手順はサポート情報と照合してください。
よくある質問
GitHub Actionsの一時Runnerと常駐Runnerは、運用上どこが違いますか?
一時Runnerはジョブ単位で使い捨てる前提の実行単位で、プルリクエストや外部コードを扱う際に前のジョブの状態を引き継ぎにくい点が利点です。ただし、Runnerが自動注销されてもMac本体のファイル、キーチェーン、キャッシュまで消えるわけではありません。常駐Runnerはキャッシュと固定ツールチェーンを維持しやすい一方、清掃、権限分離、状態監視が必要です。
Mac Mini M6を一回限りのmacOS Runnerとして運用できますか?
運用できますが、GitHub上で一時Runnerとして登録することと、物理的なMacを初期状態へ戻すことは別の作業です。ジョブ完了後に作業ディレクトリ、派生データ、キーチェーン、一時ファイルを消去し、必要なら再登録やシステムイメージの復元まで実施してください。M6の実際のリセット時間やキャッシュ効果は、初回出荷後に同じワークフローで測定する必要があります。
iOSの署名処理を一時Runnerへ移す判断は、何を確認すべきですか?
証明書、秘密鍵、プロビジョニングプロファイル、配布アカウントをジョブへ注入する方式が監査可能で、処理後に確実に破棄できる場合に限って検討します。署名用キーチェーンを一般の検証ジョブと共有する設計は避け、対象リポジトリ、ブランチ、ワークフローを制限してください。手順を証明できない段階では、権限を絞った常駐の公開用Runnerへ分離する方が安全です。
自托管Runnerで別のタスク同士が互いに影響しないようにするには?
作業ディレクトリを毎回削除するだけでは不十分です。DerivedData、依存パッケージ、環境変数、キーチェーン、SSH鍵、一時ログ、Dockerや仮想化ツールの状態まで確認し、ジョブ終了時に消去してください。外部コードを実行する場合は一時Runner、異なる信頼境界には別のRunnerグループを割り当て、削除に失敗したノードを自動的に隔離する仕組みも必要です。
Mac Runnerの拡張台数は、どのキュー情報から決めればよいですか?
待ち時間だけでなく、ジョブの実行時間、同時実行数、失敗後の再実行、署名ジョブの集中時間、Runnerの登録失敗と回収失敗を記録してください。通常の検証とリリース処理を同じキューで測ると必要台数を誤ります。GitHubのREST APIでRunnerの登録状態を取得し、待機ジョブと突き合わせて、追加ノードが本当に待ち時間を下げたかを検証します。
kvmsync M4 リモートノード
開発自動化に適した専用Mac環境を、kvmsyncで整えませんか
kvmsyncなら、本物のMac mini M4を物理専有でき、安定したmacOSのビルド環境を構築できます。