2026年版:独占リモート Mac CI で fastlane match と手動(証明書/プロビジョニングプロファイル)管理をどう選ぶか——チーム規模、ローテーション、ヘッドレスキーチェーン、SSH 注入の再現可能な意思決定マトリクス+FAQ
独占リモート Mac を SSH だけで運用する環境では、ローカル UI がなくても コード署名 が「ビルド成功」と「配布可能」の境界になります。fastlane match は、パスフレーズで暗号化した配布用 ID とプロビジョニングプロファイルを 共有 Git リポジトリ(またはオブジェクトストレージ)経由で同期します。手動管理 は、誰かが .p12 や .mobileprovision を書き出し、パスを自分で配線する方式です。本稿では チーム規模、ローテーション、ヘッドレス環境のキーチェーン、SSH/パイプラインへのシークレット注入を軸に、万能解を名乗らない 再現可能な意思決定表 と FAQ をまとめます。公証や notarytool とキーチェーンの突き合わせは リモート Mac ヘッドレス公証パイプライン(notarytool・キーチェーン)の記事、Xcode ビルド時間の体感は Mac レンタルでの Xcode ビルド実測 と併読すると全体像が掴みやすいです。
1. TL;DR — 2026 年のデフォルト
- 共有の Apple Developer Program を使うプロダクトチームの多く: 開発用・配布用プロファイルと match が管理する署名 ID には match を優先。パスフレーズ、Git(またはストレージ)資格情報、App Store Connect API キーはリポジトリ外のシークレット管理に置く。
- 手動エクスポート が妥当なのは、法務/エンタープライズ MDM で Git への暗号素材の置き場が禁止される場合、match がきれいに表現しにくい 特殊なプロファイル が必要な場合、署名不一致の一次切り分けで ファイルを明示 したい場合。
- ヘッドレス Mac CI: CI ユーザーの ログインキーチェーン を脅威モデルに含め、並列ジョブなら ユーザ分離またはキーチェーンファイル分離 を検討。GUI の「許可」クリックは存在しない前提で設計する。
- SSH 注入: 署名用シークレットは その ssh セッションまたはジョブラッパー にだけ渡し、管理者の対話ログインで読み込まれるシェル設定にパスフレーズを焼かない。
2. match が中央集約するもの
fastlane match は、証明書とプロビジョニングプロファイルをチームがアクセスできるストア(多くは 非公開 Git)に暗号化して保管します。パスフレーズ とリポジトリ権限を持つ Runner が復号し、キーチェーンへ導入して Xcode の署名設定を揃え、「自分の Mac では通る」ドリフトを減らします。
手動 は、成果物を 不透明なファイル のまま Runner に配る方式(SCP、シークレット展開、マウント)です。明示制御は得られますが、ローテーションのたびに 人的ステップ が増え、Bundle ID・機能・プロファイル の取り違えリスクも上がります。
3. 意思決定マトリクス A — チーム規模と Apple アカウントの形
| シナリオ | 推奨 | 理由 |
|---|---|---|
| エンジニア 2〜8 名、アプリ 1 つ、Apple チーム 1 つ | match | 調整コストが最小。パスフレーズ+非公開リポジトリは .p12 をメールで回すより安全に運べる。 |
| 複数アプリ/ホワイトラベル | match(app_identifier や複数ターゲット) |
プロファイルを版管理しやすい。Bundle ID が増えるほど手動ローテはスケールしにくい。 |
| 厳格コンプライアンス:「Git に署名素材を置くな(暗号化でも不可)」 | 手動 または match + GCS/S3 バックエンド(Git 以外) | ポリシーで Git 保管が止まることがある。IAM 付きオブジェクトストレージのほうが承認されやすい場合がある。 |
| エンタープライズ配布・MDM 前提など、通常の match フロー外のプロファイル | 手動(またはハイブリッド) | ポータル側の制約で match が想定しないプロファイル型がある。ファイル明示で抽象化の驚きを減らせる。 |
| 請負メンバーが頻繁に入れ替わる | match + 厳しい リポジトリ/パスフレーズ ACL | オフボーディングは Git 権限の剥奪に寄せられる。エクスポート証明書の回収追跡より運用しやすい。 |
4. 意思決定マトリクス B — ローテーションと影響範囲
| 論点 | match | 手動 |
|---|---|---|
| 配布証明書の更新 | match レーンで再生成し、暗号化素材をコミットして Runner をロール | 新しい .p12 を書き出し、全シークレットストアを更新。1 ノード漏れが起きやすい |
| プロファイル期限(プッシュ、App Groups など) | 更新レーンと同一リポジトリの真実で追いやすい | ポータルとファイル投入を誰かが都度覚えて回す必要がある |
| 秘密鍵素材の漏えい | パスフレーズのローテと再暗号化、ポリシーに従い古い Git オブジェクトの扱いを決める | ポータルで失効しファイルを再配布。誰がコピーを持っていたかの監査が断片化しがち |
| 監査「誰がリリースに署名できるか」 | リポジトリ+パスフレーズ+ ASC ロールにマッピングしやすい | シークレットマネージャのエントリに分散しがち |
5. リモート Mac のヘッドレスキーチェーン
SSH のみの Mac では、GUI の「許可」を誰もクリックできません。再現性のあるセットアップの例:
- 専用 CI ユーザー と、シークレット管理に置いたログインキーチェーンのパスワード(リポジトリに書かない)。
- ジョブの前置きで
security unlock-keychainや必要ならset-key-partition-listを、そのジョブにだけ注入したシークレットで実行。 - 分離: 並列ジョブでは 別 OS ユーザー または 別キーチェーンファイル を検討し、2 つの
codesignが同一 ID で意図せず直列化しないようにする。 - match 導入後: Xcode が使うのと同じシェルで
security find-identity -v -p codesigningを確認する。
6. SSH とパイプラインへのシークレット注入パターン
match に典型なシークレットは MATCH_PASSWORD、Git 資格情報(またはデプロイキー)、任意の MATCH_GIT_BASIC_AUTHORIZATION、Fastlane セッションの代替としての App Store Connect API キーなどです。レビューに耐えるパターン:
- CI ネイティブのシークレット → ジョブ環境変数。ログではマスク。診断で PEM やパスフレーズを
echoしない。 - 環境変数に置けない素材は 一時ファイル(
$TMPDIR以下、権限制限、trapで削除)。 - オーケストレータから SSH: リモートセッションにだけ環境を渡す(
SendEnvやVAR=value command)。本番署名用の値を対話管理者全員の~/.zshrcに載せない。
7. FAQ
Q1:証明書が Git にある match は「不安全」では?
非公開 リポジトリに、match の 強いパスフレーズ で暗号化した状態を置くのが前提です。「手動」で共有ドライブに平文に近い形で置くより危ない、とは限りません。ポリシーとアクセス制御 の設計がラベルより重要です。
Q2:どんなときに手動プロファイルが必須?
Apple 側の制約や社内セキュリティで 中央リポジトリ禁止 のとき、または match がモデル化しにくい 非標準ツール でプロファイルを作っているとき。Runner 上ではファイル命名規則とチェックサム検証を文書化しておくとよいです。
Q3:配布は match、エンタープライズは手動、の併用は?
可能ですが運用負荷は増えます。レーンを分ける と シークレットの名前空間を分ける を明示し、どのレーンがどの ID に触れるかを Fastlane 側で誤解しないようにします。
Q4:ヘッドレスでキーチェーンのロック解除が不安定 — match と手動どちらのせい?
多くは どちらでもなく、キーチェーンの状態、ログインセッション、並列競合が原因です。まずアンロックスクリプトとユーザ分離を安定させ、署名方式を変えても security のフレークは直らないことが多いです。
Q5:App Store Connect API キーとの関係は?
match は Apple とのやりとりで 証明書とプロファイル を扱い、App Store Connect API キーはアップロードやメタデータなど ASC API 用です。ほぼ常に 両方の層を一体設計 します(.p8 の扱いは ASC API 向けの記事と併せて参照)。
署名の自動化は「実機の Mac」上でこそ意味がある
match も手動プロファイルも、Runner の再現性 がなければ信頼できません。同じ macOS マイナー前提、Xcode のパス、ジョブ間でのキーチェーン挙動が揃っていることが重要です。Apple Silicon の Mac mini クラスは codesign やアーカイブで単スレッド性能に強く、ユニファイドメモリ により大規模 Swift ビルド時のスワップ起因のフレークを抑えやすく、macOS の Gatekeeper や SIP は無人署名を Apple が想定する形に近づけます。M シリーズ Mac mini の待機電力は低く、専用 CI ノード を 24 時間回しても負担が小さい——証明書とプロファイルを毎パイプライン同じ手順で当てたいチームに向いています。
リモート Mac 上で match/手動のどちらを標準化するか決めるなら、まず SSHMac のホーム で並列度やストレージに合う構成を選び、キーチェーン設計を固定してから運用ルールを固めるのが安全です。
match/手動署名向けの専用リモート Mac をお探しですか?
SSHMac Remote Mac mini
Apple Silicon 上で SSH ファーストの iOS CI を回し、上記マトリクスをノート PC のスリープや熱スロットリングなしで適用できます。