vcs-commit-msg について
プロジェクトの履歴から既存の形式を把握し、バージョン管理のコミットメッセージを作成するスキルです。不明点を確認し、コミット前に草稿を提示して承認を得ます。
主な機能
- 01履歴に基づくコミット形式の分析
- 02git、hg、jj、svn のログに対応
- 03不明な慣例の確認
- 04コミット前の草稿レビュー
- 05AIの署名の削除
活用シーン
- 01リポジトリのコミット形式への準拠
- 02不明なメッセージ慣例の解決
- 03コミット前の草稿確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill vcs-commit-msgインストール後、Claude Code で/vcs-commit-msgを入力して読み込まれたか確認します。
詳細
vcs-commit-msg
プロジェクトで既に使われているスタイルに合ったコミットメッセージを作成します。 履歴からスタイルを判定します。 判断材料が十分でない場合は、ユーザーに確認します。 コミットする前に結果を提示します。 変更を AI エージェントやモデルの功績として記載しません。
範囲
このスキルが対象とするのは、コミットメッセージのテキストのみです。 ブランチ名、 PR のタイトルや説明、 タグのメッセージ、 およびコミットメッセージバッファー以外のものは対象外です。
手順
1. スタイルを判定する
メッセージを作成する前に、最近の履歴をサンプルします。
Git の場合:
git log -n 100 --no-merges \
--pretty=format:'--- commit ---%nauthor: %an <%ae>%nsubject: %s%nbody:%n%b'
各コミットは、author:、subject:、body: フィールドを明示した --- commit --- ブロックとして表示されます。
body: が空の場合、そのコミットには本文がありません。
その他の VCS(hg、jj、svn)の場合は、それぞれのツールのログ/テンプレート構文を使って同等のサンプルを作成します。 出力には、コミットごとに次の情報を含める必要があります。
- コミットの境界を明確に示すマーカー。
- 作者の名前とメールアドレス。
- 件名(メッセージの1行目)。
- 本文(残りの行。空の場合もあります)。
svn には柔軟なテンプレート言語がないため、svn log --xml を使います。
明らかなボットのコミットは除外します(可能な範囲で実施し、完全な除外は不要です)。
- 作者のメールアドレスまたは表示名に部分文字列
[bot]が含まれる。 - 作者のメールアドレスが
[email protected]、または既知のボット識別子(dependabot、renovate、github-actions、-bot@)を含む。 - 件名が
^Merge pull request #/^Merge branch/^Revert "に一致する。
一部のボットコミットが残っていても問題ありません。 100% の除外を目指して調査し続けないでください。
以下の各項目について、フィルタリング後のサンプルの80%以上が一致する場合は、支配的なパターンを判定します。 それ以外の場合、その項目は判断不能とします。
項目:
- 件名の形式 —
Conventional Commits(
feat: ...、fix(scope): ...)、 チケット/タスクを先頭に置く形式(PROJ-123: ...、[PROJ-123] ...)、 平叙的な命令形(「Add ...」)、 説明形(「Added ...」、「Adds ...」)、 またはその他。 - 言語 — 英語、ロシア語など。
- 大文字・小文字の使い方 — 先頭文字が大文字/小文字、 末尾のピリオドの有無。
- 件名の文字数上限 — 件名の80%以上が収まる上限のうち、50、72、80で最も小さいもの。
- 本文の有無 — 80%以上に本文がある場合は本文あり、 80%以上に本文がない場合は本文なし。
- 本文の折り返し幅 — 本文の各行の80%以上が収まる幅のうち、72、80、100で最も小さいもの。
- トレーラーの常用 —
Signed-off-by、Closes #、Fixes #、Refs:など。
2. 判断不能な項目について質問する
判断不能な項目がある場合は、明示的にユーザーに質問してから作成します。 空のリポジトリでは定義上すべての項目が判断不能となるため、その場合も質問します。 質問はすべて1つのメッセージにまとめてください。 1つずつ質問してはいけません。
言語やその他の項目についてユーザーから明示的な指定があれば、常に判定結果よりもその指定を優先します。
3. 作成する
判定または選択されたスタイルに従って、件名(該当する場合は本文も)を作成します。 チケット接頭辞を使う規約の場合は、ブランチ名/ブックマーク名からチケットを取得します。 そこにない場合は、ユーザーに確認します。 本文の内容とスタイルは判定された規約に従います。 履歴に示されている内容よりも外部のベストプラクティスを優先してはいけません。
4. AI の功績として記載しない
作成するメッセージには、どのような形式であっても AI エージェント、モデル、ツール(Claude、ChatGPT/GPT、Copilot、Cursor、Gemini、Aider、Codex、Codeium/Windsurf、Replit AI、JetBrains AI、Tabnine、Cody、Devin など)について記載してはいけません。
- AI アカウント(
[email protected]、[email protected]、類似する自動生成アドレス)のCo-Authored-By:トレーラーを記載しないでください。 - 「Generated with ...」、「Made by ...」、「Authored by ...」の行を記載しないでください。
- 件名や本文にインラインで言及しないでください。
人間の Co-Authored-By: および Signed-off-by トレーラーは、プロジェクトの慣例に従って使用できます。
これらのルールは、コミットメッセージバッファーに既に入力されている内容(修正や書き換えを行う前のメッセージ、commit.template の内容、別のフックやツールが挿入したテキスト、以前の下書きなど)にかかわらず、最初から適用されます。
既に記載されている AI の功績に関する記述は削除し、引き継がないでください。
5. 適用前に表示する
作成したメッセージは必ずユーザーに表示し、 コミットする前に、内容が適切かどうかを確認します。 履歴から検出した要素と、 ユーザーが手動で解決した要素を簡潔に示し、 選択の根拠がユーザーにわかるようにします。 ユーザーの承諾を得てから、VCS の標準的なコミット/修正コマンドで適用します。