Firebase App Distributionを使って内部向けに継続的にネイティブアプリを配信する
はじめに
ネイティブアプリの内部テストを円滑にすすめるために、Firebase App Distributionを使ってアプリを配信する仕組みを触る機会があったので手順をまとめておきます。
Visual Studio App Centerを使ったアプリ配信の仕組みについては以前まとめたこちらをご確認ください。
Firebase App Distributionとは
Firebase App DistributionはFirebaseに含まれるアプリ配信機能です。モバイルアプリ開発において、Push通知機能やCrashlytics・Analyticsの連携などでFirebaseを使う機会は多いと思います。開発したアプリを実機に配信する方法はケーブルをつないで手動でインストールする方法もありますが、このようなアプリ配信サービスを使うことで、開発中のアプリをインターネット越しにアプリを配信することができます。リモートワークが当たり前になった今、モバイルアプリの内部配信にうってつけの機能ですね。
Firebase App Distributionには以下の特徴があると公式に記載されています。
- Cross-platform
- Fast distributions
- Fits into your workflow
- Tester management
- Works with Crashlytics
配布対象はAndroid、iOSアプリに対応していて、CLIやFastlane経由で利用できるようです。またアプリの配信先としてテスターグループが管理できるようです。 ただしFirebase App DistributionはまだBetaマークがついているので正式版ではない点に注意が必要です。
今回はベータ版ではありますが、Firebase App Distributionを使って実際にアプリを配信して実機端末にインストールするまでの手順をまとめます。
1. Firebaseプロジェクトを作成する
まずFirebaseコンソール上で今回の検証用の新しいFirebaseプロジェクトを作成します。Push通知やCrashlytics用にすでにプロジェクトがある場合は不要です。
プロジェクトを作成したら配信用のiOS、AndroidのアプリをFirebaseプロジェクトと紐付けます。Push通知やCrashlyticsのときと同様にアプリのApplication ID、Bundle IDを入力するとFirebaseの連携用のjsonファイル・plistファイルがダウンロードできます。
このあとそれぞれアプリにFirebase SDKを組み込んでビルドをするのですが、Firebase App Distributionの利用のみであればApplication ID、Bundle IDの登録までで大丈夫です。以下のスクリーンショットのようにアプリが登録されていれば設定は完了です。
ここに表示されているApp IDは後で利用するのでそれぞれメモしておきましょう。
2. apkファイル・ipaファイルを作成する
Visual Studio App Centerのときと同様に、ここではビルド済みのapkファイル・ipaファイルを配布するというシナリオにします。
今回もFlutterのプロジェクト作成時のアプリをベースにapkファイルとipaファイルを作成しておきます。こういうときはクロスプラットフォームは便利ですね。
apkの署名はデフォルトのデバッグプロファイルで、ipaは後でインストールする端末の情報を含んだprovisioning profileファイルで署名したものを用意します。
なおFlutterを使ってapk・ipaファイルを作成する手順はこちらを参考にしてください。
3. Firebase App Distributionへapk・ipaファイルをアップロードする
Firebase App Distributionへのアップロード方法は以下の方法があります。
今回はCI/CDパイプラインでの利用を想定して、2番目のFirebase CLIを利用することにします。
Firebase CLIを公式のガイドに沿ってインストールします。
今回利用したバージョンは以下です。
$ firebase --version 9.1.2
Firebaseへのアップロードするために利用するトークンは以下のコマンドで発行することができます。
$ firebase login:ci
コマンドを実行するとGoogleの認証画面が立ち上がるので、さきほど作成したFirebaseプロジェクトに紐づくGoogleアカウントで認証します。認証が成功するとトークンが取得できます。
$ firebase login:ci Visit this URL on this device to log in: https://accounts.google.com/o/oauth2/auth?xxxxxxxx Waiting for authentication... ✔ Success! Use this token to login on a CI server: 1//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Example: firebase deploy --token "$FIREBASE_TOKEN"
Firbease CLIを使ったApp Distributionへのアップロードコマンドオプションは公式ドキュメントに記載されています。パラメータ一覧は以下になります。
- app : Firebaseで登録したApp ID
- token : Firebaseのアクセストークン
- release-notes (release-notes-file) : リリースノートの文字列(ファイル)
- testers / (testers-file) : アプリのインストールを招待するメールアドレス、複数の場合はカンマ区切り(ファイル)
- groups / (groups-file) : アプリのインストールを招待するグループ、複数の場合はカンマ区切り(ファイル)
- debug : デバッグフラグ、オンの場合はログファイルを出力する
appは先程メモしたApp ID、tokenは発行したアクセストークンを指定すればよさそうです。
配信対象のテスターやグループはまだ未設定だったのでFirebase Console上で作成します。今回はサンプルとしてDevelopersグループとSalesMembersというグループを異なるメールアドレスで1つずつ設定してみました。
設定するパラメータが準備できたので、あとはCLIを実行するだけです。App Centerと違ってFirebaseの場合はワンライナーでかけます。上記のApp Distribution用のパラメータに加えて、FirebaseのプロジェクトIDも忘れずに設定しましょう。
$ firebase appdistribution:distribute ${UPLOAD_FILE_PATH} \ --token "${FIREBASE_AUTH_TOKEN}" \ --project "${FIREBASE_PROJECT_ID}" \ --app "${FIREBASE_APP_ID}" \ --release-notes "${RELEASE_NOTE}" \ --groups "${GROUP_NAME}" --debug
アップロードに成功すると以下のようなログが表示されます。
... ✔ uploaded distribution successfully! i adding release notes... ... ✔ added release notes successfully i adding testers/groups... ... ✔ added testers/groups successfully
コンソール画面を見るとアプリがアップロードされていることがわかります。
Androidアプリと同様にiOSアプリもアップロードします。
4. アプリを端末にインストールする。
アップロードが完了するとDevelopersに登録したメールアドレスにメールが届いているので、インストールする端末でメールを確認します。
Android上でapkファイルをインストールする
メールの案内に従ってアプリをインストールします。メールを開くとFirebase App Distributionへの権限追加の案内がでるので内容を確認して許可してインストール画面へ遷移します。
インストール画面ではFirebase App Tester Appのインストールのポップアップが出ます。これはWeb APKというやつなのだろうか、案内に従ってインストールします。Google Play以外からのインストールなのでもろもろの権限の追加を行ってインストールします。
Firebase App Tester上で利用するGoogleアカウントで認証し、もろもろの権限を設定すると配信中のアプリがダウンロードできるようになります。リストにあるアプリをダウンロードすると無事配信されたアプリをインストールすることができます。
iOS上でipaファイルをインストールする
iOSも同様にメールの案内に従ってアプリをインストールします。一連の作業はSafariで行う必要があるためSafariの起動を促されます。SafariでコピーしたURLを起動してGoogleアカウントで認証します。
iOSの場合はFirebase App DistributionからのOver The Air方式でのアプリのインストールを許可するために、プロファイルのインストール作業が別途必要になります。合わせてFirebase App Distributionへデバイス登録の処理が走ります。
プロファイルの設定が完了するとアプリがインストールできるようになります。Firebase App Testerへのショートカットもホームスクリーンに追加されていますね。
以上がFirebase App DistributionでのAndroid、iOSアプリの配布・インストール手順になります。
インストールしたあとにコンソール画面を見てみるとちゃんとインストールされた数がカウントされています。
5. テストグループを使った権限制御
上記の手順ではDevelopersグループへの配信を行っていました。試しにSalesMembersのアカウントでダウンロード画面を見てみたら以下のような画面になっていました。きちんと配信対象の制御ができてそうです。
パイプラインとの統合
以上の検証からFirebase CLIを使ってApp Distributionを使ったアプリ配布ができました。 あとはtag pushやreleaseブランチ作成契機でapkファイル作成、ipaファイル作成を行った後に、Firebase CLIを使ってApp Distributionにアップロードするパイプラインを作成すれば、以下のようなモバイルアプリの継続的デリバリーを実現するCDパイプラインが実現できそうです。
Release Noteパラメータにtag名を連携するとアプリのバージョン区別として利用できそうです。
その他の機能
Firebase App Distributionはアプリの配布以外にもiOSのみですが、in-app alertsという機能が提供されているようです。 こちらをアプリに組み込んでおくと、最新のアプリが配布された場合にアプリ上でダイアログで教えてくれるようになるようです。
その他のアップデートは11月の公式ブログで紹介されています。SDK経由でこれから様々な機能追加が期待されますね。
まとめ
以上がFirebase App Distribution経由でapk・ipaファイルを配信する手順になります。
内部で手軽にアプリを配信できるような仕組みを用意しておくことで、モバイルアプリでもサーバサイドと同等レベルのよりEnd-to-Endの継続的デリバリーが実現でき、QAやUI確認等の開発のフィードバックライフサイクルをより短縮することができるでしょう。