fastlaneを使ってPlay Storeの内部テストにAABとリリースノートのアップロードを自動化する

2022-07-08

はじめに

モバイル開発においてなにか自動化したいときにはfastlaneを使うのは、ふつうだと思います。そんなふつうをあまりしてこなかった私ですが、業務で fastlane を使ってリリースノートと AAB をアップロードする方法を色々やってみたのでその時の得た知見を書いていきます(言い訳すると iOS 開発で使う APNs などの自動化はやってました…少しだけ…App Store Connect のアップロードとかはやったことないけど…)。

前提としてすでにアップロードに必要な Play Store での API 設定や bot ユーザの作成をしており、Appfilejson_key_fileに認証に必要な Json ファイルのパスを設定しているとします。

実装

いきなりですが、Fastfile の中身を示します。

Fastfle
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 をアップロードしたいので、taskbundleになります。私は最初、gradle(task: "assembleRelease")をやっていましたが、これだと APK が生成されてしまい AAB は出来ません。自分はハマってしまったので皆さんはお気をつけ下さい…

今回は Relase アプリをアップロードしたいので、build_typeReleaseを指定します。

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/changelogsversionCodeの数字.txtというファイルを作ると、自動でそのファイルの中身をアップロードします。例えば、versionCode が 1 だったら、1.txtというファイルを作る必要があります。毎回リリースノートを変えていない場合は、default.txtを作っておくことで勝手にアップロードされるみたいです(こちら詳しくは、公式ドキュメントの Changelogs (What’s new)を見て下さい)。

skip_upload_imagesskip_upload_screenshotsは正直何を指しているか分かりません。おそらくストアに掲載する写真を指しているのですが、公式ドキュメントの説明を読んでも分かりませんでした(screenshots は分かるのですが、images が分かりませんでした)。が、画像自体は頻繁に変更しないので skip するように true にしています。

skip_upload_apkは APK をアップロードするかどうかです。アップロードしないので true で skip します。

release_statusでは公開するかどうかです。公開はせずに下書きのままでいてほしいので、draftを指定します(この記事を書きながら、内部テストだったら速攻で公開しても良さそうな気もしてきました)。

最後に

今回は、fastlane を使った Android アプリ(AAB)アップロードをやってみました。普段のリリース作業は、GUI 上でポチポチ手作業でやっていたので内部でどのようにやっているかあまり分からない状態だったのでとても勉強になりました。Gradle などはあまりに触らないので、なるほど〜の連続でした。忘れないようにしたいと思いました。

skip_upload_imagesskip_upload_screenshotsの違いがよく分かってないので、誰かに聞いみようと思います。もしくは教えて下さい。

参考サイト

Tatsumi0000

Written by Tatsumi0000 モバイル開発が好きなエンジニアのブログです. GitHub

Copyright © 2023, Tatsumi0000 All Rights Reserved.