バージョン番号の付け方について少し踏み込んだ疑問点

はじめに

梅雨入りにより外出が億劫になっているこの頃、皆様いかがお過ごしでしょうか。
別に雨が降ってなくても外出なんてしないとは言わない約束

外出しないためコードを書くしかやることがなく、結果的に現在Javaで開発しているライブラリの正式版リリースまでこぎつけることができました。

さて、その際にちょっと思ったバージョン番号の付け方ですが、どのように付ければよいか、という疑問が上がったので、ここにメモ書きとして書いてみました。


よくある解答例

一般的には、3桁ないし4桁で表すことが多いと思います。

3桁の例の説明:

4桁の例の説明:

他にも、次のような例もあります。

  • 日付をそのままバージョン番号にする
  • 奇数番号と偶数番号で違う意味を持たせる
  • 細かな違いはバージョン番号の後ろに文字を付与する
  • バージョンに名前を付ける
  • 円周率に近づける

参考:

さて、大体のサイトから得た知見を基にすると、バージョン番号の付け方は3桁ないし4桁のほうが(ヒット件数などから)多くの人にわかりやすいだろう、という話でまとまりそうです。


直面した問題

以上の情報を元に、今回は3桁のバージョン番号を使うことにしました。
そこで、次の問題に直面しました。

Javaにおけるパッケージ構造だけを全て変更したが、処理内容などは一切変わっていない場合、どのバージョン番号を変えればよいのか

バージョン番号の見方 | Pickles Framework(PxFW) official website によると、3桁のバージョン番号の更新は次の意味を持つそうです。

  • 大規模な仕様の変更や追加を伴う場合にはメジャーバージョンを上げる
  • 小規模な仕様の変更や追加の場合は、マイナーバージョンを上げる
  • バグ修正、ドキュメント、コメント修正等の小さな変更は、リリース番号を上げる

今回の例では、ルートパッケージに複数存在していたpackageApackageBpackageCパッケージ群を、there/is/rootパッケージ下に移動しました。

変更前

カレントディレクトリ
├─packageA
├─packageB
└─packageC

変更後

カレントディレクトリ
└─there
  └─is
    └─root
      ├─packageA
      ├─packageB
      └─packageC

もし旧バージョンのライブラリを利用しているプログラムが、新バージョンのライブラリを利用するためには、import文を全て書換えなければなりません。


変更前

import packageA;
import packageB;
import packageC;

変更後

import there.is.root.packageA;
import there.is.root.packageB;
import there.is.root.packageC;

この意味では、次の要件にあてはまるため、メジャーバージョン番号を上げる必要がありそうです。

大規模な仕様の変更や追加を伴う場合

ですが、ソースコード自体の処理内容やメソッド名などは一切変更されておらず、しいて言えば利用例を書いていたJavadocを書換えた程度です。
この意味では、次の要件にあてはまるため、リリース番号を上げる必要がありそうです。

バグ修正、ドキュメント、コメント修正等の小さな変更

おわりに

オチは特にありません。
結局、今回はリリース番号を上げる程度に留めました。
どこまでが小さな変更で、どこからが大きな変更なのか、という具体例については、探した感じではどこにもなかったので、書いてみた次第です。

もし自分はこう思う、という方は、別にコメントに書かなくてもいいので、少し考えてみてください。