Android / iOS アプリのテスト配布サービスあれこれ（DeployGate、Firebase App Distribution、Bitrise）

この記事は [くふうカンパニー Advent Calendar 2019](https://qiita.com/advent-calendar/2019/kufu)、5日目の記事です。

くふうグループの [Da Vinci Studio](https://da-vinci-studio.com/) では、さまざまな Android / iOS アプリの開発やサポートを行なっています。
そしてふだんから複数のサービスを使ってテスト配布しているので、それぞれのサービスについての感想と使用例を書きます。

**1. [DeployGate](https://deploygate.com/)**
**2. [Firebase App Distribution](https://firebase.google.com/docs/app-distribution?hl=ja)**
**3. [Bitrise](https://www.bitrise.io/)（の配布サービス）**

1 と 2 は [fastlane](https://docs.fastlane.tools/) を使ってアップロードしています。3 は [Bitrise](https://devcenter.bitrise.io/jp/deploy/ios-deploy/deploying-an-ios-app-to-bitrise-io/) のデプロイステップを使っています。
また、最後におまけで Bitrise で Firebase App Distribution についても書いています。

## DeployGate
https://deploygate.com/

### 感想
- 日本語で説明されていてわかりやすい
- テスター向けの説明も日本語でサポートしやすい
- iOS でデバイスが追加されたとき、UDID 取得から登録、再配布までの手順が簡単（[dg コマンドラインツール](https://docs.deploygate.com/docs/cli) が便利）
- 同じ配布ページでアップデート版を続けて配布できる（テスターに見てほしい特定のバージョンを開発者が指定できる）
- アップロード先に複数の配布ページを指定できるので、開発者用とテスター用で出し分けられる[^1]
- テスターがアプリをインストールしたときなどに通知を受信できる（サポートするときに便利）
- 料金はグループ開発向けプランだと最低でも 10,000円 / 月（税込）、それでも使っていきたい

[^1]: 参考: https://qiita.com/kyoro353/items/200d5b34b9f5805dd43a 

### 使用例: fastlane を使うとこんな感じ

##### Fastfile でレーンを設定

```ruby
  build_app(...)
  deploygate(
      api_token: ENV["DEPLOYGATE_API_TOKEN"],
      user: ENV["DEPLOYGATE_USER"],
      message: "メッセージ",
  )
```

詳しくは、https://docs.deploygate.com/docs/fastlane をご覧ください。

`ENV["DEPLOYGATE_API_TOKEN"]` と `ENV["DEPLOYGATE_USER"]` は [.env ファイル](https://docs.fastlane.tools/best-practices/keys/) に設定しています。

## Firebase App Distribution
https://firebase.google.com/docs/app-distribution?hl=ja

### 感想
- 日本語で説明されていてわかりやすい
- テスター向けの説明は英語だが、開発者がリリースノートを工夫すれば何とかなる
- iOS でデバイスが追加されたとき、UDID を取得して開発者に通知する（その後は手動）
- Android / iOS アプリ開発ではたいてい Firebase を使うのでなるべく統一したい
- 今のところ 0 円だが料金はよくわかっていない
- まだベータ版なので今後に期待

### 使用例: fastlane を使うとこんな感じ

##### fastlane プラグインをインストール
```
$ fastlane add_plugin firebase_app_distribution
```

##### Firebase CLI をインストール

```
$ curl -sL firebase.tools | bash
```

##### Fastfile でレーンを設定

```ruby
  build_app(...)
  firebase_app_distribution(
      app: ENV["FIREBASE_APP_ID"],
      release_notes: "リリースノート",
      groups: "dvs" # 作成したグループのエイリアス
  )
```

詳しくは、
Android: https://firebase.google.com/docs/app-distribution/android/distribute-fastlane や
iOS: https://firebase.google.com/docs/app-distribution/ios/distribute-fastlane をご覧ください。

`ENV["FIREBASE_APP_ID"]` は  [.env ファイル](https://docs.fastlane.tools/best-practices/keys/) に設定しています。

## Bitrise（の配布サービス）
https://www.bitrise.io/

### 感想
- Bitrise で `Deploy to Bitrise.io` ステップを使うとそのまま配布準備ができるので簡単
- 日本語に対応していないのでテスターにとってはわかりづらい
- 料金は Bitrise の利用料に含まれるので、Bitrise を使っていれば気にならない

### 使用例

Bitrise で `Deploy to Bitrise.io` ステップを設定し、テスターを Team に登録します。
（テスターに登録しなくても公開インストールページからの配布もできます。）

詳しくは、
Android: https://devcenter.bitrise.io/jp/deploy/android-deploy/deploying-android-apps/ や
iOS: https://devcenter.bitrise.io/jp/deploy/ios-deploy/deploying-an-ios-app-to-bitrise-io/ をご覧ください。
また iOS デバイスの登録は、 https://devcenter.bitrise.io/jp/testing/registering-a-test-device/ をご覧ください。

## まとめ

 | DeployGate | Firebase App Distribution | Bitrise
---|:---:|:---:|:---:
開発者向け日本語説明 | ○ | ○ | -
テスター向け日本語説明 | ○ | - | -
（iOS）UDID 取得 | ○ | ○ | ？[^2]
（iOS）UDID 登録〜再配布ツール | ○ | - | - 
開発者からテスターへの通知 | ○ | ○ | ○
料金 | [参照] (https://deploygate.com/payments)| Firebase 利用料 | Bitrise 利用料

[^2]: 要確認

## [おまけ] Bitrise で Firebase App Distribution

###### Firebase CLI をインストールするステップを追加

https://firebase.google.com/docs/cli?hl=ja#install-cli-mac-linux にて「CI/CD 環境での自動デプロイ」は自動インストールスクリプトが推奨されているので、そのとおり設定します。

```sh
$ curl -sL firebase.tools | bash
```

Bitrise ではこのスクリプトステップを追加するだけで実行できました。

```shell
+ curl -sL firebase.tools
+ bash
-- Checking for existing firebase-tools on PATH...
Your machine already has firebase-tools@]0;Firebase CLI7.8.1 installed. Nothing to do.
-- All done!
```

## [最後に] つまずきそうなところ共有

```
Error: App Distribution could not find your app x:xxx:xxxx:xxx. Make sure to onboard your app by pressing the "Get started" button on the App Distribution page in the Firebase console: https://console.firebase.google.com/project/_/appdistribution
```

これはたぶん Firebase コンソールで App Distribution を「開始」していません。Firebase コンソールの App Distribution ページに移動し、アプリを選択して「開始」しましょう。
そうでない場合は、アプリ ID が違うかもしれません。Settings [全般](https://console.firebase.google.com/project/_/settings/general/
) のマイアプリで確認して合わせましょう。

```sh
[!] Could not find action, lane or variable 'firebase_app_distribution'. Check out the documentation for more details: https://docs.fastlane.tools/actions
```

これはたぶん fastlane の App Distribution プラグインを追加していません。`$ fastlane add_plugin firebase_app_distribution` を実行して追加しましょう。

以上