こんにちは。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
が有効であるためにはそのリリースの status
が inProgress
であるか 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でやってみた