fastlaneを使ってPlay Storeの内部テストにAABとリリースノートのアップロードを自動化する
2022-07-08
はじめに
モバイル開発においてなにか自動化したいときにはfastlaneを使うのは、ふつうだと思います。そんなふつうをあまりしてこなかった私ですが、業務で fastlane を使ってリリースノートと AAB をアップロードする方法を色々やってみたのでその時の得た知見を書いていきます(言い訳すると iOS 開発で使う APNs などの自動化はやってました…少しだけ…App Store Connect のアップロードとかはやったことないけど…)。
前提としてすでにアップロードに必要な Play Store での API 設定や bot ユーザの作成をしており、Appfile
のjson_key_file
に認証に必要な Json ファイルのパスを設定しているとします。
実装
いきなりですが、Fastfile の中身を示します。
lane :upload_playstore do
gradle(task: "clean")
gradle(
task: "bundle",
build_type: 'Release',
flavor: '' # Productflavorsがあったらここに記入
)
supply(
aab: lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH],
track: 'internal',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_apk: true,
release_status: 'draft'
)
end
AAB ファイルの生成
gradle(task: "clean")
でビルドディレクトリを削除します。まっさらな状態にします(ここは無くてもいいかもです)。
gradle(task: "bundle", build_type: 'Release',flavor: '')
では AAB をアップロードしたいので、task
はbundle
になります。私は最初、gradle(task: "assembleRelease")
をやっていましたが、これだと APK が生成されてしまい AAB は出来ません。自分はハマってしまったので皆さんはお気をつけ下さい…
今回は Relase アプリをアップロードしたいので、build_type
にRelease
を指定します。
Productflavors を使って処理の分岐などをしているとかであれば、flavor
に該当の Productflavors を設定して下さい。
これで AAB の作成は出来ます。次は実際に Play Store にアップロードする手順についてです。
Play Store へのアップロード
supply
で実際に Play Store にアップロードをしていきます。supply
には色々なオプションがあります。詳しくは公式ドキュメントの Parameters をご参照下さい。ここでは自分が使ったものだけに絞って説明したいと思います。
aab
で生成した AAB のパスを指定します。lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH]
の中にビルドした AAB のパスが入っているのでこれを使います。
track
は内部テストにアップロードしたいので、internal
を指定します。デフォルトは、production
なのでお気をつけ下さい。
skip_upload_metadata
では、リリースノート以外のメタデータをローカルからアップロードするか指定します。今回はリリースノートだけアップロードできればいいので skip するために true にしています。
リリースノートは Play Store のプロモートを使えばそのまま製品版にも持ち越せそう(多分なので要検証)なので、内部テストの時点でアップロードしたいのです。ここで言うメタデータとはおそらくですが、アプリの名前やアイコンなどのことだと思います(参考)。
リリースノートを定義するファイルですが、日本語だったら、fastlane/metadata/android/ja-JP/changelogs
にversionCodeの数字.txt
というファイルを作ると、自動でそのファイルの中身をアップロードします。例えば、versionCode が 1 だったら、1.txt
というファイルを作る必要があります。毎回リリースノートを変えていない場合は、default.txt
を作っておくことで勝手にアップロードされるみたいです(こちら詳しくは、公式ドキュメントの Changelogs (What’s new)を見て下さい)。
skip_upload_images
とskip_upload_screenshots
は正直何を指しているか分かりません。おそらくストアに掲載する写真を指しているのですが、公式ドキュメントの説明を読んでも分かりませんでした(screenshots は分かるのですが、images が分かりませんでした)。が、画像自体は頻繁に変更しないので skip するように true にしています。
skip_upload_apk
は APK をアップロードするかどうかです。アップロードしないので true で skip します。
release_status
では公開するかどうかです。公開はせずに下書きのままでいてほしいので、draft
を指定します(この記事を書きながら、内部テストだったら速攻で公開しても良さそうな気もしてきました)。
最後に
今回は、fastlane を使った Android アプリ(AAB)アップロードをやってみました。普段のリリース作業は、GUI 上でポチポチ手作業でやっていたので内部でどのようにやっているかあまり分からない状態だったのでとても勉強になりました。Gradle などはあまりに触らないので、なるほど〜の連続でした。忘れないようにしたいと思いました。
skip_upload_images
とskip_upload_screenshots
の違いがよく分かってないので、誰かに聞いみようと思います。もしくは教えて下さい。