Androidアプリ開発におけるセマンティック・バージョニング
目次
Androidアプリのバージョン番号を X.Y.Z
形式、いわゆるセマンティック・バージョニングにすることは必須ではありません。Androidではバージョン番号の指定を versionName
で行いますが、 versionName
は文字列でありさえすれば問題ありません。なのでバージョン番号の命名は好きにしたらいいんですが、セマンティック・バージョニングを採用するメリットも確かにあります。
そもそもセマンティック・バージョニングとは
バージョン番号を メジャー.マイナー.パッチ
とするバージョニングのルールです。互換性のないアップデートでメジャーを、互換性があり機能が追加されるアップデートでマイナーを、後方互換性を伴うバグ修正でパッチを、それぞれインクリメントしていきます(セマンティック バージョニング 2.0.0 | Semantic Versioning)。
Androidアプリのユーザーが上記リンクに示されるようなモチベーションを感じることは稀だと思いますので、Androidアプリ開発においてセマンティック・バージョニングを導入する必然性は薄いと思われます。メリットがあるとすれば、ユーザーではなく開発者の側でしょう。
すなわち、「次のアップデートはメジャーアップデートだから、メジャー番号を上げたバージョンをリリースしよう」とか、「プロダクションにバグがあるからhotfixを出そう、パッチ番号を上げたバージョンをリリースしよう」というような場面では、セマンティック・バージョニングを用いることで開発者内のコミュニケーションを円滑にできる効果があると思います。
versionName
と versionCode
Androidアプリには、ふたつのバージョンが存在します。前述の versionName
と、 versionCode
です。
versionName
が文字列であったのに対し、versionCode
は正の整数で、内部的なバージョン番号として使用されます。Google Playでは versionCode
を用いてアプリのバージョン管理を行なっており、端末にインストールされているアプリの versionCode
よりも小さな versionCode
を持つアプリを端末にアップデート・インストールすることはできません。
versionCode
については、最初のリリースで 1
を設定し、リリースごとに単純に値を増やしていくというのが最もあり得る運用であると思います。 versionCode
まで頑張ってセマンティックにはしないということですね。
一般的に、アプリの最初のバージョンをリリースするときは versionCode を 1 に設定し、リリースを重ねるたびに、メジャー リリースかマイナー リリースかにかかわらず、単純に値を増やします。つまり、versionCode 値は、ユーザーに表示されるアプリのリリース バージョンを必ずしもなぞっているわけではありません。アプリと公開サービスでは、このバージョン値をユーザーに表示するべきではありません。(アプリのバージョニング | Android Studio | Android Developers)
その他、バージョン番号 X.Y.Z
に対して versionCode
を 10000 * X + 100 * Y + Z
というように決め、 versionName
と versionCode
を連動させるように決めているプロジェクトもあるかと思います。 versionCode
まで頑張ってセマンティックにするパターンです。
この場合は、内部テスト版の配信・アップデートで versionCode
を増やす場合を考慮して versionCode
のルールを設計しておかないといけません。例えば、下1桁や下2桁を内部テストのアップデート用に取っておく、とかです。つまり、 1000000 * X + 10000 * Y + Z * 100 + 内部テスト用
みたいなルールですね。ちょっと煩雑になってしまいますね。
Reference
書いている人 😎

茨城県つくば市在住のモバイルアプリケーションアーキテクト(Androidが得意です)。モバイルアプリのアーキテクチャ、自動テスト、CI/CDに興味があります。いわゆる「レガシーコード」のリファクタリング・リアーキテクチャが好きです。
👉 もっと詳しく
著書 ✍
Android 依存性注入 ヒッチハイク・ガイド🧳
Androidアプリでの依存性注入(Dependency Injection)に入門するためのガイダンスです。依存性注入の概念やメリットを理解し、Dagger Hiltを用いてAndroidアプリに適用する方法を解説しています。
ソフトウェアデザイン 2023年6月号📚
特集「クリーンアーキテクチャとは何か?」の第5章「モバイルアプリ開発における実践」を執筆しました。
Android クリーンアーキテクチャ ヒッチハイク・ガイド🧳
Androidアプリでのクリーンアーキテクチャに入門するためのガイダンスです。クリーンアーキテクチャの概念を理解し、Androidアプリに適用する方法を解説しています。
Android ユニットテスト ヒッチハイク・ガイド🧳
Androidアプリのユニットテストに入門するためのガイダンスです。初学者が混乱せずにAndroidアプリのユニットテストを書き始めることができる、ということを目的としています。
Android MVVMアーキテクチャ入門🛠
Androidアプリ開発の初学者に向けた、MVVM(Model-View-ViewModel)アーキテクチャの入門書を書きました。初学者の方を確実にネクストレベルに引き上げる技術書です。NextPublishingより出版されています。
関連記事 👀
- GitHub ActionsでSonarCloudにカバレッジをアップロードする
- [Android] Uniflowを用いたMVI的なアーキテクチャを試してみる🦄
- [Android] 単体テスト用の依存関係をHiltで解決する
- 俺のパブリックリポジトリ
- GitHub ActionsでktlintとAndroid Lintを並列実行して、DangerでPRにまとめてコメントする🐝