【Quipperブログ】Gradle Play Publisher プラグインをアップデートする

こんにちは。Quipper採用担当の鈴木です。今回の記事は、 @geckourによるGradle Play Publisher プラグインをアップデートするです!是非、ご覧ください!

はじめましてこんにちは、4月に Native チームに加わった @geckour です。

今回は、Google Play Console の管理を自動化してくれる Gradle プラグインである Gradle Play Publisher のバージョンを v1.2.2 から v2.2.1 に上げた話をします。

経緯

僕が現在触っているプロダクトでは、リリース作業時にコミットを指定して CI を実行すれば Google Play に公開される、という自動化が行われており、それを実現するためにこれまで Gradle Play Publisher の v1.2.2 を使っていました。
しかし、このバージョンで我々はある問題を踏み抜きました。

まず前提として

  • v1.0.0 では 50% リリースで公開していた
  • 新しいリリースの v1.0.1 は hotfix であるため v1.0.0 を上書きして 100% 公開でリリースしたい

という需要があったので (バージョン名は仮) 、先程のリポジトリにある README.md を参照しつつ `[module]/build.gradle`の設定を変更しました。

before

track = 'rollout'
userFraction = 0.5

after

track = 'production'
userFraction = 1

しかし、このように変更した上で `gradlew publishApk`
としても、有効なトラックがないと怒られてリリースは公開されませんでした。

この時は手動で段階公開中のリリースを 100% 公開にし、再度新しいリリースを公開するという対応をしましたが、正直煩雑な上に人間のオペレーションがガッツリ入るのであまりやりたくはない作業でした。

そこで、この問題は Gradle Play Publisher v1.2.2 では Google Play Developer API の v3 に対応していないことが問題なのかもしれないと考え、また以前より

  • Gradle Play Publisher の v1 系のサポートが終了している
  • Gradle Play Publisher v1.2.2 において rollout
    の設定条件が分かりづらくオペレーションミスを生みやすい

といった問題を抱えていたこともあり、今回重い腰を上げて Gradle Play Publisher を v2.2.1 にアップデートするに至りました。

Gradle Play Publisher の設定マイグレーション

README.md の diff を見ながら作業を進めました。

具体的には

  • `[projectRoot]/build.gradle`

before

buildscript {
dependencies {
classpath 'com.github.triplet.gradle:play-publisher:1.2.2'
}
}

after

buildscript {
dependencies {
classpath 'com.github.triplet.gradle:play-publisher:2.2.1'
}
}
  • `[module]/build.gradle`

before

play {
jsonFile = file('hoge.json')
track = 'rollout'
userFraction = 0.5
}

after

play {
serviceAccountCredentials = file('hoge.json')
track = 'production'
userFraction = 0.5
}
  • ファイルのリネーム・ディレクトリ構造の変更
    • [module]/src/main/play/contactEmail
      [module]/src/main/play/contact-email.txt
    • [module]/src/main/play/contactPhone
      [module]/src/main/play/contact-phone.txt
    • [module]/src/main/play/contactWebsite
      [module]/src/main/play/contact-website.txt
    • [module]/src/main/play/defaultLanguage
      [module]/src/main/play/default-language.txt
    • [module]/src/main/play/ja-JP/listing/fulldescription
      [module]/src/main/play/listings/ja-JP/full-description.txt
    • [module]/src/main/play/ja-JP/listing/shortdescription
      [module]/src/main/play/listings/ja-JP/short-description.txt
    • [module]/src/main/play/ja-JP/listing/title
      [module]/src/main/play/listings/ja-JP/title.txt
    • [module]/src/main/play/ja-JP/listing/video
      [module]/src/main/play/listings/ja-JP/video-url.txt
    • [module]/src/main/play/ja-JP/whatsnew
      [module]/src/main/play/release-notes/ja-JP/default.txt

このような変更を行いました。
しかし、これによって私達は 50% の段階公開のリリースが作成されることを期待していたのですが、実際にできたのは 100% 公開のリリースでした。

Google Play Developer API のドキュメントを読んでみる

Google Play Developer API のドキュメント によると、段階公開の割合を指定する値であるところの userFraction が有効であるためにはそのリリースの statusinProgress であるか halted
である必要がある と書いてあります。
つまり、プラグインの設定は

play {
track = "production"
userFraction = 0.5
releaseStatus = "inProgress"
}

のようにする必要があり、 releaseStatus を省略してはいけない ということです。
そこでもう一度プラグインの README.md を見てみると…
サンプルはあるものの、注意書きは特に何もありませんでした。
また、各設定値のデフォルト値についての記述がないこともミスリーディングを招いているのではないかと思いました。

おわりに

同じ悲しみを抱く人が少しでも減るように、 Pull request を出してみました。OSS って良いですね!

===== イベントのご案内 =====

本日TECHPLAYにてスタディサプリ/Quipper Product Meetup #3 を開催します。今回のテーマはSREで、以下4つのセッションをお届けする予定です。

  • Observability in StudySapuri
  • Canary release - フレームワークのアップグレードを安心して進めるためのリリース戦略
  • gRPC in スタディサプリ ENGLISH
  • CQRS+ESをKinesis,Spark,RDB,S3でやってみた
Quipper Ltd's job postings
7 Likes
7 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more