🤖

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 なら $ARGUMENTS1/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プリンターを買ったら、朝起きたらガジェットができてた」を書きます。

📚 1人アドベントカレンダー2025 全記事一覧


megusunu

🐦 X (@megusunu)
🧶 megusunuLab(ハンドメイド)
🏢 Wells合同会社

GitHubで編集を提案

Discussion