調べ物をしている時に、SemVer という単語を見かけました。見たことのない英単語だなと調べたところ、セマンティックバージョニングのことでした。

パッケージを使用していると当たり前のように目にしているバージョンの記載ですが、良い機会なので改めて調べてみようと思った結果がこの記事です。

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

すべての情報は上記公式サイトに書いてあります。以下は要点を自分の言葉でまとめただけのものに過ぎませんので悪しからず、です。

バージョニングが統一されていないとどうなってしまう?

  • 😏 「パッケージ作った!2021 年の 6 月 24 日に作ったから、 “v20210624” にしよう。」
  • 😭 「バグが見つかったから直さなきゃ。バグ修正以外大きく変わったわけではないし、 “v20210624-fixed” にしよう。」
  • 😁 「新規機能追加した!とりあえず日付を更新しつつ、 “v20210712-add-new-function” 」にするか。

…みたいなことを一人一人が勝手にやっていると、パッケージの利用者からするとどのパッケージがどのバージョンなのか訳がわからなくなることは必死ですね。

みんなでバージョニング方法を揃えませんか?という提案がセマンティックバージョニングです。

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

「16.13.1」のように3つのセクションからなります。

  • 1番目のセクションが「メジャーバージョン」(上記例だと 16 です)
  • 2番目のセクションが「マイナーバージョン」(上記例だと 13 です)
  • 3番目のセクションが「パッチバージョン」(上記例だと 1 です)

各セクションの意味

  • メジャーバージョン(MAJOR version) - 後方互換性のない変更がある時に値を一つ大きくします。
  • マイナーバージョン(MINOR version) - 後方互換性を保ったまま機能を追加した時に値を一つ大きくします。(メジャーバージョンが上がった時にはマイナーバージョンは 0 に戻します)
  • パッチバージョン(PATCH version) - 後方互換性を保ったまま機能をバグを修正した時に値を一つ大きくします。(メジャーバージョンまたはマイナーバージョンが上がった時にはパッチバージョンは 0 に戻します)

パッケージ利用者からみた捉え方

  • パッチバージョンの更新: 😀 「バグ修正があったんだな。すぐアップデートしておくか。」
  • マイナーバージョンの更新: 😁 「新規機能の追加か。とりあえずアップデートしておこう!」
  • メジャーバージョンの更新: 😱 「いろいろ新規機能追加されたんだろうけど後方互換性が…。慎重に見極めてアップデートしなければ。」

セマンティックバージョニング的な開発の例

  • 😁 「車パッケージを新規作成中!とりあえずバージョンは “0.1.0” から始めますね。」
  • 😍 「開発も進んできて、いよいよ正式に公開できるぞ! “1.0.0” として公開開始だ!」
  • 😱 「稀にエンジンがかからないというバグが見つかった…。修正版を “1.0.1” で配布しよう。」
  • 😭 「今度は窓が開きづらいというバグが見つかった…。再修正版を “1.0.2” で配布しよう。」
  • 😀 「ラジオアンテナをつけて、ラジオを聞けるようにしたぞ。 “1.1.0” で配布だ!」
  • 😱 「ラジオアンテナがたまに折れてしまうバグが…。 “1.1.1” で配布だ。」
  • 😀 「シガーソケットもつけておいたぞ。 “1.2.0” で配布だ。」
  • 😏 「水陸両用モデルにできた!でもその代わりにラジオアンテナを外さなければいけなかったけれど。 “2.0.0” としてリリースだ!」

まとめ

こんな記事を読むよりも、公式ドキュメントを読んだ方がためになると思います 😩