セマンティック・バージョニングしたい(commitizen)
$ cz commit
$ cz changelog --increment
$ cz bump
commitizen(cz)はGitのコミットメッセージをテンプレート化し、セマンティック・バージョニング(semantic versioning)に基づいたバージョン管理を簡単にするツールです。
コミットメッセージを入力するだけで、ルールに沿った変更履歴(CHANGELOG)の生成やバージョンタグの自動作成ができます。
インストールしたい(commitizen)
pipxでインストール
$ pipx install commitizen
$ which cz
~/.local/bin/cz
commitizenはグローバルに使うCLIなので、
pipxで隔離してインストールするとよいです。
pipでインストール
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install commitizen
$ which cz
プロジェクトで使う場合は、venvで作った仮想環境にインストールする方法でもよいです。
uvでインストール
$ uv add commitizen --dev
Poetryでインストール
$ poetry add commitizen --group dev
チームで開発する場合、プロジェクトに開発環境として含めておくと便利です。commitizenはツールとして使うだけなので、devグループに追加します。
注釈
同じ名前のnpmパッケージがありますが、まったく別のプロジェクトです。
自分がどちらを使っているのか混乱しないようにしましょう。
初期化したい(cz init)
$ cd プロジェクト名
$ cz init
cz initコマンドでプロジェクトを初期化し、commitizenの設定ファイルを作成します。
ターミナルに表示されるダイアログに従い、矢印キーで選択します。
設定ファイルの配置
Pythonパッケージを開発している場合は、pyproject.tomlに設定を追加する方法を推奨します。
その他の場合は、.cz.tomlなど好みの形式を選択できます。
初期設定ファイルの例
生成された設定ファイルは以下のようになっています。
1[tool.commitizen]
2name = "cz_conventional_commits"
3version = "0.0.1"
4tag_format = "$version"
コミットしたい(cz commit)
$ git add ファイル名
$ cz commit
cz commit(短縮形:cz c)でコミットを作成します。
通常のgit commitの代わりです。
ファイルのステージングはいつもどおりgit addしてください。
プロンプトが表示されるので、聞かれた内容に沿って情報を選択・入力すると、セマンティック・バージョニングに対応したコミットメッセージが自動生成されます。
テンプレートの確認
cz info- コミットメッセージのテンプレートを表示cz schema- 詳細なスキーマを表示cz example- テンプレートの使用例を表示
変更ログしたい(cz changelog)
$ cz changelog
cz changelog(短縮形:cz ch)で、コミットログから自動的に変更ログ(CHANGELOG)を生成できます。
デフォルトではCHANGELOG.mdというファイル名で作成されます。
すでに存在する場合は上書きされます。
変更ログのオプション
# 前回からの差分のみを追記
$ cz changelog --increment
# ファイルに保存せず、標準出力で確認
$ cz changelog --dry-run
# ファイル名を変更
$ cz changelog --file-name HISTORY.md
推奨される使い方
新しいバージョンをリリースするときは、--incrementオプションを使って前回からの変更分だけを追記するのが便利です。
バージョンアップしたい(cz bump)
$ cz bump --changelog --check-consistency
プログラムの開発にひと区切りついたら、cz bumpでバージョンアップします。
このコマンドは以下の処理を自動で行います:
コミット履歴をもとに、セマンティック・バージョニング(semver)に従ったバージョン番号を決定
設定ファイル内のバージョン番号を更新
Gitタグを作成
CHANGELOG.mdを更新(--changelogオプション使用時)複数ファイルのバージョン番号を一括更新(設定済みの場合)
よく使うオプション
# CHANGELOG.md を更新して、バージョン番号の一貫性をチェック
$ cz bump --changelog --check-consistency
# 短縮形
$ cz bump -ch -cc
バージョンタイプを指定したい
通常、commitizenはコミット履歴から自動的にバージョンを決定しますが、明示的に指定することもできます:
# パッチ版をリリース(例:1.0.0 -> 1.0.1)
$ cz bump --increment PATCH
# マイナー版をリリース(例:1.0.0 -> 1.1.0)
$ cz bump --increment MINOR
# メジャー版をリリース(例:1.0.0 -> 2.0.0)
$ cz bump --increment MAJOR
# CHANGELOG も同時に更新
$ cz bump --increment PATCH --changelog
詳細なオプション一覧
オプション |
短縮形 |
説明 |
|---|---|---|
|
|
|
|
|
バージョン番号の一貫性をチェック |
|
バージョンタイプを指定 |
|
|
実際には変更せず、どのような操作を行うか表示 |
|
|
pre-commitフックをスキップ |
注釈
バージョンアップとCHANGELOGの管理は、バージョンアップを先に行い、その後CHANGELOGを整理するのが推奨されます。
バージョン番号を一元管理したい
プロジェクトの複数の場所にバージョン番号が散らばっていると、cz bumpで更新するたびに手動で修正する手間が増えます。
version_filesを設定することで、cz bump時にすべてのバージョン番号を一括更新できます。
設定方法
1[tool.commitizen]
2version = "0.1.0"
3tag_format = "v$version"
4version_files = [
5 "pyproject.toml:version",
6 "src/__init__.py:__version__",
7 "docs/conf.py:version",
8]
version_filesにファイルパス:変数名の形式で設定します。
Pythonプロジェクトでの慣例
バージョン番号を管理するファイル:
pyproject.toml- プロジェクト設定ファイル(推奨)src/__init__.py- パッケージの__version__変数src/__version__.py- バージョン専用ファイル
ドキュメント設定
Sphinxでドキュメントを作成している場合:
docs/conf.py:version- 通常のSphinx設定docs/source/conf.py:version---sepオプション使用時
複数のファイルにバージョン番号を定義している場合は、初期設定のときにまとめて追加しておくことをオススメします。
フックしたい(commitizen)
pre-commitフレームワークを使用することで、commitizenをGitフックとして自動実行できます。
repos:
- repo: https://github.com/commitizen-tools/commitizen
rev: v3.29.0
hooks:
- id: commitizen
stages:
- commit-msg
stages: [commit-msg]を指定することで、コミットメッセージが保存されたあとに検証が実行されます。
これにより、セマンティック・バージョニングに従わないコミットメッセージは自動的に拒否されます。