versionCodeのベストプラクティス

Photo by Lalith T on Unsplash

versionCode について、ぼくがこれまで見てきたプロジェクトで結構失敗してるケースを見かけてるので、改めて versionCode をどう扱えばよいのかをまとめます。

アンチパターン

往々にして間違いやすいパターンがあり、それは versionName と同じ値を使おうとするパターンです。

例えば以下のような感じです。

versionCode 10200
versionName "1.2.0"

versionName を元にメジャー、マイナー、パッチにそれぞれ2桁ずつ割り当てて、それを数値化したものです。

この場合の大きな問題としてはPlay Consoleアップするときに問題になる可能性があります。

例えば、テストトラックで配布したい場合です。特に修正がなく、そのままプロダクションリリースするときは問題はないですが、修正してテストトラックで再配布したいときに versionCode を上げる必要があります。

このとき、 versionCodeversionName と同じような扱いにしてるため、 versionName をどうするかが問題なります。まだプロダクションリリースをしていないにも関わらず、 versionName の値が変わることになります。

ベストプラクティス

ベストプラクティスは非常にシンプルです。

最初のリリースでは versionCode1 を設定して、Play Consoleにアップするたびに versionCode をインクリメントするだけです。

例えば、 1.2.0 が8回目にPlay Consoleにアップするときは以下のようになります。

versionCode 8
versionName "1.2.0"

ドキュメントにも以下のように書いてあります。

Typically, you would release the first version of your app with versionCode set to 1, then monotonically increase the value with each release, regardless of whether the release constitutes a major or minor release.

これだけです!

versionNameを関連付けたい場合

どうしても versionCodeversionName を関連付けたい場合は、以下のように、 メジャー、マイナー、パッチに加えて、ビルド番号みたいな値を追加してください。

versionCode 1020000 // 末尾二桁を自由に使えるようにする
versionName "1.2.0"

計算でやるには以下のようにすると良いでしょう。

versionCodeversionName を関連付けたいときってどういうときかを考えたときに、例えばHTTP ヘッダーに数値として含めたいとか、そういうときじゃないかなと思います。

このときに別に versionCode を使う必要はまったくなく、新しく BuildConfig の値を設定することも検討しましょう。

最後に

versionCode の運用は最初にミスると後々変更することが難しくなってくるものです。しっかりと versionCode が何に使われてるのかを理解しましょう。

参考

https://developer.android.com/studio/publish/versioning

Programmer / Gamer / Google Developers Expert for Android, Kotlin / @STAR_ZERO