Match (Fastlane)は、iOSのCode Signing証明書とProvisioning Profilesを管理するためのツールであり、それらを暗号化されたGitリポジトリに保存します。Apple Developer Portalを介した手動管理とは異なり、Matchはすべての開発者とCI/CDシステム間での署名の同期を自動化します。公式Fastlaneドキュメント(2026年)によると、MatchはiOSアプリケーションのビルド時に不正確な証明書に関連するエラーの最大90%を排除します。
重要なポイント
Match (Fastlane)は、iOS開発向けにCode Signing証明書とProvisioning Profilesを集中管理するために設計されたFastlaneエコシステムのコンポーネントです。チームメンバー間の署名の同期の問題を解決し、開発者の介入なしにCI/CDパイプラインでの証明書設定を自動化します。
Matchがない場合、各チームメンバーはXcodeまたはApple Developer Portalを介して手動で証明書を生成し、異なるマシンでのビルド競合を引き起こします。Code Signingは、iOSアプリケーションにデジタル署名するプロセスであり、ユーザーのデバイスにインストールする前にその作成者と整合性を確認します。
Apple Developerドキュメント(2025年)によると、誤った証明書設定はApp Storeにアプリを提出する際の拒否の最も一般的な原因の1つです。Matchは自動的に証明書の有効性をチェックし、期限切れが近い証明書について警告することで、Appleの検証段階でのビルド拒否のリスクを軽減します。
2人以上の開発者がいるプロジェクトやCI/CDパイプラインがある場合はMatchを使用してください — 新しいチームメンバーの環境設定時間を30分から1つのターミナルコマンドに短縮します。
Matchアーキテクチャは、すべてのiOSチーム証明書の単一の真実のソースという概念に基づいて構築されています。各開発者のキーチェーンでのローカルストレージの代わりに、Matchは各ファイルを保存前に暗号化して単一のGitリポジトリに証明書を統合します。
プロセスは3つの段階で構成されています。初期化段階で、MatchはApple Developer Portal APIを介して必要なすべての証明書とプロファイルを生成します。各ファイルは、ユーザー定義のパスフレーズから形成された鍵を使用してAES-256アルゴリズムで暗号化されます。暗号化されたファイルはGitリポジトリに保存され、標準のGit pushおよびpull操作を介してリモートサーバーと同期されます。
Matchは証明書とプロファイルを暗号化するためにOpenSSLとユーザー定義のパスフレーズの組み合わせを使用します。アクセスキーはMATCH_PASSWORD環境変数で設定され、リポジトリに保存されないため、Gitサーバーが侵害されたりリポジトリが公開アクセス可能な場合でも漏洩を防ぎます。
証明書を要求すると、Matchはリポジトリから暗号化されたファイルをダウンロードし、パスフレーズを使用してローカルで復号化し、現在のマシンのキーチェーンにインストールします。ビルド完了後、企業環境のセキュリティポリシーに準拠するために証明書をキーチェーンから削除できます — これにより、後続のビルドでの古い証明書の使用を防ぎます。
各証明書は、アプリケーション識別子、プロファイルタイプ、作成日を含む名前で保存されます。この構造により、Matchは証明書のバージョンを管理し、必要に応じて標準のGit revertおよびresetコマンドを使用して以前の状態に変更をロールバックできます。これは、プロファイルが誤って削除または上書きされた場合に特に便利です。
MatchはRubyパッケージマネージャーを介してFastlaneと一緒にインストールされます:gem install fastlane。インストール後、fastlane match initコマンドで証明書ストレージを初期化します。これにより空のGitリポジトリが作成され、基本的な設定テンプレートを含むMatchfileが生成されます。
# Matchリポジトリを初期化
fastlane match init
Matchfileファイルには、証明書ストレージへのすべての接続パラメータ(GitリポジトリURL、デフォルトのプロファイルタイプ、アプリケーション識別子、Apple Developer認証情報)が含まれています。5人の開発者チームの一般的な設定例:
# Matchfile設定
git_url("https://github.com/company/certificates.git")
type(:development)
app_identifier(["com.company.app", "com.company.app.extension"])
username("developer@company.com")
team_id("TEAM123456")
git_branch("main")
typeパラメータはプロファイルタイプを定義します::developmentは開発者デバイスでのデバッグ用、:appstoreはApp Storeへの公開用、:adhocは外部デバイスでのテスト用、:enterpriseはApp Store外での企業内In-House配信用です。各タイプはリポジトリに個別のディレクトリを作成し、ターゲットビルドシナリオごとにプロファイルを整理できます。
MatchはApple Developer Portalの複数の認証方法をサポートしています:Apple IDを介した2要素認証、アプリ固有のパスワード、App Store Connect APIキー。CI/CDにはAPIキーが推奨されます — インタラクティブな確認コードの入力が不要で、開発者のデバイスが変更されても自動ビルドをブロックしません。
Matchfileを設定した後、fastlane match developmentまたはfastlane match appstoreコマンドを実行してプロファイルを生成および同期します。MatchはApple Developer Portal APIを介して自動的に証明書を作成または更新し、リポジトリに保存します。Apple Developer Portalは、証明書、アプリケーション識別子、承認された開発者デバイスのリストを管理するためのAppleのWebインターフェースです。
初回実行時に、Matchはリポジトリを暗号化するためのパスフレーズを要求します。このパスフレーズはCI/CDシークレットマネージャー(GitHub Actions Secrets、GitLab CI Variables、Jenkins Credentials)に保存し、MATCH_PASSWORD環境変数を介して渡す必要があります。これがないと、Matchは他のマシンやCI環境で証明書を復号化できません。
Matchインターフェースは、証明書とプロファイルを作成、更新、同期、削除するための一連のコマンドで構成されています。各コマンドは、Code Signingのライフサイクルにおける特定のアクション(生成から完全なリポジトリクリーンアップまで)に対応します。
fastlane match developmentコマンドは、ローカルデバイスでのデバッグ用に開発証明書とプロファイルをダウンロードまたは作成します。Provisioning Profileは、開発者証明書をアプリケーション識別子とインストールが許可されたデバイスのリストにリンクするAppleのデジタル文書です。
App Storeへの公開には、fastlane match appstoreを使用します — 配布証明書とAppStoreプロファイルを生成します。fastlane match adhocコマンドは外部デバイスでのテスト用のプロファイルを作成し、fastlane match enterpriseは企業内In-Houseアプリケーション用です。
# デバッグ用のDevelopmentプロファイルを作成
fastlane match development
# リリース用のAppStoreプロファイルを作成
fastlane match appstore
# 手動で作成した既存の証明書をインポート
fastlane match import
fastlane match importコマンドを使用すると、既存の証明書をリポジトリに追加できます — 手動管理からMatchへの移行時に便利です。--readonlyパラメータはリポジトリへの変更をブロックします。これは、パイプラインが自動的に証明書やプロファイルを作成または削除すべきではないCI環境にとって重要です。
| Matchコマンド | 目的 | プロファイルタイプ |
|---|---|---|
| match development | デバイスでのデバッグ用に開発プロファイルを作成 | Development |
| match appstore | App Store公開用のプロファイルを作成 | AppStore |
| match adhoc | ベータテスターのデバイスでの外部テスト用プロファイル | AdHoc |
| match enterprise | In-House配信用の企業プロファイル | Enterprise |
| match import | 以前に作成した証明書をリポジトリにインポート | 任意 |
完全なリポジトリクリーンアップには、fastlane match nukeコマンドを使用します。これにより、Gitストレージ、Apple Developer Portal、ローカルマシンからすべての証明書が削除されます — プロジェクトのCode Signing状態を完全にリセットします。このコマンドは、深刻な競合が発生した場合や新しいApple Developerアカウントに移行する場合にのみ使用されます。
MatchのCI/CD統合は、このツールの主要な利点の1つです。GitHub Actions、GitLab CI、Bitrise、Jenkinsのパイプラインでは、Matchが開発者の関与なしに自動的に正しい証明書をダウンロードしてインストールします。これにより、コミットから準備完了のIPAまで、iOSアプリケーションの完全に自動化されたビルドと署名が可能になります。
一般的なGitHub Actionsの設定には、Fastlaneのインストール、MATCH_PASSWORD変数の設定、--readonlyフラグを使用したMatchの実行が含まれます。GitHub Actionsは、リポジトリイベントに基づいてコードのビルド、テスト、公開を自動化するGitHubのCI/CDプラットフォームです。
# CI環境にFastlaneをインストール
gem install fastlane --no-document
# 変更権限なしの読み取り専用モードでMatchを実行
fastlane match development --readonly
CIでMatchを実行する前に、証明書リポジトリへのアクセスを設定します。FastlaneはMatchfileのgit_urlパラメータに基づいて自動的にクローンを作成します。リポジリアクセスはSSHキーまたは個人アクセストークンを介して設定され、CIシステムのシークレットに追加されます — これにより、公開アクセスを介して証明書が侵害されないことが保証されます。
CIプロバイダーのシークレットにMATCH_PASSWORDおよびFASTLANE_APPLE_API_KEY環境変数を設定します。App Store Connect APIキーを使用すると、Matchは2要素認証なしでApple Developer Portalに認証でき、自動ビルドでの対話型プロンプトを排除し、パイプラインのブロックを防ぎます。
正しいMatch設定でも、証明書の期限切れ、プロファイルの競合、環境設定の誤りに関連するエラーが発生する可能性があります。Matchの問題診断は、コマンドログの分析とGitリポジトリの状態の確認に基づいて行われます。
最も一般的なエラー — «You need to provide a password for Match» — は、MATCH_PASSWORD環境変数がマシンまたはCI環境で設定されていない場合に発生します。解決策:システム環境変数にMATCH_PASSWORDを追加するか、Matchコマンド実行時に--keychain_passwordパラメータを介してパスワードを渡します。
2番目に多い問題は、AdHocプロファイルに新しいデバイスを追加する際の証明書の競合です。これはfastlane match adhoc --forceコマンドで解決され、新しいデバイスを考慮してプロファイルを再作成します。Apple Developer証明書は1年間有効で、その後それらを使用したビルドはApp Store Connectによって拒否されます。Matchは有効期限の30日前に期限切れについて警告します。
«Multiple matches found for...»エラーが発生した場合、リポジトリに同じ証明書の複数のバージョンが存在します。fastlane match nukeコマンドを使用してリポジトリを完全にクリーンアップし、Apple Developer Portalからすべての証明書を削除します。クリーンアップ後、新規に生成を実行します — これにより、重複や競合するバージョンのない一貫したプロファイル状態が保証されます。
よくある質問
MatchはGitに保存する前に各証明書ファイルを暗号化するために、AES-256-CBCアルゴリズムでOpenSSLを使用します。暗号化キーはMATCH_PASSWORDパスフレーズに基づいて形成されます。パブリックリポジリアクセスでも、パスワードを知らなければ証明書にアクセスできません。
いいえ、Matchは暗号化された証明書を保存するためにGitリポジトリが必要です。ただし、マシン間の同期が不要な場合、リポジトリはローカルにできます。この場合、git_urlパラメータはリモートリポジトリURLの代わりにファイルシステム上のディレクトリへのローカルパスを指定します。
競合は、2人の開発者が同時に異なる証明書を生成した場合に発生します。解決策は、fastlane match nukeコマンドを使用してリポジトリとApple Developer Portal内のすべての証明書を完全にクリーンアップすることです。クリーンアップ後、1人の開発者が新規に生成を実行し、Gitを介して同期します。
Matchは起動時に自動的に期限切れの証明書を検出し、交換を提案します。強制更新するには、fastlane match [type] --forceを実行します — このコマンドは、既存の証明書がまだ有効でも、指定されたタイプの証明書とプロファイルを再作成します。これは開発者チームを変更する場合に便利です。
手動管理では、各マシンごとにXcodeまたはDeveloper Portalを介して個別に証明書を生成する必要があります。Matchはストレージを集中化し、データを暗号化し、開発者とCI/CD間で同期し、人間の介入なしにすべての署名の有効性と期限を自動的にチェックします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。