x.y.z というバージョン番号をインクリメントする場合のポリシー

RubyGems User Guide | RubyGems Manuals
を読んでいたらバージョン番号をどのようにインクリメントするかというポリシーについて記述されているページがあった。

べつにgemじゃなくても参考になるので、ここに書いておく

Libraries change in 3 ways (well, more than 3, but stay focused here!).

  1. The change may be an implementation detail only and have no effect on the client software.
  2. The change may add new features, but do so in a way that client software written to an earlier version is still compatible.
  3. The change may change the public interface of the library in such a way that old software is no longer compatible.
RubyGems User Guide | RubyGems Manuals

上記をベースに自分ルールを考えた

  1. インターフェースに影響を与えない内部的な変更はzの番号をインクリメントする
  2. 新しい機能の追加(ただし既存インターフェースの下位互換は保証)している場合、または軽微な影響しか与えないような変更はyの番号をインクリメントしてzの数字を0にリセットする。
  3. インターフェースの変更によって下位互換性が失われるような大きな変更の場合は、また、下位互換を保っているが、同一のxバージョンを与えるのにふさわしくない大きな変更の場合xの番号をインクリメントし、y,zの数字をリセットする。

太字の部分は自分ルールとして追加したところ。