okuzawatsの日記

Android / Kotlin / GitHub Actions Enthusiast 🤖

Androidアプリ開発におけるセマンティック・バージョニング

目次

Androidアプリのバージョン番号を X.Y.Z 形式、いわゆるセマンティック・バージョニングにすることは必須ではありません。Androidではバージョン番号の指定を versionName で行いますが、 versionName は文字列でありさえすれば問題ありません。なのでバージョン番号の命名は好きにしたらいいんですが、セマンティック・バージョニングを採用するメリットも確かにあります。

そもそもセマンティック・バージョニングとは

バージョン番号を メジャー.マイナー.パッチ とするバージョニングのルールです。互換性のないアップデートでメジャーを、互換性があり機能が追加されるアップデートでマイナーを、後方互換性を伴うバグ修正でパッチを、それぞれインクリメントしていきます(セマンティック バージョニング 2.0.0 | Semantic Versioning)。

Androidアプリのユーザーが上記リンクに示されるようなモチベーションを感じることは稀だと思いますので、Androidアプリ開発においてセマンティック・バージョニングを導入する必然性は薄いと思われます。メリットがあるとすれば、ユーザーではなく開発者の側でしょう。

すなわち、「次のアップデートはメジャーアップデートだから、メジャー番号を上げたバージョンをリリースしよう」とか、「プロダクションにバグがあるからhotfixを出そう、パッチ番号を上げたバージョンをリリースしよう」というような場面では、セマンティック・バージョニングを用いることで開発者内のコミュニケーションを円滑にできる効果があると思います。

versionNameversionCode

Androidアプリには、ふたつのバージョンが存在します。前述の versionName と、 versionCode です。

versionName が文字列であったのに対し、versionCode は正の整数で、内部的なバージョン番号として使用されます。Google Playでは versionCode を用いてアプリのバージョン管理を行なっており、端末にインストールされているアプリの versionCode よりも小さな versionCode を持つアプリを端末にアップデート・インストールすることはできません。

versionCode については、最初のリリースで 1 を設定し、リリースごとに単純に値を増やしていくというのが最もあり得る運用であると思います。 versionCode まで頑張ってセマンティックにはしないということですね。

一般的に、アプリの最初のバージョンをリリースするときは versionCode を 1 に設定し、リリースを重ねるたびに、メジャー リリースかマイナー リリースかにかかわらず、単純に値を増やします。つまり、versionCode 値は、ユーザーに表示されるアプリのリリース バージョンを必ずしもなぞっているわけではありません。アプリと公開サービスでは、このバージョン値をユーザーに表示するべきではありません。(アプリのバージョニング | Android Studio | Android Developers

その他、バージョン番号 X.Y.Z に対して versionCode10000 * X + 100 * Y + Z というように決め、 versionNameversionCode を連動させるように決めているプロジェクトもあるかと思います。 versionCode まで頑張ってセマンティックにするパターンです。

この場合は、内部テスト版の配信・アップデートで versionCode を増やす場合を考慮して versionCode のルールを設計しておかないといけません。例えば、下1桁や下2桁を内部テストのアップデート用に取っておく、とかです。つまり、 1000000 * X + 10000 * Y + Z * 100 + 内部テスト用 みたいなルールですね。ちょっと煩雑になってしまいますね。

Reference

  1. セマンティック バージョニング 2.0.0 | Semantic Versioning
  2. アプリのバージョニング | Android Studio | Android Developers

#Android

書いている人 😎

profile

茨城県つくば市在住のモバイルアプリケーションアーキテクト(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より出版されています。

販売サイトへ🏃

関連記事 👀

お問い合わせ✉️

Androidアプリ開発、特にレガシープロジェクトに関するご相談はこちらまで📨

お名前

メールアドレス

お問い合わせ内容