committing-with-commitlint について
committing-with-commitlintは、commitlintを使うリポジトリでコミットメッセージを書くためのスキルです。リポジトリのルール確認、メッセージ全体の検証、エラーに基づく修正を支援します。
主な機能
- 01commitlintの設定とフックを検出
- 02リポジトリで有効なルールを確認
- 03規定形式に沿ったメッセージ作成
- 04標準入力でメッセージ全体を検証
- 05報告されたルールに基づいて修正
活用シーン
- 01リポジトリで初めてコミット
- 02件名と本文の制約を確認
- 03コミットフックの拒否理由を調査
- 04コミット前にメッセージ全体を検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ conventional-changelog/ commitlint --skill committing-with-commitlintインストール後、Claude Code で/committing-with-commitlintを入力して読み込まれたか確認します。
詳細
commitlint を使用するリポジトリでのコミット
commitlint は、コミットメッセージがリポジトリで設定された規約(通常はConventional Commits)に準拠しているかを検証します。設定がルールです。コミットメッセージを書く前に設定を読み、コミットが拒否された場合はエラー出力を確認してください。
1. リポジトリで commitlint が使用されているか確認する
次のいずれかに該当する場合、commitlint が使用されています。
- リポジトリのルートに設定ファイルがある:
.commitlintrc、.commitlintrc.{json,yaml,yml,js,cjs,mjs,ts,cts,mts}、 またはcommitlint.config.{js,cjs,mjs,ts,cts,mts} package.jsonに"commitlint"フィールドがある- commitlint を実行する commit-msg フックがある(
.husky/commit-msg、lefthook.yml、 または.git/hooks/commit-msgを確認してください)
2. 適用されるルールを読む
npx commitlint --print-config json
これがゼロ以外の終了コードを返す場合、設定自体に問題があります(例:解決できない extends)。推測せず、標準エラー出力のエラーを確認してください。
rules オブジェクトを確認してください。各ルールは [severity, applicability, value] です。
- severity —
0= 無効、1= 警告、2= エラー(コミットをブロックするのはエラーのみ) - applicability —
"always"= 条件を満たす必要がある、"never"= 条件を満たしてはならない - value — ルールのパラメーター(リスト、数値、または文字列)
メッセージを書く際に特に重要なルールは次のとおりです。
| ルール | 制御する内容 |
|---|---|
type-enum | 使用できる type(例:feat、fix、chore、...) |
scope-enum | 使用できる scope(空のリスト = 任意の scope を使用可能) |
scope-empty | [2, "never"] = scope が必須、[2, "always"] = scope が禁止 |
subject-case | "never" の場合:subject で使用してはならない大文字・小文字の形式 |
subject-full-stop | "never" と "." の場合:subject をピリオドで終えてはならない |
header-max-length | 1 行目の最大文字数 |
body-leading-blank | subject と body の間に空行が必要 |
body-max-line-length | body の各行の最大文字数 |
ルールが記載されていない場合、または無効(severity 0)の場合、そのルールは適用されません。判断に迷う場合は、一般的なプリセットに準拠する保守的な基準を使用してください。type は小文字にし、末尾にピリオドを付けず、header は 72 文字未満にします(config-conventional では最大 100 文字まで許容されます)。設定がまったくない状態で commitlint を実行すると、既定の規約にフォールバックするのではなく、empty-rules エラーで失敗する点に注意してください。
3. メッセージを書く
形式:type(scope): subject — scope-empty が [2, "never"] でない限り、scope は省略可能です。
@commitlint/config-conventional に準拠する例:
feat(parser): add support for inline issue references
Explain what changed and why. Separate the body from the subject with a blank
line (body-leading-blank) and keep lines within body-max-line-length.
Closes #123
4. コミット前に検証する
printf '%s' "feat(parser): add support for inline issue references
Explain what changed and why.
Closes #123" | npx commitlint
出力がなく、終了コードが 0 であれば、メッセージは合格です。1 行目だけではなく、メッセージ全体(header と body)を検証してください。body のルールもチェックされます。コミット前に検証するほうが、コミットに失敗してから対処するよりも手間がかかりません。
5. commit-msg フックに拒否された場合は自己修正する
拒否時の出力には、違反した各ルールが角括弧内に示されます。
⧗ --- input ---
Feat: Added new parser.
✖ subject must not be sentence-case, start-case, pascal-case, upper-case [subject-case]
✖ subject may not end with full stop [subject-full-stop]
✖ type must be lower-case [type-case]
✖ type must be one of [build, chore, ci, docs, feat, fix, perf, refactor, revert, style, test] [type-enum]
✖ found 4 problems, 0 warnings
- 角括弧内に示されたルールのみを修正し、それ以外はすべて同じままにしてください。
- 標準入力で再検証し(ステップ 4)、その後コミットを再試行してください。
git commit --no-verifyでフックを絶対に回避しないでください。常にメッセージを修正するのが正しい対応です。