Fastlane から Firebase App Distribution(Beta版) でテストアプリを配信する

## 背景

[Fabric Beta によるテストアプリの配信](https://qiita.com/kitaharamikiya/items/4158f2f60862e8939eca)という記事を書きましたが、

- Fabric が [2020/03/31に終了](https://get.fabric.io/roadmap)すること
- Firebase App Distributionの [β版がリリースされた](https://firebase.google.com/products/app-distribution/?hl=ja)こと
- 同僚氏がいろいろ調べて Firebase App Distribution でアプリを配信してくれたこと

以上より、自分の勉強がてらに、記事を更新しておこうと思いました。


## 前提条件
- fastlane をインストールしておく
- fastlane でアプリのビルドができること
- firebase プロジェクトを用意しておく
    - https://console.firebase.google.com/?hl=ja
    - Firebase App Distributionで配信グループを作成しておく
- firebase CLIをインストールしておく
    - https://firebase.google.com/docs/cli/?hl=ja

## ローカルで配信する

#### ※ git commitしてない変更が消えるのでご注意。。。 

1． Firebase CLIにログインする 

```
$ firebase login
```

2． fastlane のプラグインを追加しておく
 
```
$fastlane add_plugin firebase_app_distribution
```
参考
- https://firebase.google.com/docs/app-distribution/ios/distribute-fastlane
- https://github.com/fastlane-community/fastlane-plugin-firebase_app_distribution


3． ローカルで実行する場合、fastlane/Fastfileに以下を追加しておく(Androidアプリを gradleビルドして、firebseで配信する)
※ この例は、stagingDebugビルド

```
  desc "Submit Firebase App Distribution"
  lane :distribute do
    gradle(task: "clean")
    # Compile
    gradle(
      task: "assemble",
      flavor: "staging",
      build_type: "debug",
      flags: "--stacktrace"
    )

    # https://github.com/fastlane/fastlane/issues/6325
    sh("touch changelog.txt")
    File.write("changelog.txt", changelog)

    # Firebase App Distribution
    firebase_app_distribution(
      app: "<Firebaseプロジェクトの app Id>",
      release_notes_file: "fastlane/changelog.txt",
      groups: "<配信グループ名>"
    )
  end
```

4． fastlaneで配信する

```
$ bundle exec fastlane distribute
```

5． fastlaneをログアウト

```
$ firebase logout
```



## CIで実行する場合

１． FIREBASE_TOKENを取得する

```.sh
$ firebase login:ci
```
2． .circleci/config.yml に追加

```yml
references:
  commands:
    fastlane_install_firebase_cli: &fastlane_install_firebase_cli
      name: Install Firebase CLI
      command: |
        npm install --save-dev firebase-tools
    fastlane_distribute: &fastlane_distribute
      name: Run fastlane distribute
      command: |
        bundle exec fastlane distribute
```

必要なところで実行する
`- run: *fastlane_install_firebase_cli`
`- run: *fastlane_distribute`

3． fastlane/Fastfileに以下を追加しておく(Androidアプリを gradleビルドして、firebseで配信する)
※ この例は、stagingDebugビルド

```fastlane/Fastfile

  desc "Submit Firebase App Distribution"
  lane :distribute do
    gradle(task: "clean")
    # Compile
    gradle(
      task: "assemble",
      flavor: "staging",
      build_type: "debug",
      flags: "--stacktrace"
    )

    # https://github.com/fastlane/fastlane/issues/6325
    sh("touch changelog.txt")
    File.write("changelog.txt", changelog)

    # Firebase App Distribution
    firebase_app_distribution(
      app: ENV["FIREBASE_APP_ID"],
      release_notes_file: "fastlane/changelog.txt",
      groups: ENV["FIREBASE_APP_DISTRIBUTION_GROUP"],
      firebase_cli_path: ENV["FIREBASE_CLI_PATH"]
    )
  end
```

4． 各環境変数をCIで登録しておく

| 変数名 | 概要 | 補足 |
|:---|:------|:------|
|ENV["FIREBASE_TOKEN"]| トークン | CircleCIで実施する場合 必須 |
|ENV["FIREBASE_APP_ID"]| Firebaseプロジェクトのアプリ | |
|ENV["FIREBASE_APP_DISTRIBUTION_GROUP"] | 配信グループ名 | |
|ENV["FIREBASE_CLI_PATH"] | Firebase CLIのPath | CircleCIで設定する場合： ./node_modules/.bin/firebase |

 
## 所感

同僚がいろいろ調べてくれたので、そこまで難しくなくできましたが、雑すぎるので、時間があれば書き直す・・・