commitlintとConventional Commitsの統合
Conventional Commits形式を強制するためのcommitlintのセットアップ方法を学びます。インストール、設定、Huskyでのgit hook、チーム向けカスタムルールを解説します。
Best Practices
詳細な説明
commitlintのセットアップ
commitlintは、コミットメッセージをルールセットに対してチェックするツールです。Git hookと組み合わせることで、非準拠のコミットの作成を防ぎ、コミット履歴全体がConventional Commits仕様に従うことを保証します。
インストール
npm install -D @commitlint/cli @commitlint/config-conventional
設定
プロジェクトルートにcommitlint.config.jsを作成:
module.exports = {
extends: ['@commitlint/config-conventional'],
};
これにより以下が強制されます:
- 有効なコミットタイプ(
feat、fix、docsなど) - サブジェクト行のフォーマット(小文字、ピリオドなし)
- ヘッダーの最大長(デフォルト100文字)
- ボディとフッターのフォーマットルール
HuskyでのGit Hook
Huskyをインストールしてcommitlintを自動実行:
npm install -D husky
npx husky init
echo "npx --no -- commitlint --edit \$1" > .husky/commit-msg
これで、すべてのgit commitが作成前にバリデーションされます。
カスタムルール
チームに合わせてルールをカスタマイズできます:
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
// 特定のスコープを強制
'scope-enum': [2, 'always', [
'auth', 'api', 'ui', 'db', 'config', 'deps'
]],
// スコープを必須にする
'scope-empty': [2, 'never'],
// サブジェクト長を50に制限
'subject-max-length': [2, 'always', 50],
// 特定のタイプのみ許可
'type-enum': [2, 'always', [
'feat', 'fix', 'docs', 'style', 'refactor',
'perf', 'test', 'build', 'ci', 'chore', 'revert'
]],
},
};
CI統合
CIパイプラインにcommitlintを追加してPRコミットをバリデーション:
# GitHub Actions
- name: Lint commits
uses: wagoid/commitlint-github-action@v5
失敗時の処理
commitlintがコミットを拒否すると、明確なエラーが表示されます:
✗ type must be one of [feat, fix, docs, ...]
✗ subject must not end with period
✗ header must not be longer than 100 characters
メッセージを修正して再試行してください。コミットは作成されていないため、amendは不要です。
ユースケース
新しいプロジェクトを立ち上げており、最初からConventional Commitsを強制したいと考えています。チームのすべての開発者が非準拠のコミットメッセージを書いた際に即座にフィードバックを受け、リポジトリに入る前に不整合を防ぐために、commitlintとHuskyを設定する必要があります。