Android
fastlane

アプリで日々のビルドを配布する作業を自動化する時に考えた事

現在開発中のdevelopブランチの最新を日々自動的に配布したい。
日々配布してQA担当の方にテストしていただいたり、今のアプリの動きどうなってるんだろ?と思った時にさくっと確認出来て便利。

developブランチにMergeしたタイミングでapk作るのはちょっと細かすぎるかな?という気持ちがあって、1日に1回。
でも、何もdevelopにMergeされてない時にもapkが作られるのでそれはそれで微妙かもしれない。

やりたい事

ざっくり書くと以下のような感じ。

  • 日々の最新のdevelopを使ってFabricのBetaで配布したい
  • バージョン番号もしくは、ビルド番号をカウントアップしてどのビルドなのかをわかるようにしたい

スケジューリング

bitriseを使う。workflowを簡単に設定できて非常に便利。しかしお金はかかりますよと。
毎日指定した時間に発動させる。

バージョン番号もしくは、ビルド番号のカウントアップ

versionCodeとversionNameのどちらかを更新する

日々ビルドしてアップするので、一体どのビルドなんだろう。。。??
というのをわかるようにしないと混乱してしまう。

versionCodeとversionNameのどちらをカウントアップするのがいいのだろうか?

versionCode 1
versionName "1.0.0-alpha.1” // こちらをカウントアップするのがいいと考えた

軽く考えたところで、versionNameの方を変更する事にした。
気分的な問題だけど、versionCodeを日々カウントアップすると実際にアプリをリリースする時に無駄に増えた状態でリリースされてしまいそうと考えたからだ。

日々のビルドは、versionNameの最後に-alpha.1とつけて配布する事にしてみる。

どうやってversionNameの更新するか?

やろうと思えば、いろいろと方法があると思う。

  • シェルスクリプト
  • gradle
  • fastlane

gradleでやるには
https://stackoverflow.com/a/21951328/2172277
この辺を参考にすれば書けるかもしれない。

また、ちょっと話はそれるのだが、将来的にGoogle Playへのデプロイも自動化したいので、その辺も考慮に入れると、

Gradleのgradle-play-publisher vs fastlane

という感じになってくる

どっちがいいんだろうか。。。?と調べてみたところ、1年以上前だけど、いい比較記事を見つけた!
http://qiita.com/shiraji/items/518cb1a20671a6388dd7

fastlaneの方が確かに開発が活発そうな感じなのと、
https://docs.fastlane.tools/getting-started/android/setup/
この辺のドキュメントみたりして比較記事から1年以上たって、いろいろと機能が追加されてそうなので、fastlaneを使ってみる。GroovyよりもRubyの方が僕にとってはコードが読めそう。

fastlaneを使ってversionNameを更新する

fastlaneの準備とかもろもろはちょっとめんどくさくなったので省略する。
versionNameを更新するactionを以下のような感じで作ってみた。

https://gist.github.com/mapyo/e0387f94bf94f6bcb119be7b40ea23ac

fastlane使ったの初めてだし、action作ったのも初めてなのでそんな感じ。
後は、versionNameなどはこの表示形式にする。という決め打ち前提なので、あまり使い勝手は良くないかもしれない。

ビルドと配布

fastlaneのlaneの中で以下のような感じでやる

gradle(task: "clean assembleDebug crashlyticsUploadDistributionDebug")

crashlytics用のactionも用意されているっぽい感じだったけど、既にgradleで配布出来てたし、別に使わなくてもええやん。という気持ちで雑にgradleを使うようにした。

所感

fastlane、今まで全然使った事なかったけど、Android開発者にとっても、便利そうだ!!
そして、bitriseが結構便利です!!

今度はアプリをgoogle playに配布するとこら辺を自動化してみたい気持ち。