

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: 証明書ストレージに GitHub を使用した CodeBuild での Fastlane による Apple コード署名
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) は、iOS および Android アプリのベータデプロイとリリースを自動化する際によく使用されているオープンソース自動化ツールです。スクリーンショットの生成、コード署名の処理、アプリケーションのリリースなど、面倒なタスクがすべて処理されます。

このサンプルでは、証明書とプロビジョニングプロファイルのストレージとして GitHub を使用し、Mac フリートで実行されている CodeBuild プロジェクトで Fastlane を使用して Apple コード署名をセットアップする方法を示します。

## 前提条件
<a name="sample-fastlane-github-prerequisites"></a>

このチュートリアルを完了するには、まず以下をセットアップする必要があります。
+  AWS アカウント
+ [Apple 開発者アカウント](https://developer.apple.com/)
+ 証明書を保存するプライベート GitHub リポジトリ
+ プロジェクトにインストールされた fastlane - fastlane のインストールに関する[ガイド](https://docs.fastlane.tools/getting-started/ios/setup/)

## ステップ 1: ローカルマシンで GitHub を使用して Fastlane Match を設定する
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) は [Fastlane ツール](https://fastlane.tools/)の 1 つであり、ローカル開発環境と CodeBuild の両方でコード署名をシームレスに設定できます。Fastlane Match は、すべてのコード署名証明書とプロビジョニングプロファイルを Git リポジトリ/S3 バケット/Google クラウドストレージに保存し、必要に応じて必要な証明書とプロファイルをダウンロードおよびインストールします。

この例では、ストレージに Git リポジトリをセットアップして使用します。

****

1. プロジェクトで一致を初期化します。

   ```
   fastlane match init
   ```

1. プロンプトが表示されたら、ストレージモードとして GitHub を選択します。

1. GitHub を使用するよう `*Matchfile*` を更新します。

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**注記**  
fastlane が正常に認証とクローン作成を行えるよう、必ず Git リポジトリの HTTPS URL を入力してください。そうしない場合、一致を使用しようとすると認証エラーが表示されることがあります。

## ステップ 2: Fastfile をセットアップする
<a name="sample-fastlane-github-fastfile"></a>

次のレーンで `Fastfile` を作成または更新します。

CodeBuild では、アプリをビルドして署名するたびに Fastlane Match を実行する必要があります。これを行うには、アプリを構築するレーンに `match` アクションを追加するのが最も簡単です。

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**注記**  
一致アクションが正しく機能するよう、`Fastfile` の `before_all ` セクションに `setup_ci` を追加してください。これにより、適切なアクセス許可を持つ一時的な Fastlane キーチェーンが使用されます。これを使用しないと、ビルドが失敗したり、一貫性のない結果が表示されたりすることがあります。

## ステップ 3: `fastlane match` コマンドを実行して、それぞれの証明書とプロファイルを生成する
<a name="sample-fastlane-github-certificates"></a>

指定されたタイプ (開発、アプリストア、アドホック、エンタープライズ) の fastlane match コマンドは、証明書とプロファイルを生成します (リモートストアにない場合)。証明書とプロファイルは、fastlane によって GitHub に保存されます。

```
bundle exec fastlane match appstore
```

コマンドの実行がインタラクティブになり、証明書を復号するためのパスフレーズを設定するよう fastlane により求められます。

## ステップ 4: プロジェクトのアプリケーションファイルを作成する
<a name="sample-fastlane-github-appfile"></a>

プロジェクトに応じてアプリケーションファイルを作成または追加します。

****

1. プロジェクトのビルド要件に基づいて、[Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile)、[Appfile](http://docs.fastlane.tools/advanced/Appfile/)、[Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile)、[Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) を作成または追加します。

1. 変更内容をリモートリポジトリにコミットします。

## ステップ 5: Secrets Manager で環境変数を作成する
<a name="sample-fastlane-github-secrets"></a>

fastlane セッション Cookie と一致するパスフレーズを保存するための 3 つのシークレットを作成します。Secrets Manager でシークレットを作成する方法の詳細については、「[AWS Secrets Manager シークレットを作成する](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)」を参照してください。

****

1. 次のように fastlane セッション Cookie にアクセスします。

   1. シークレットキー - `FASTLANE_SESSION`

   1. シークレット値 - ローカルマシンで次のコマンドを実行して生成されたセッション Cookie。
**注記**  
この値は、ローカルファイル `~/.fastlane/spaceship/my_appleid_username/cookie` での認証後に使用できます。

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Fastlane Match パスフレーズ - Fastlane Match が Git リポジトリに保存されている証明書とプロファイルを復号できるようにするには、Match セットアップのステップで設定した暗号化パスフレーズを CodeBuild プロジェクトの環境変数に追加する必要があります。

   1. シークレットキー - `MATCH_PASSWORD`

   1. シークレット値 - `<match passphrase to decrypt certificates>`。パスフレーズは、ステップ 3 で証明書を生成するときに設定されます。

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION` - *match* の基本認可を設定します。

   1. シークレットキー: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. シークレット値 - 値は、ユーザー名と個人用アクセストークン (PAT) の base64 でエンコードされた文字列を `username:password` 形式で指定する必要があります。次のコマンドを使用して生成できます。

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      GitHub コンソールの **[Your Proﬁle] > [Settings] > [Developers Settings] > [Personal Access Token]** で PAT を生成できます。詳細については、ガイド ([https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)) を参照してください。

**注記**  
Secrets Manager で上記のシークレットを作成するときは、必ずシークレット名にプレフィックス `/CodeBuild/` を付けてください。

## ステップ 6: コンピューティングフリートを作成する
<a name="sample-fastlane-github-fleet"></a>

プロジェクトのコンピューティングフリートを作成します。

****

1. コンソールで CodeBuild に移動し、新しいコンピューティングフリートを作成します。

1. オペレーティングシステムとして `macOS` を選択し、適切なコンピューティングタイプとイメージを選択します。

## ステップ 7: CodeBuild でプロジェクトを作成する
<a name="sample-fastlane-github-project"></a>

CodeBuild でプロジェクトを作成します。

****

1. [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home) で AWS CodeBuild コンソールを開きます。

1. ビルドプロジェクトを作成します。詳細については、「[ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)」および「[ビルドの実行 (コンソール)](run-build-console.md)」を参照してください。

1. ソースプロバイダー (GitHub、CodeCommit など) をセットアップします。これは、証明書リポジトリではなく iOS プロジェクトソースリポジトリです。

1.  [**環境**] で以下の操作を行います。
   + [**リザーブドキャパシティ**] を選択します。
   + [**フリート**] で、上記で作成したフリートを選択します。
   + CodeBuild で自動作成するサービスロールの名前を指定します。
   + 以下の環境変数を指定します。
     + 名前: `MATCH_PASSWORD`、値: *<secrets arn>*、タイプ: Secrets Manager (MATCH\$1PASSWORD のステップ 5 で作成されたシークレット ARN)
     + 名前: `FASTLANE_SESSION`、値: *<secrets arn>*、タイプ: Secrets Manager (FASTLANE\$1SESSION のステップ 5 で作成されたシークレット ARN)
     + 名前: `MATCH_GIT_BASIC_AUTHORIZATION`、値: *<secrets ARN>*、タイプ: Secrets Manager のシークレット ARN (`MATCH_GIT_BASIC_AUTHORIZATION` のステップ 5 で作成)

1. [**Buildspec**] で、以下を追加します。

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## ステップ 8: ビルドを実行する
<a name="sample-fastlane-github-run"></a>

ビルドを実行します。CodeBuild でビルドステータスとログを確認できます。

ジョブが完了すると、ジョブのログを表示できるようになります。

## トラブルシューティング
<a name="sample-fastlane-github-troubleshooting"></a>
+ GitHub リポジトリにアクセスする際に問題が発生した場合は、個人用アクセストークンと MATCH\$1GIT\$1BASIC\$1AUTHORIZATION 環境変数を再確認してください。
+ 証明書の復号で問題が発生した場合は、MATCH\$1PASSWORD 環境変数で正しいパスフレーズを設定してください。
+ コード署名の問題については、Apple 開発者アカウントに必要な証明書とプロファイルがあり、Xcode プロジェクトのバンドル識別子がプロビジョニングプロファイルのものと一致していることを確認します。

## セキュリティに関する考慮事項
<a name="sample-fastlane-github-considerations"></a>

このチュートリアルのセキュリティに関する考慮事項を次に示します。
+ 証明書の GitHub リポジトリを秘密に保ち、定期的にアクセスを監査します。
+ MATCH\$1PASSWORD や FASTLANE\$1SESSION などの機密情報を保存 AWS Secrets Manager するために を使用することを検討してください。

このサンプルでは、証明書ストレージに GitHub を使用して CodeBuild の Fastlane で iOS コード署名をセットアップします。場合によっては、具体的なプロジェクト要件と CodeBuild 環境に応じて、いくつかのステップを調整する必要があります。このアプローチでは、 AWS サービスを活用して、 AWS エコシステム内のセキュリティと統合を強化します。