こんにちは。Androidエンジニアのakatsuki(@akatsuki174)です。
先日、弊社では全社合宿を行いました。私は「Firebase App Distributionで簡単にアプリを配信できるようにするぞ!」という目標を立て、無事合宿中に対応が完了しました。ということでFirebase App Distributionを使ってAndroidアプリを配信する方法について書こうと思います。 ※以降、書くのが面倒なのでFirebase App DistributionをFADと略します。 ※この記事はpotatotips #67の登壇補足資料でもあります。
想定読者
- アプリ配信を簡単に実現したい人
- FADがどんなものなのか知りたい人
Firebase App Distributionとは
Firebaseが提供している、テスターにアプリを配布する仕組みです。比較的最近パブリックベータになりました。
フロー全体像
弊社では PR提出→LGTMをもらう→QAさんにテストしてもらう→developマージ という流れで開発しているので、PRが提出された時、及びPRが修正されたタイミングでアプリが自動配布されるのが望ましいと考えました。なので従来のfamm-pr-assist
というワークフローに新しく_firebase-distribution
というワークフローを繋げる流れにしています。
また、任意のタイミングでワークフローを実行したくなった時にBitriseにログインしなくても済むよう、SlackからSlash Commandsを使ってワークフローを実行できるようにもしました。
下準備
テスターグループの作成
FAD用のテスターグループを作成します(すでに存在するグループを使っても大丈夫です)。この時、グループ名をメモしておいてください。これはコマンドラインツール等でグループを指定する時に使うものです。
Firebase App IDの把握
設定(歯車アイコン)→プロジェクトの設定→アプリ IDをメモしておきます。
fastlane導入
まだプロジェクトに導入してなかったのでbundler経由で入れました。
加えてFADのプラグインも入れました。
$ bundle exec fastlane add_plugin firebase_app_distribution
Firebase tokenの設定
BitriseでFirebaseを利用できるようにtokenを取得します。
$ firebase login:ci
tokenをコピーしたらBitriseのWorkflow EditorからEnv Vars
タブを開き、該当のワークフローの環境変数に貼り付けます。
lane作成
以下の記述を追加します。アプリIDは「Firebase App IDの把握」の工程で、テスターグループ名は「テスターグループの作成」の工程でメモったものを記入します。
platform :android do desc "distribute famm app" lane :distribute do gradle( task: "assemble", flavor: "[フレーバー名]", build_type: "[タイプ名]" ) firebase_app_distribution( app: "[アプリID]", groups: "[テスターグループ名]", release_notes: last_git_commit[:message], firebase_cli_path: "./node_modules/.bin/firebase" ) end end
Bitriseワークフロー作成
最終的にこのようなステップを組み合わせました。
famm-pr-assist
の方でGit cloneなどをやっているので、_firebase-distribution
の方はかなり少ないステップ数になっています。
ここからは、それぞれのステップでやっていることを説明します。
Scriptステップ
Firebase CLIが使えるよう、Script content
に以下の記述を追加します。
## firebase tools DL npm install firebase-tools
fastlaneステップ
fastlane lane
にlane名を入力します。
android [lane名]
Send a Slack messageステップ
Slackの新規アプリ作成画面から、新しくアプリを作成します。
その後Incoming Webhooks
をクリックして、
一番下にあるWebhook URLをコピーします。
Bitriseに戻り、Secrets
タブでWebhook URL用の環境変数を追加します。
これをSend a Slack messageステップのSlack Webhook URL (Webhook or API token is required)
に設定します。
ここまででBitriseの一連のフローが完成しました👏
Slackからコマンド実行
おまけとして、Slackから直接ワークフローを実行できるようにしてみます。
Workflow Editorから抜け、Code
タブから、INCOMING WEBHOOKS
→SETUP MANUALY
→Slack
を選択します。この時、Webhook URLをメモっておきます。
SlackのManage→App DirectoryからSlash Commandsを検索、追加します。
今回は以下の設定をしてコマンドを追加しました。
Command: /bitrise_android URL: [先程メモったWebhook URL] Autocomplete help text - Usage hint: [branch:ブランチ名|workflow:ワークフロー名]
実行結果
上記全ての設定を踏まえSlackからコマンドを実行してみます。
しばらく経つと結果が通知されます。
アプリを受け取るには
ここまでで配布する仕組みは整えたので、今度は受け取るための設定をします。
テストメンバーを招待する
テスターを追加する方法は、
- 招待リンクを発行して、踏んでもらう
- メールアドレスを教えてもらって個別に招待する
の2つの方法があります。とはいえ1の手法をとった場合も2と同じように招待メールが届くので、大きな差はありません。
メールを受け取った側は招待と規約をAcceptすることでダウンロードできるようになります。これでテストアプリが使えるようになります。
下に出ているFirebase App Testerは、配布済みアプリを一覧で表示してくれるアプリです。入れておくと便利なのでその説明もします。
Firebase App Tester
先程のスクショの下に出ていた「Try the app」をタップします。app-tester-vX-XX.apkが「ファイル」アプリに保存されるので展開します。きっとホーム画面にこんなアイコンが追加されているはず。
このアプリを開くと配布済みアプリの一覧を見ることができます。管理しやすくなりましたね。
導入してみた感想
FADに限りませんが、何もせずとも自動で配布できるのはいいなと思いました。
QAさんにも感想を聞いたところ、
- 😄アプリのダウンロード時間が早い
- 😄招待リンクさえもらえればあとはQAチーム側で初期設定が完了するので楽
- 🤔どれがどのアプリなのか判別しづらい
- タイトルがかなり省略される
- 同タイトルの最新版を探しづらい
- 設定の仕方で改善できる部分もあるけど、できない部分もある
- 🤔招待される以前のバージョンが見えない
- 🤔古いバージョンだと見つからないことがある
といった具合でした。
ちなみに「このバージョンはダウンロードできません」という表示が出てきてことごとくダウンロードできないときがありましたが、一度トップに戻って再度バージョン一覧に遷移したらダウンロードできるようになりました。
総じてメリットデメリットありますが選択肢の一つとして覚えておいて損はない手段だと思いました。ので、自動配布環境を作るときはこの記事を思い出してみてください。
P.S.
子育て家族アプリFammを運営するTimers inc.では、現在エンジニアを積極採用中!
急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください!
採用HP: http://timers-inc.com/engineerings