AIによるコミット自動化

背景・モチベーション

私はコミットメッセージを考えるのが苦手で、コミットするだけの作業にかなりの時間を消費していたので、Claude Code の Slash Command を使って AI にやらせています。

コミットメッセージを AI に考えさせるという行為自体に少し抵抗があり、罪悪感を持っていたのですが、チームでやっている輪読会で「AI にコミットメッセージを書かせる」という話題になった時にメンバーの反応が良かったので、いつでも共有できる状態にしておこうと思い、プロンプトを一新することにしました。

今使っているものが当時 AI に 5 分くらいで書かせたものなので、今回は自分の思想を盛り込みつつ、今使っている Slash Command への不満を解消しながら一新していく。

作成した Slash Command

commit.md
---
description: Git差分を分析して適切な粒度でコミットを作成
---

## 実行手順

1. `git status``git diff` で変更を分析
2. 差分に潜在的な問題や懸念事項があれば報告し、コミットしない
3. 以下の基準でコミットをグループ化:
   - 1 コミット = 1 論理変更
   - 依存する変更は同一コミット
4. コミット計画を表形式で提示し、**ユーザーの確認を求めずに直接実行**

## コミットメッセージ形式

```
<emoji> <prefix>: <subject>

[body: 変更の理由を説明]
```

**<emoji> <prefix> 一覧:**

- ✨ feat: 新機能の追加
- 🐛 fix: バグ修正
- ⚡️ perf: パフォーマンス改善
- ♻️ refactor: コードのリファクタリング
- 🔥 remove: コードやファイルの削除
- 💄 style: UI やスタイルファイルの追加・更新
- 🚸 ux: ユーザー体験/ユーザビリティの改善
- ♿️ a11y: アクセシビリティの改善
- 📝 docs: ドキュメントの追加・更新
- 💡 comment: ソースコード内のコメント追加・更新
- ✏️ typo: タイポの修正
- 🤡 mock: モックの作成
- 🏷️ types: 型の追加・更新

**ルール:**

- subject: 50 文字以内で変更内容を簡潔に説明
- body: 変更の理由("なぜ")を詳しく説明
- **このコマンド実行後は通常モードに戻り、ユーザーが明示的に `/commit` を実行するまで自動的にコミットしない**
- **コミットメッセージは全て日本語で記述してください。**

解説

差分に潜在的な問題や懸念事項があれば報告し、コミットしない

これが書いてあるだけで AI が脳死コミットをしなくなります。typo に気づいてくれたり、リファクタリングの提案をコミット前にしてくれるようになります。

コミットの粒度

1 コミット = 1 論理変更を原則としています。

理由は書くまでもないと思いますが、

  • 問題が起きた時に原因を特定しやすい
  • revert しやすい
  • レビューがしやすい

などの理由があります。

ユーザーの確認を求めずに直接実行

これは好みですが、私はつけています。これがないと「コミットを実行しますか?」と聞いてきます。いちいち承認するの面倒なのでつけています。これでもたまに聞いてきますが。

subject: 50 文字以内

50 文字以内は好みかなと思います。私は調べたら 50 文字以内と言っている人が多かったのでそうしてます。

body: 変更の理由("なぜ")を詳しく説明

有名な t-wada さんのツイートにもあるように、コミットログには Whyを書いておくと、後から見た時になぜその変更をする必要があったのかが分かるので良さそうです。

有名な t-wada さんのツイート

絵文字/prefix

絵文字はかわいいのでつけてます。もっさりしている GitHub を華やかにできます。可読性も良くなります。絵文字はgitmojiを参考にしてます。

prefix は言わずもがなです。昔は絵文字 Only でやっていましたが以下の記事を読んでから合わせてつけるようにしてます。

このコマンド実行後は通常モードに戻り、ユーザーが明示的に /commit を実行するまで自動的にコミットしない

これを追加しておかないと、続けて作業する時に勝手にコミットしてしまうことがあります。

コミットメッセージは全て日本語で記述してください

最終的に英語に修正して使うのでつけています。英語にすることで少しだけトークン消費を抑えられ、少しだけ賢くなるらしい... 体感はしたことないです。

英語版
---
description: Git差分を分析して適切な粒度でコミットを作成
---

## Execution Steps

1. Analyze changes with `git status` and `git diff`
2. Report any potential issues or concerns in the diff and do not commit
3. Group commits based on the following criteria:
   - 1 commit = 1 logical change
   - Dependent changes in the same commit
4. Present commit plan in table format and **execute directly without asking for user confirmation**

## Commit Message Format

```

<emoji> <prefix>: <subject>

[body: explain the reason for the change]

```

**<emoji> <prefix> List:**

- ✨ feat: introduce new features
- 🐛 fix: fix bugs
- ⚡️ perf: improve performance
- ♻️ refactor: refactor code
- 🔥 remove: remove code or files
- 💄 style: add or update UI and style files
- 🚸 ux: improve user experience/usability
- ♿️ a11y: improve accessibility
- 📝 docs: add or update documentation
- 💡 comment: add or update comments in source code
- ✏️ typo: fix typos
- 🤡 mock: create mocks
- 🏷️ types: add or update types

**Rules:**

- subject: concisely describe the change within 50 characters
- body: explain the reason ("why") for the change in detail
- **After executing this command, return to normal mode and do not automatically commit until the user explicitly runs `/commit`**
- **Write all commit messages in Japanese.**

終わりに

AI にコミットメッセージを考えさせるのは少し心配ですが、自分で書くよりよっぽどいいメッセージを書いてくれます。セッション情報も読み取って考えてくれるので結構正確なので、私はこれからも愛用していくつもりです。

参考