ReactNativeアプリをAppDistributionにfastlaneでデプロイする方法

## はじめに
今回はfastlane公式ドキュメントにReactNativeでfastlaneを導入する方法が書いていなかったので、その方法について、AppDistributionでのiOSアプリのベータ配布をする方法と共に書いていきたいと思います！！

## fastlaneとは
[fastlane](https://fastlane.tools)とはiOS, Android, flutter, ReactNative等で使用できるツールです。テスト実行, iOSの証明書発行, Beta配布, リリース等のあらゆるタスクを半自動化してくれるツールです。詳しくはfastlaneの[公式ドキュメント](https://fastlane.tools)をご覧ください！！

## AppDistributionとは
AppDistributionとはfirebaseが提供するベータ配布用のツールです。TestFlightとは違い、審査というものが一切ないので開発チーム内でのベータ配布に便利です。[公式ドキュメントはこちら](https://firebase.google.com/docs/app-distribution)

## セットアップ
早速プロジェクトにfastlaneを導入していきます！！Homebrewを使った方法もあるのですが、今回はBundlerを利用してインストールしていきたいと思います。

```shell:ターミナル
$ bundle init
```
まずはじめに`bundle init`しましょう。`Gemfile`という名前のファイルが生成されると思うのでそのファイルを開いて以下の用に入力してください。

```ruby:Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "cocoapods"
gem "fastlane"
```

gemをインストールします。
これでfastlaneコマンドが使えるようになったかと思います！！

```shell:ターミナル
$ bundle install --path vendor/bundle
```

下記のコマンド、ネイティブのプロジェクトではないので警告が出てきますが気にせずに進めて大丈夫です。

```shell:ターミナル
$ fastlane init
```

firebase-cliのインストールをして、firebaseアカウント(Googleアカウント)でログインします。
**必ず最新のバージョンであることを確認してください。AppDistributionが使用できない場合があります**

```shell:ターミナル
$ npm install -g firebase-tools
$ firebase login
```

次にAppfileの編集をしていきます。

```ruby:fastlane/Appfile
app_identifier("[iOSアプリのバンドルID]")
apple_id("[Apple ID]")
```
これで基礎的な設定は完了です！！

## Firebaseプロジェクトを作成する
[Firebaseコンソール](https://console.firebase.google.com/)にアクセスし、ベータ配布用のプロジェクトを作成します。
作成が完了したら、左側のバーからAppDistributionタブを開いてiOSアプリまたはAndroidアプリ、もしくは両方の追加を行ってください。

## 自動化用のスクリプトを書いていく
自動化用のスクリプトを書いていこうと思います。fastlane/Fastfileを次のように編集してください！！

```ruby:fastlane/Fastfile
APP_NAME = "[YOUR_APP_NAME]"
XCODE_PROJECT_PATH = "./ios/#{APP_NAME}.xcodeproj"
XC_WORKSPACE_PATH = "./ios/#{APP_NAME}.xcworkspace"

platform :ios do
  desc 'upload beta ios app to AppDistribution'
  lane :beta_deploy do |options|
    # ビルド用にpod installを行う
    cocoapods(podfile: "./ios/Podfile")
    # Xcodeプロジェクトのビルド番号をインクリメントする
    increment_build_number(xcodeproj: XCODE_PROJECT_PATH)
    # iosプロジェクトをXcodeビルド
    gym(
      scheme: APP_NAME,
      # キャッシュを削除してビルド
      clean: true,
      workspace: XC_WORKSPACE_PATH,
      output_directory: './build',
      output_name: "#{APP_NAME}-beta"
    )
    firebase_app_distribution(
      # 後ほど説明
      app: ENV["FIREBASE_APP_IDENTIFIER_IOS"],
      # ベータテスターのメールアドレスをカンマ区切りで入力します。
      testers: "ren.example@example.com, ren.hoge@hoge.com",
      release_notes: "beta version #{get_version_number(xcodeproj: XCODE_PROJECT_PATH, target: APP_NAME)}",
      # 以下、ターミナルにて `which firebase`と入力することで
      # firebase-cliのディレクトリが出力されるのでその結果を入力してください
      firebase_cli_path: "[Firebase CLIのディレクトリ]"
    )
  end
end

```

細かな説明はコード内にコメントアウトで書いているので省きます。
上記コードの中にあった`ENV["FIREBASE_APP_IDENTIFIER_IOS"]`という表記について説明します。
こちらのidはFirebaseのプロジェクトコンソールの全般設定画面の下の方に表記があるのでそのアプリ Idを入力してください！！

## でけた！！
これであとは動かすだけです！！実際に下記のコマンドを打ってみましょう！！

```shell:ターミナル
$ fastlane ios beta_deploy
```

上記コマンド、先ほどFastfileに書いたようにxcode buildからAppDistributionまでの広い範囲を一気に実行するのでなかなか時間がかかります。プロジェクトの規模にもよりますが少なくとも5分はかかるかと思います！！

コマンドの実行が終わったら先ほどのFirebaseのプロジェクトコンソール画面に戻ってAppDistributionタブを開いてみてください！!先ほどFastfileに入力した `release_note`やtester等の情報がアップロードされていれば成功です！！

最後に、testerとして指定したメールアドレスを確認しましょう。そちらにベータテストへの招待リンクが届いているはずなので、指示に沿ってインストールしてみてください！！

## さいごに
いかがでしたでしょうか?
この記事に不備等ございましたら、コメント欄にて教えていただけると幸いです！！