Commitizenでコミットメッセージを標準化:’fix bug’や’done’に別れを告げ、CHANGELOGを自動化しよう

Git tutorial - IT technology blog
Git tutorial - IT technology blog

課題:Git ログが「迷宮」化してしまう問題

古いプロジェクトの git log を開いて、「fix bug」「update」「done」、あるいは「……」といったメッセージを見て呆然としたことはありませんか? 3ヶ月も経てば、一行ずつコードを追わない限り、自分でも何を修正したのか思い出せなくなるものです。実際、納期のプレッシャーから、クリーンなコミット履歴を維持することは後回しにされがちです。

Conventional Commits は、この問題を解決するために誕生しました。しかし、いつ featfix を使うべきか、あるいは type(scope): description という構造を常に覚えておくのは面倒なものです。そこで登場するのが Commitizen (cz-cli) です。このツールは、コミット作成を短い対話形式のアンケートに変えてくれます。選択肢を選んで答えるだけで、残りの処理はすべてツールが自動で行ってくれます。

クイックスタート:5分で導入・使用開始

Node.js プロジェクトであれば、セットアップは非常に簡単です。チーム全員が同じ基準を守れるよう、プロジェクトごとにローカルインストールすることをお勧めします。

ステップ1:Commitizen とアダプターのインストール

npm install --save-dev commitizen cz-conventional-changelog

ステップ2:設定の初期化

package.json の末尾に以下の設定を追加します:

"config": {
  "commitizen": {
    "path": "cz-conventional-changelog"
  }
}

ステップ3:実行用スクリプトの作成

package.jsonscripts セクションに、以下の行を追加します:

"scripts": {
  "commit": "cz"
}

これで、感覚的に git commit -m "..." と入力する代わりに、次のように実行するだけです:

npm run commit

ターミナルに対話型インターフェースが表示されます。矢印キーで変更の種類(feat, fix, docs…)を選択し、説明を入力するだけです。結果として、一文字のミスもない標準化されたコミットメッセージが生成されます。

なぜ手入力ではなく Commitizen を使うべきなのか?

多くの開発者は、手動で入力したほうが早いと考えがちです。しかし、チーム開発において各々が独自のスタイルで書くと、Git ログはすぐにカオスになります。

1. 圧倒的な一貫性

Commitizen は全員を共通の枠組みに従わせます。コミット履歴が整っていると、バグの追跡が非常に速くなります。例えば、feat(auth) というキーワードで検索すれば、”Auth” モジュールに関連するコミットを即座にフィルタリングできます。

2. 暗記不要で規約を習得

アダプター cz-conventional-changelog は、直感的なヒントを提供します:

  • feat: 新機能の追加。
  • fix: バグ修正。
  • docs: ドキュメントの更新。
  • style: コードの動作に影響しない書式変更(スペース、セミコロンなど)。
  • refactor: リファクタリング(機能追加やバグ修正を含まないコード変更)。
  • perf: パフォーマンス改善。
  • test: テストコードの追加・修正。
  • chore: ビルドプロセスや補助ツールの変更。

応用:standard-version による CHANGELOG の自動化

これは、リリースごとのレポート作成時間を大幅に短縮できる機能です。標準化されたコミット履歴があれば、プロフェッショナルな CHANGELOG.md ファイルを数秒で生成できます。

以前担当した受託案件では、スプリントごとに詳細な機能リストとバグ修正リストの提出が求められました。手動でコピー&ペーストする代わりに、standard-version を使ってこのプロセスを100%自動化しました。

インストールと設定

npm install --save-dev standard-version

package.json にスクリプトを追加します:

"scripts": {
  "release": "standard-version"
}

新しいバージョンをリリースする際は、npm run release を実行するだけです。システムは以下の4つを自動的に行います:

  1. 前回のリリース以降の全コミットをスキャン。
  2. SemVer(セマンティックバージョニング)に従い、package.json のバージョンを自動更新。
  3. 変更内容を分類した CHANGELOG.md ファイルを更新。
  4. そのバージョンの Git タグを新規作成。

チーム導入における実体験

私が以前管理していた8人のチームでは、Commitizen を導入したことで、レビュー会議での議論時間が30%削減されました。すべての変更が明確に記録されていたからです。最初はメニュー選択を面倒に感じるメンバーもいましたが、1週間も経つと、互いのコードを理解するスピードが上がったというメリットに全員が納得しました。

Tips:npx を使ってシンプルに実行

プロジェクトにスクリプトを追加したくない場合は、npx cz コマンドで素早く実行できます。ただし、質問項目を意図通りに表示させるために、プロジェクト内にアダプターの設定は済ませておきましょう。

Husky と組み合わせて「規律」を守る

通常の git commit -m による「規約破り」を防ぐには、Huskycommitlint を組み合わせるのが効果的です。メッセージが規約に沿っていない場合、Git はコミットを拒否します。これにより、リポジトリ内のコミット履歴を100%クリーンに保つことができます。

結びに

Commitizen を使うことは、単に見栄えを良くするためだけではありません。それは、プロフェッショナルな製品管理の考え方そのものです。丁寧なコミットメッセージは、将来の自分や、コードをメンテナンスする同僚への贈り物です。プロジェクトが成長しているなら、今すぐ Commitizen を導入して、洗練された DevOps プロセスを構築しましょう。

Share: