conventional-commits について
実際の変更内容に基づいて、機械可読な Conventional Commits を作成するためのスキルです。コミット形式や SemVer への影響、変更履歴の整理方法を扱います。
主な機能
- 01差分に基づくコミット種別の選択
- 02ヘッダー、スコープ、本文、フッターの形式
- 03破壊的変更のマーカー
- 04コミットメッセージの形式確認
- 05変更履歴の分類ガイド
活用シーン
- 01コード変更のコミットメッセージ作成
- 02互換性を壊す API 変更の明示
- 03コミットメッセージの形式確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ lelborn/ skills --skill conventional-commitsインストール後、Claude Code で/conventional-commitsを入力して読み込まれたか確認します。
詳細
Conventional Commits
Conventional Commits v1.0.0 に従い、コミットメッセージに機械で読み取れる意味を持たせます。適切に整えられた履歴があれば、ツールで SemVer のバージョンを更新したり、変更履歴を生成したりでき、読者も差分を開かずに git log を確認できます。ただし、すべてのコミットがこの形式に従っている場合に限ります。依頼されるのを待たず、デフォルトで適用してください。
形式
<type>[optional scope][!]: <description>
[optional body]
[optional footer(s)]
必須なのはヘッダーだけです。docs: fix typo in readme は、それだけで完全かつ有効なコミットです。
Type — 依頼内容ではなく差分から判断する
ユーザーが変更をどう呼んだかではなく、その変更が何をするかに基づいてタイプを選びます。「ログインページの整理」は fix、refactor、style のいずれにもなり得ます。判断する前に git diff --staged を確認してください。
| Type | 用途 | SemVer |
|---|---|---|
feat | 新機能 | MINOR |
fix | バグ修正 | PATCH |
docs | ドキュメントのみ | — |
style | コードの意味を変えない書式変更 | — |
refactor | バグ修正でも機能追加でもない変更 | — |
perf | パフォーマンスの改善 | — |
test | テストの追加または修正 | — |
build | ビルドシステム、ツール、依存関係 | — |
ci | CI の設定とスクリプト | — |
chore | src やテストに触れないメンテナンス | — |
revert | 以前のコミットを取り消す | — |
feat/fix はユーザーから見える動作に関するものです。refactor は内部のみの変更です。差分が複数のタイプにまたがる場合は、すべてに無理に1つのタイプを当てはめるのではなく、論理的な変更ごとにコミットを分けるサインです。取り消しの場合は revert を使い、取り消した SHA を示すフッターを付けてください(Refs: 676104e)。
フィールド
- Scope — 影響を受ける領域を示す任意の名詞で、括弧で囲みます(
fix(auth):)。変更が1つのモジュール/コンポーネントに限定される場合に追加し、既存の履歴と一貫したスコープを保ってください。 - Description — 命令形(「added」/「adds」ではなく「add」)、約72文字以内、小文字、末尾にピリオドなし、具体的な内容にします。
fix: bugよりfix: handle empty array in parseArgsが適切です。 - Body — 任意です。Description の後に空行を1行入れます。差分を1行ずつ説明するのではなく、変更の 理由 を説明します。理由が明らかでない場合にのみ含めてください。
- Footers — 任意です。Body の後に空行を1行入れます。
Token: valueまたはToken #123の形式です。トークン内のスペースは-に置き換えます(Reviewed-by、Co-authored-by)。情報がある場合にのみ追加し、課題番号やレビュアーを捏造しないでください。
破壊的変更
破壊的変更とは、利用者がコードを変更しなければならなくなる変更です。API の削除/名前変更、デフォルト値の変更、レスポンス形式の変更などが該当します。次のいずれか、または両方で明示してください。
- コロンの前に
!を付ける:feat(api)!: drop support for legacy tokens - フッターを付ける:
BREAKING CHANGE: <破壊される内容と移行方法>
タイプにかかわらず、SemVer の MAJOR になります(fix! でも破壊的変更です)。移行方法が明らかでない場合は、フッターも含めてください。BREAKING CHANGE(同義語の BREAKING-CHANGE)を除き、すべて大文字と小文字を区別しません。BREAKING CHANGE は大文字でなければなりません。
例
feat(lang): add Polish translation
fix: prevent racing of requests
Introduce a request id and dismiss responses from any but the latest request.
Refs: #123
feat(api)!: send an email when a product ships
BREAKING CHANGE: the shipment webhook no longer includes the deprecated
`email_sent` flag; read shipment state from `status` instead.
メッセージのレビュー
次の点を確認してください。タイプがない、またはタイプの後に : がない。Description が空、またはプレフィックスの直後にない。Body/Footer が空行で区切られていない。フッタートークンにスペースが含まれている(BREAKING CHANGE を除く)。BREAKING CHANGE が大文字でない。破壊的な差分にマーカーがない。タイプが差分に合っていない。
履歴からの CHANGELOG 作成
タイプごとにまとめ(feat → Features、fix → Fixes…)、破壊的変更のマーカーが付いたものはタイプにかかわらず BREAKING CHANGES に記載します。ユーザーが履歴全体を求めていない限り、ユーザー向けの意味がないタイプ(chore、style、ci など)は省略します。関連する keep-a-changelog スキルでは、この内容を詳しく扱います。