commitlint vs Commitizen: コミットの規約
commitlintはコミットメッセージをルールに照らして検証します。Commitizenはconventional commitsを書くよう対話的に導きます。両者は互いを補完します。
commitlintはコミットメッセージが規約(一般的にはConventional Commits)に従っているかをチェックし、従っていない場合はコミットまたはCIを失敗させます。Commitizenは、準拠したコミットメッセージを組み立ててくれる対話的なプロンプトを提供し、そもそもの間違いの可能性を下げます。両者は同じ目標の異なる側面を解決します。Commitizenは作者が正しいメッセージを書くのを助け、commitlintはそれを強制します - 多くのチームは両方を使います。
| commitlint | Commitizen | |
|---|---|---|
| 役割 | メッセージを検証 | メッセージ作成を導く |
| 実行タイミング | commit-msg hook / CI | コミット時(プロンプト) |
| 強制 | あり(悪いコミットを失敗させる) | なし(補助する) |
| セットアップ | 設定 + ルール | アダプタ(例: cz) |
| 最適な用途 | 規約の強制 | 規約に沿った作成 |
CIでの利用
commitlintは強制の層です。commit-msg hookで実行し、さらにPRのコミストに対してCIでも実行して、規約に沿わないメッセージがビルドを失敗させるようにします。Commitizenはローカルで役立ちますが、それ自体では何も強制できません。堅牢な構成は、作成にCommitizen(またはガイド付きテンプレート)を、ゲートとしてCIにcommitlintを組み合わせる形です。
高速化する
コミットメッセージのlintは軽量です。依存関係をキャッシュしてジョブが素早く始まるようにします。チェックはCIランナー上で実行され、より高速なマネージドランナーは検証ステップをほぼ瞬時に保ちます。
結論
悪いメッセージが失敗するようコミット規約を強制する: commitlint、理想的にはCIで。作者が準拠したメッセージを対話的に書くのを助ける: Commitizen。両者は競合ではなく補完的です - 書くのにCommitizen、強制にcommitlintを使いましょう。