fastlaneを使ってPlay Storeの内部テストにAABとリリースノートのアップロードを自動化する
/ 7 min read
Updated:Table of Contents
はじめに
モバイル開発においてなにか自動化したいときには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' ) endAAB ファイルの生成
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の違いがよく分かってないので、誰かに聞いみようと思います。もしくは教えて下さい。