LCL Engineers' Blog

バス比較なび・格安移動・バスとりっぷを運営する LCLの開発者ブログ

gradle-play-publisherを利用したGoogle Play申請の自動化

新年早々ですが、先日 Andriod版「高速バス比較 」アプリをリリースしました。

圧倒的なバス便の掲載数に、わかりやすい最安値比較、細かい条件での検索など、高速バス・夜行バスを探すためにはなくてないらないアプリです。

play.google.com

f:id:lcl-engineer:20170108005847p:plain

なお、iOS版は昨年の7月にリリースしており、現在では10万以上のダウンロードをしていただいております。

https://itunes.apple.com/app/apple-store/id1121562754?mt=8

さて、今回はAndriod版アプリの開発で行った、Google Play申請の自動化について、ご紹介します。

自動化のメリット

申請は、Google Play Developer Consoleから、必要な情報を入力し、画像をアップロード、APKのアップロードをすれば行えます。複雑なUIでもないので、それほど手間でもありません。

ただ、エンジニアであれば、ありとあらゆるデータをgitでバージョン管理して、全ての操作をコマンドで行いたいと考えるかと思います。アプリ説明や画像の軽微な変更する場合、目視では「変更点どこ?」ってなりますが、gitだと明確ですし、コマンド操作ができれば、CIサービスとの連携で誰でも申請ができるようになります。

自動化で利用するツール

Google Play Developer APIを利用することで、申請を自動化できます。申請ツールは、APIを利用して自作もできますが、gradelプラグインであるgradle-play-publisherを利用しました。

GitHub - Triple-T/gradle-play-publisher: Gradle Plugin to upload your APK and metadata to the Google Play Store

弊社であまり凝った利用はしていませんが、gradle-play-publisherではほぼ必要な機能はそろってると感じてます。

fastlaneのsupplyも良いとの噂を聞くので、iOS版のfastlaneに慣れている場合はこちらもおすすめです。

fastlane/supply at master · fastlane/fastlane · GitHub

事前準備

まず、APIの認証キーを取得する必要があります。これが結構面倒です。

以下を参考にJSONキーを取得します。

Getting Started  |  Google Play Developer API  |  Google Developers

アプリの新規作成はできないため、初回はWebコンソール上からアプリの情報を登録しておきます。

gradle-play-publisherのインストール

build.gradleに下記を追加して、gradle syncします。

buildscript {

    repositories {
        mavenCentral()
    }

    dependencies {
        // ...
        classpath 'com.github.triplet.gradle:play-publisher:1.1.5'
    }
}
apply plugin: 'com.github.triplet.play'
play {
    jsonFile = file("json keyのファイルパス")
}

gradlew tasksを実行すると、Play Store tasksが追加されています。( productFlavorsの定義によって追加されるタスクは異なります)

./gradlew tasks

Play Store tasks
----------------
bootstrapProductReleasePlayResources - Downloads the play store listing for the ProductRelease build. No download of image resources. See #18.
generateProductReleasePlayResources - Collects play store resources for the ProductRelease build
publishApkProductRelease - Uploads the APK for the ProductRelease build
publishListingProductRelease - Updates the play store listing for the ProductRelease build
publishProductRelease - Updates APK and play store listing for the ProductRelease build

Google Playに登録されているデータをダウンロードする

bootstrapReleasePlayResourcesタスクを実行すると、現在 Google Playへ登録されているデータをダウンロードできます。ただし、現時点のバージョンでは画像ファイルはダウンロードできません。

./gradlew bootstrapProductReleasePlayResources

実行すると以下のファイル・ディレクトリが生成されます。

f:id:lcl-engineer:20170108220548p:plain

画像はダウンロードされないので、生成されたディレクトリにファイルを追加します。申請に最低限必要なファイルは、以下の3種類です。

f:id:lcl-engineer:20170108233052p:plain

Google Playに申請情報をアップロードする

デフォルトの状態だと、画像ファイルがアップロードされてないため、build.gradleに「uploadImages = true 」を追加します。

play {
    jsonFile = file("json keyのファイルパス")
    uploadImages = true
}

publishListingReleaseタスクを実行すると、各種ファイルで定義された情報・配置された画像がGoogle Playへ登録されます。

./gradlew publishListingProductRelease

Google PlayにAPKをアップロードする

APKは、手動でアップロードをすると、誤ったAPKを登録してしまうミスが発生しうるので、必ず自動化したいところです。gradle-play-publisherでは、publishApkReleaseタスクでAPKをアップロードできます。

./gradlew publishApkProductRelease

build.gradleに「track = 'beta' 」を追加すると、Beta版としてAPKを登録できます。trackには、「'production'o r 'rollout' or 'beta' or 'alpha'」のいずれかが指定できます。

play {
    track = 'beta' 
    jsonFile = file("json keyのファイルパス")
    uploadImages = true
}

まとめ

上記で記載したとおり、gradle-play-publisherでは非常に簡単に自動化が可能です。リリース時のストレスを少しでも下げるために、申請作業は必ず自動化をおすすめします。