Claude Code のカスタムコマンドでコミットメッセージを提案してもらう
1人アドベントカレンダー2025 11日目。
今日は自分が作って楽になった軽めのTipsの紹介です。Claude Code のカスタムコマンドを使って、コミットメッセージを提案してもらう仕組みを作りました。
作ったもの
2つのカスタムコマンドを作りました。
| コマンド | 役割 |
|---|---|
/commit-suggest |
ステージング内容を分析し、コミットメッセージ案を3つ提案(コミットはしない) |
/commit <番号 or メッセージ> |
指定したメッセージでコミットを実行 |
責務を分けることで、「提案だけ見たい」「自分で考えたメッセージでコミットしたい」といった使い方にも対応できます。
使い方
# ステージングする
git add .
# Claude Code で提案を受ける
/commit-suggest
Claude が差分を確認して、こんな感じで提案してくれます。
ステージング内容:
articles/20251211-git-commit-ai-command.md | 452 ++++++++++++++++++++
コミットメッセージ候補:
1. docs: Add article about AI-powered git commit message command
2. feat: Add advent calendar day 11 article on git ai-commit
3. docs: AIコミットメッセージ提案コマンドの記事を追加
気に入った候補があれば、番号を指定してコミットすることができます。
/commit 1
これで docs: Add article about AI-powered git commit message command というメッセージでコミットされます。
カスタムメッセージを直接指定することもできます。
/commit feat: コミットメッセージ提案機能の記事を追加
なぜ作ったか
コミットメッセージを書くとき、こんな悩みがありました。
- 「この変更、fix なのか refactor なのか迷う」
- 「英語で書きたいけど、ニュアンスが合ってるか不安」
- 「差分が大きいとき、何を主題にすべきかわからない」
今まで Claude Code に「ステージングの内容を見て」とお願いしていたのですが、毎回同じ指示を書くのが面倒。カスタムコマンドにしておけば /commit-suggest だけで済みます。
セットアップ
Claude Code のカスタムコマンドは、Markdown ファイルを置くだけで作れます。
配置場所
カスタムコマンドは2つの場所に配置できます:
| 場所 | スコープ | 用途 |
|---|---|---|
~/.claude/commands/ |
全プロジェクト共通 | 個人の汎用コマンド |
<プロジェクト>/.claude/commands/ |
そのプロジェクトのみ | プロジェクト固有のコマンド |
今回はどのプロジェクトでも使いたいので、~/.claude/commands/ に配置します。
mkdir -p ~/.claude/commands
1. commit-suggest.md
~/.claude/commands/commit-suggest.md を作成します。
# コミットメッセージ提案
ステージングされた変更を確認し、コミットメッセージの候補を3つ提案してください。
## 手順
1. `git diff --cached --stat` でステージングされたファイル一覧を確認
2. `git diff --cached` で変更内容を確認
3. 変更内容を分析し、Conventional Commits 形式でコミットメッセージ案を3つ提案
## 出力形式
以下の形式で3つの候補を提案してください:
\```
1. type: 説明(英語 or 日本語)
2. type: 説明
3. type: 説明
\```
## ルール
- Conventional Commits 形式を使用(feat, fix, refactor, docs, style, test, chore, perf)
- 1行目は50文字以内を目安に
- 変更の「何を」したかを具体的に書く(「なぜ」は不要)
- ステージングがない場合は「ステージングされた変更がありません」と伝える
## 補足
候補を提案した後、ユーザーが `/commit 1` のように番号を指定したら、その候補でコミットを実行してください。
2. commit.md
~/.claude/commands/commit.md を作成します。
補足:
$ARGUMENTSは、スラッシュコマンドに渡された引数を受け取る変数です。/commit 1なら$ARGUMENTSは1、/commit fix: バグ修正ならfix: バグ修正が入ります。
# コミット実行
指定されたメッセージでコミットを実行します。
## 引数
$ARGUMENTS にはコミットメッセージまたは番号が渡されます。
- 番号(1, 2, 3)の場合:直前の `/commit-suggest` で提案した候補からそのメッセージを使用
- テキストの場合:そのテキストをそのままコミットメッセージとして使用
## 手順
1. ステージングされた変更があるか確認(`git diff --cached --name-only`)
2. 引数を解釈(番号 or テキスト)
3. `git commit -m "メッセージ"` でコミット実行
4. 結果を報告
## 注意
- ステージングがない場合はエラーを伝える
- 番号指定の場合、直前に `/commit-suggest` を実行していない場合は、まず `/commit-suggest` を実行するよう促す
- コミット成功後は `git log -1 --oneline` で結果を表示
## コミットメッセージ
$ARGUMENTS
3. Claude Code を再起動
カスタムコマンドを追加したら、Claude Code を再起動してください。/commit-suggest と /commit が使えるようになります。
カスタマイズ例
カスタムコマンドの良いところは、プロンプトを自由に変更できること。いくつかアイデアを紹介します。
日本語でメッセージを出力
commit-suggest.md のルールを変更します。
## ルール
- Conventional Commits 形式を使用
- **日本語で出力**
- 1行目は50文字以内を目安に
絵文字プレフィックス(gitmoji)
## ルール
- gitmoji 形式を使用(例:✨ 新機能追加、🐛 バグ修正、♻️ リファクタリング)
- 絵文字の後にスペースを入れて説明を書く
- 日本語で出力
出力例:
1. 🐛 Cookieサイズのバリデーション追加
2. ✨ 4096バイト制限チェック機能を実装
3. ♻️ Cookie処理のバリデーションをリファクタリング
チケット番号を含める
## ルール
- 形式: [PROJ-XXX] type: description
- ブランチ名からチケット番号を推測(例: feature/PROJ-123-xxx → [PROJ-123])
- チケット番号が不明な場合は [PROJ-000] を使用
レビュー観点を追加
提案だけでなく、変更のレビューコメントも出力:
## 出力形式
### コミットメッセージ候補
1. type: 説明
2. type: 説明
3. type: 説明
### レビューコメント
- この変更で気になる点があれば指摘
- テストが必要そうな箇所があれば指摘
プロジェクト固有のルールを適用
特定のプロジェクトでのみ使うルールは、プロジェクトの .claude/commands/ に配置します。
例:myproject/.claude/commands/commit-suggest.md
## ルール
- このプロジェクトでは [MYPROJ-XXX] プレフィックスを必須とする
- フロントエンド変更は feat(ui): 形式を使用
- API変更は feat(api): 形式を使用
こうすると、~/.claude/commands/ のグローバル版より、プロジェクト固有版が優先されます。
実際に使ってみた感想
1週間ほど使ってみて、良かった点が見えてきました。
良かった点:
- 「fix か refactor か」の迷いが減った
- 英語のコミットメッセージの品質が上がった
- 差分が大きいときに「何が主題か」を整理する助けになる
- シェルスクリプト版と違って、セットアップが Markdown ファイルを置くだけ
改善したい点:
- 差分が大きすぎると提案が的外れになることがある
- たまに番号を指定しても違うメッセージが使われる(会話の流れ依存)
- タイトルと詳細の内容をコミットメッセージとして使いたいことがある
完璧ではないですが、「コミットメッセージを考える時間」が短縮されるので、個人的には満足しています。
おわりに
Claude Code のカスタムコマンドは、Markdown ファイルを置くだけで作れるので、自分のワークフローに合わせた便利コマンドを簡単に追加できます。
今回作った /commit-suggest と /commit は、コミットメッセージを考える「最初の一歩」を助けてくれるツールとして重宝しています。
他にも「PR 説明文を生成」「コードレビューを依頼」など、いろいろなカスタムコマンドが作れそうです。
明日は「ブラックフライデーで3Dプリンターを買ったら、朝起きたらガジェットができてた」を書きます。
megusunu
🐦 X (@megusunu)
🧶 megusunuLab(ハンドメイド)
🏢 Wells合同会社
Discussion