name: commit
description: ClaudeCodeが git commit 操作をする際、必ず呼び出すこと。 ユーザーが指定したコミットルールに基づき、git commit を実行するスキル。commitを実行する際に必ず発動する。(ユーザー指示、自律実行どちらも)
Commit
git commit を実行するときに従うポリシー。
本文は書かない
コミットメッセージのフォーマット
- 言語: 件名・本文ともに必ず日本語
- 形式:
<type>: <短い要約> を基本とする (Conventional Commits 風だが、(<scope>) は書かない)
- type 一覧 必ず以下の7つのうち1つを使用する:
feat: 新機能
fix: バグ修正
refac: 挙動を変えないリファクタリング
docs: ドキュメントのみ
style: フォーマット・空白等 (挙動に影響しない見た目の変更)
test: テストの追加・修正
chore: ビルド・依存・設定等
件名 (subject)
- 50 文字程度までに収める
- 「何を」を動詞で端的に書く
- 末尾に句点を付けない
- 曖昧語 (
update, いろいろ修正, various changes 等) は使わない
本文 (description / body)
- 本文は書かない。
- どうしても本文を書く場合は、 件名だけでは伝わらない "Why" を補う必要がある場合 に限る
- 書く場合は 必ず2行以内で簡潔に書く
- 以下は書かない:
- コードを読めば分かる "What" の詳細説明
- 変更ファイルの羅列
- 常識的に考えればわかるコード変更理由
例
良い (件名のみ):
feat: 未解決レビューコメント収集スクリプトを追加
fix: macOS BSD sort 互換のバージョン比較に置換
docs: 分類軸の記述を 2 軸に統一
refac: version_lt を純 Bash 関数として切り出し
本文で Why を補ってよい例:
fix: sort -V を純 Bash 比較に置換
macOS 標準の BSD sort は -V を受け付けず、set -e 下で即終了するため。
避ける:
update # type も内容も不明
fix: いろいろ直した # 具体性がない
feat: XXX を追加し YYY も変更し ZZZ も調整 # 複数の意味が混在 → 分割する
コミット分割ルール
- 1 コミット = 1 目的。複数の意味を同じコミットに混ぜない
- ユーザーの依頼が「コミットして」だけでも、混在する変更は必ず分割する
- 変更を意味ごとに分類し、2 種類以上あれば別コミットにする
- 無関係な既存の変更 (unrelated change) は巻き込まない。ステージング対象を明示する
- ファイル内の変更を行ごとに分割するのはファイル破損リスクがあるため基本的には避ける
- Unity の Scene / Prefab 等、分割が困難なバイナリに近いファイルも同様に無理に分割しない
実行フロー
git status / git diff で変更内容を把握する
- 変更を意味ごとに分類する
- 分類ごとに明示パスで
git add <path> する (git add . / -A は避ける)
- 各コミットの件名を決める。必要な場合のみ本文を添える
- コミット前に「そのコミットは 1 つの目的だけか」を再確認する
- 最終確認として本文は本当に必要かを自問する。件名だけで十分なら本文は書かない
- 実際に
git commit を実行するコマンドには CLAUDE_GIT_SKILL=commit を前置する (PreToolUse hook ~/.claude/hooks/enforce-git-skill.sh が本スキル経由かどうかをこのマーカーで判定し、無いと直接実行はブロックされる)
CLAUDE_GIT_SKILL=commit git commit -m "<件名>"