バージョン管理したい
バージョン管理する方法として、日付ベースの運用と、機能追加ベースの運用があります。 前者をcalver(calendar versioning)と呼び、後者をsemver(semantic versioning)と呼びます。
定期的なサイクルでリリースをするプロジェクトcalverが適しているのかもしれませんが、
個人用だったり、研究室用だったりするプロジェクトはsemverでいいのかなと思います。
semverではバージョン番号をMajor.Minor.Patchの3つの数字で表現し、それぞれ次の意味を持っています。
Major後方互換性のない機能を追加したり、変更を加えた場合に +1
Minor後方互換性がある機能を追加した場合に +1
Patch後方互換性があるバグ修正をした場合に +1
これらを自分の頭で考えて、手作業で管理することは(僕にとっては)到底不可能ですが、 コミットメッセージを活用して、サポートしてくれるツールがあります。 僕はPythonで書かれたcommitizenというツールを使っています。 使い方はcommitizenの使い方に整理しました。
注釈
commitizenには、JavaScriptで書かれたnpmパッケージのcommitizenもありますが、別物のようです。
コミットメッセージしたい
1コミットの種類(スコープ): 変更点の概要
2
3 長い説明。長い説明。長い説明。長い説明。長い説明。
4 長い説明。長い説明。長い説明。長い説明。長い説明。
5 長い説明。長い説明。長い説明。長い説明。長い説明。
semverで利用するコミットメッセージは、上記のテンプレートが基本です。
ポイントは、コミットの種類と変更点の概要を必ず書くことです。
とくに、コミットの種類は
fix、feat、docs、style、refactor、perf、test、build、ci
のいずれか値を入力します。
スコープは任意ですが、変更を加えたファイル名やクラス名、関数名を書いておくとよいです。
長い説明は省略してOKです。 ただし、複雑な変更を加えた場合は、きちんと説明を書いておくと、未来の自分のためになります。
バージョンアップしたい
コミットメッセージに残したコミットの種類によって、semverを判断します。
fixはパッチバージョン+1、
featはマイナーバージョン+1、
featかつBREAKING CHANGEの文字列があるとメジャーバージョン+1となります。
その他は、バージョンアップには影響がありません。
ある程度、コミットを貯めた場合には、バージョンアップに関係する一連のコミットの中で、 もっとも大きな変更値が適用されます。