Changelog作成に時間を奪われるのはもう終わりにしましょう
金曜日の午後5時、上司から急ぎのパッチリリースの指示があったと想像してみてください。早く帰れるはずが、50件もの乱雑なコミットが並ぶgit logを遡り、CHANGELOG.mdを書く羽目になります。コピー&ペーストとフォーマットの修正だけで、貴重な30分が失われてしまいます。
私自身、20人以上の開発者が参加するアウトソーシングプロジェクトで、このループに陥っていました。当時のChangelogは、日付の間違いや機能の抜け漏れ、人によってバラバラなフォーマットなど、まさに「寄せ集め」の状態でした。様々なツールを試した結果、最終的に選んだのがgit-cliffです。これはRustで書かれたツールで、処理速度が非常に速く、カスタマイズ性もほぼ無限大です。
大規模なオープンソースライブラリのようなプロフェッショナルなリリースプロセスを構築したいなら、この記事がその鍵となります。
なぜgit-cliffは他のツールより優れているのか?
git-cliffは単にコミットを羅列するだけではありません。Gitの履歴を解析し、プロフェッショナルなテンプレートを通じてデータをレンダリングします。現在はメンテナンスが少なくなっているstandard-versionやconventional-changelogと比較して、多くの優れた利点があります。
- 驚異的なスピード: 10,000件のコミットがあるリポジトリでも、1秒足らずでChangelogを生成します。
- シングルバイナリ: Node.jsやPython、Rubyをインストールする必要はありません。実行ファイル1つで動作します。
- 柔軟なテンプレート: Teraエンジン(Jinja2に類似)を使用しており、MarkdownやHTML、さらにはJSON形式での出力も可能です。
- 多様なサポート: Conventional Commits、絵文字、および独自の複雑なルールにも対応しています。
ステップ1:クイックインストール
git-cliffは、主要なすべてのOSにインストール可能です。
# macOSユーザー向け
brew install git-cliff
# すでにRustがインストールされている場合
cargo install git-cliff
# WindowsでScoopを使用する場合
scoop install git-cliff
インストール完了後、git-cliff --versionを実行してください。バージョン番号が表示されれば、次のステップに進む準備は完了です。
ステップ2:「頭脳」となるcliff.tomlの設定
まず、プロジェクトディレクトリに移動して設定ファイルを初期化します。
git-cliff --init
このコマンドによりcliff.tomlが作成されます。ここでツールにコミットの読み取り方を教えます。Regex(正規表現)を使用して分類を行うcommit_parsersセクションに注目してください。
commit_parsers = [
{ message = "^feat", group = "🚀 新機能" },
{ message = "^fix", group = "🐛 バグ修正" },
{ message = "^perf", group = "⚡ パフォーマンス改善" },
{ message = "^doc", group = "📚 ドキュメント" },
{ message = "^chore\\(release\\): prepare for", skip = true },
{ body = ".*security", group = "🛡️ セキュリティ" },
]
この設定は非常に直感的です。コミットメッセージが「feat」で始まれば、最終的なChangelogの「新機能」セクションに自動的に分類されます。
ステップ3:コミットメッセージの標準化
ツールが賢く機能するためには、入力データが標準化されている必要があります。Conventional Commitsの採用を推奨します。理想的な構造は type(scope): description です。
私のチームでも、最初はみんな忘れがちでした。解決策として、lefthookやhuskyを導入し、「fix bug」や「update code」といった曖昧なコミットを制限しました。Gitの履歴が綺麗になれば、手動で修正することなく美しいChangelogが自動生成されます。
ステップ4:最初のChangelogを出力する
いよいよ成果を確認する時です。以下のコマンドを実行してファイルを生成します。
git-cliff -o CHANGELOG.md
最新のタグからの変更点のみを取得したい場合(GitHubのリリースノート作成などに便利)は、--latestフラグを使用します。
git-cliff --latest --strip header
実行結果として、コミットIDの短縮リンク(例:a1b2c3d)を含んだ、非常にプロフェッショナルな変更リストが生成されます。
ステップ5:CI/CDによる完全自動化
手動での実行にとどまらず、git-cliffをCI/CDパイプラインに組み込みましょう。私が実際に導入したプロジェクトでは、誰かが新しいタグ(例:v1.2.0)をプッシュするたびに、GitHub Actionsが自動的に起動するようにしています。
システムが自動的にgit-cliffを実行してCHANGELOG.mdを更新し、レンダリングされた内容でGitHub Releaseを自動作成します。このプロセス全体にかかる時間は10秒未満で、人の手は一切かかりません。Markdownを手入力する代わりに、その時間でコーヒーを淹れることができます。
Lời kết
Changelogの自動化は小さな一歩ですが、プロジェクトに大きなプロフェッショナリズムをもたらします。git-cliffは作業を楽にするだけでなく、チーム全体に責任あるコミットメッセージを書く習慣を根付かせます。わずか15分の設定で、年間数十時間の作業時間を節約できます。ぜひあなたのプロジェクトでも試してみてください!

