コンテンツにスキップ

changelog を自動で生成したい

changelog(Release Note) を自動で生成するためのツールを調べてみた。ローカルの git log/tag から生成するものと、GitHub の API を使って生成するものがある。リポジトリ内に複数プロジェクトがある場合に tag の差分から計算するツールを使うと、関係ある変更の検出が難しいように感じた。

github-changelog-generator

github-changelog-generatorは GitHub API を使って changelog を生成するツール。 PR に付与されたラベルを元に、changelog を生成できる。

release-drafter

release-drafterは GitHub Actions を使って、changelog を生成するツール。GitHub App として使うこともできる。ラベルを元に changelog を生成できる。

towncrier

towncrierはローカルの git log から changelog を生成するツール。 Pythonu プロジェクトの changelog 生成に特化してる感じがする。TOML に設定を書くが、デフォルト以外のフラグメントを手動で書き足すのが大変そうに感じた。link

release-please-action

release-please-actionは GitHub Actions を使って、changelog を生成するツール。CLI や GitHub App として使うこともできる。Release Please はその仕組み上、レポジトリのメインストリームとなっている開発ブランチのコミットを追跡する必要がある。Rust や Python、go、node など多言語に対応しており、それぞれの言語で使われてるファイルを解析して最適な処理をしてくれる。

commit のプレフィックスによって、どのような変更かを判別している。fixfeatでマイナーバージョンの更新、feat!fix!のように!をつけるとメジャーバージョンを更新する。なので commit message を書くときから、どのような変更かを意識して書く必要がある。

squash merge を使うことが強く推奨されている。

monorepoにも対応している。

dunamai

https://github.com/mtkennerly/dunamai changelog ではないが、バージョンを自動で生成するツール。git や pyproject.toml からバージョンを生成できる。