アプリケーションのバージョンはどうやって書けばいいのか

/

導入

プログラムをかじった人間としてそのうち自分でもなにかソフトウェアを開発して世に流行らせたいとか夢想しながら日々勉強しているわけですが、まだ見ぬソフトフェアの公開を想像するうちにそういえばソフトウェアのバージョン表記ってどう書けばいいのかという疑問が湧いてきたのでのでちょっと調べてみました。

ソフトウェアのバージョン

普段我々はパソコンやスマートフォンなどを使う際には色々なソフトウェアを利用していますが、それらは開発者によって日々バグの修正や機能の追加などのアップデートが行われます。
適用されたアップデートによってソフトウェアは同じ名前のものでも実際のプログラムの中身が変わるので、パソコンなどにインストールされたソフトウェアがどの段階のものであるかをバージョン表記で表すのが一般的です。

バージョン表し方

大抵のソフトウェアのバージョンは名前の後ろに3.5とか4.2.3といった感じで表記されます。
ソフトウェアによっては通常の文脈でCentOS7.2やGoolge Chorme52.0.2のように名前とバージョンを並列して表記する事も多いので、普段パソコンやスマートフォンを使っている多く人はなんとなくバージョンアップの表記が意味している事は理解していると思います。

バージョンの書き方が解らないと言っても感覚的にバージョン1.2だったソフトが1.2,1.3,1.4…とマイナーアップデートを行った後、大きな機能追加でバージョンが2.0にメジャーアップデートされるという事ぐらいは僕も理解しています。

単純にユーザー目線であればそのぐらいの知識で事足りると思いますが、開発者としてプロジェクトを立ち上げたいというのであれば当然自分でソフトウェアのバージョンを管理する必要があります。
その際混乱を避けるためにはアップデートに伴うバージョン表記のルールを定めておいたほうが良さそうです。

そもそもバージョンの表記に統一したルールはあるのか?

自分のプロジェクトのバージョン管理をしようと思ってまず思うのが、統一された規格が存在しているのではないかという事です。
調べて見たところやはり同じ疑問を持つ人はいる模様。

ソフトウェアや、プログラムのバージョンには、一般的に、付け方のルールや呼び方があるのでしょうか?
~中略~
プロジェクトによっても呼び方や付け方が違ったりしますが、概ね
メジャーバージョン.マイナーバージョン.パッチレベル又はメンテナンスバージョン
って所でしょうか。
メジャーバージョンは大きく機能や仕様が変わるときに変更。
マイナーバージョンは機能追加や小さな仕様変更のときに変更。
パッチレベルはバグ修正や性能改善のときに変更。
って感じで使い分けるのが一般的だと思います。
プログラムのバージョンの付け方のルール/OKWAVE

このポストへの回答者はバージョンアップには特に厳密な定義は無く、メジャー・マイナー・パッチの順番に数字を割り当てていると答えています。
確かにその順番でバージョンを表記をしてるというのはしっくり行く解答ですが、この回答者の回答から受ける印象だと一種の慣習として多くの場合そう表記されているという感じでHTMLや各種OSSのライセンスなどとは違い然るべき団体によって統一された規格などは無さそうです。

たしかに調べても他にあまり情報が出てこないので自分で考えてつけるしかないのかと思いましたが、ふと「そういえばRubyのサイトでバージョン表記について何か見たような・・・」と思い出したので調べてみると、ありました。
Rubyのバージョン表記
このRubyのサイトによるとRubyではどうやら2.1.1バージョンからセマンティックバージョニングというものに沿ってバージョンを表記をしているそうです。
なんだか統一規格らしきものを見つけましたが、今度はセマンティックバージョニングがどういった物なのかが良く解りません。

セマンティックバージョニング

セマンティックバージョニング
日本語訳
セマンティックバージョニングの仕様の著者はGithub共同創設者のTom Preston-Werner氏です。
解説を読むとセマンティックバージョニングとは、やはりバージョン表記のルールを明文化したもので依存性の問題を解決するために考案されたようです。

このアイデアは新しいものでもなければ、革新的なものでもありません。実際、みなさんも似たような取り組みを既におこなっているかもしれません。問題は『似ている』のでは不十分だということです。正式な仕様書による取り決めがなければ、バージョンナンバーは依存性の管理において基本的には無意味です。上記のアイデアに対して名前と正確な定義を与えることよって、あなたの開発するソフトウェアにおいて、あなたの意図がユーザーに対して伝わりやすくなることでしょう。一度、これらの意図を正確にしてしまえば、柔軟な(しかし、柔軟すぎてはいけない)依存性の仕様を作ることができます。
セマンティックバージョニング

あいにく他のプロジェクトでセマンティックバージョニングを表明しているものを確認出来ていないのでどれくらい浸透しているものなのか解りませんが、統一された仕様という事で独自の方法でバージョン表記よりはメリットも大きいようなので導入を検討する価値はありそうです。

まとめ

今回調べてみてバージョン表記にそこまで明確なルールというものは存在せずに、わりとアバウトにつけられている場合も多い事が解りました。しかし、やはりある程度統一したルールでやったほうが便利だろうという事で規格を作る動きもあるようです。特にWEBが発展してバージョンアップの頻度が増えているので、仕様は統一しておいたほうが開発者にとってもやりやすいのではないかと思います。