コードを書いた後、毎回コミットメッセージを考えたり、PullRequest(以下、PR)の説明を書いたりするのに時間をかけていませんか?
コミットメッセージというのは、詩のようなもので、中には語られるようなコミットメッセージが生まれたりして面白いですが。
この記事では、Claude Code CLI を使って、以下の2つを自動化するエイリアスを作成していきます。
- コミットメッセージの自動生成
- PR のタイトル・本文の自動生成
前提
-
Claude Code がインストールされ、
claudeコマンドが使える -
GitHub CLI がインストールされ、
ghコマンドが使える
コミットメッセージの自動生成
ここでは、git aicommit または、 git aicommit --detail と入力すると、Claude code が実際にコミットメッセージを生成するエイリアスを作成します。
仕組み
以下のような仕組みのコマンドを目指します。
git aicommit を実行
↓
① git diff --cached の内容を Claude に渡す
↓
② Claude がコミットメッセージを生成
↓
③ git commit -m "..." -e でコミット(エディタで確認)
セットアップ
以下のコマンドをターミナル上で実行します。
このコマンドは、git alias を ~/.gitconfig ファイルに追加するコマンドです。
具体的なコマンドの説明は、後ほど行います。
git config --global alias.aicommit '!f() { \
if [ "$1" = "--detail" ]; then \
COMMITMSG=$(claude --no-session-persistence --print "Generate a Git commit message in Japanese based strictly on the contents of `git diff --cached`. Format it as follows: First line: a concise one-line summary. Then a blank line. Then a detailed bullet-point list explaining what was changed and why. Output ONLY the commit message, no extra explanation."); \
else \
COMMITMSG=$(claude --no-session-persistence --print "Generate ONLY a one-line Git commit message in Japanese. The message should summarize what was changed and why, based strictly on the contents of `git diff --cached`. DO NOT add an explanation or a body. Output ONLY the commit summary line."); \
fi; \
git commit -m "$COMMITMSG" -e; \
}; f'
使い方
# ステージングしてから実行
git add .
# シンプルな1行メッセージ
git aicommit
# 詳細なbullet point付きメッセージ
git aicommit --detail
生成されるメッセージの例
git aicommit
ユーザー認証機能を追加
git aicommit --detail
ユーザー認証機能を追加
- JWTトークンによるセッション管理を実装
- ログイン・ログアウトのエンドポイントを追加
- パスワードのハッシュ化にbcryptを使用
コードのポイント解説
! プレフィックス
Git エイリアスの先頭に ! をつけると、Git コマンドではなくシェルコマンドとして実行されます。
f() { ... }; f パターン
関数を定義してすぐ呼ぶことで、複数コマンドを順番に実行できます。
--no-session-persistence
会話履歴を保存しない使い捨ての呼び出しにします。
--print
対話モードを起動せず、結果だけ標準出力に出します。
$1 による分岐
git aicommit --detail と打つと $1 に --detail が入り、詳細プロンプトが発火します。
git commit -e
エディタを開いて確認・編集できるようにします。Claude の生成結果をそのまま使うのではなく、人間が最終確認できる余地を残しています。
PR を自動生成
ここでは、先ほどの内容を応用して、PRのタイトルと本文を Claude Code が実際に生成する GitHub CLI エイリアスを作成します。
仕組み
以下のような仕組みのコマンドを目指します。
gh pr aicreate を実行
↓
① マージ先ブランチとの差分(log + diff)を取得
↓
② PRテンプレートの有無を確認
↓
③ Claude がタイトル・本文を生成
↓
④ gh pr create でブラウザを開いて確認
なぜ gh aliasなのか
git alias でも実装は可能です。しかし、gh alias にするメリットがあります。
-
~/.config/gh/config.ymlに保存されるので、.gitconfigファイルを無駄に汚さない -
gh prのサブコマンドとして自然に使える - GitHubを操作するという意味合いで、
ghコマンドとしての責務が一致している
セットアップ
gh alias set 'pr aicreate' '!f() { \
BASE=${1:-main}; \
DIFF=$(git log $BASE..HEAD --oneline; echo "---"; git diff $BASE); \
TEMPLATE=$(cat .github/pull_request_template.md 2>/dev/null || cat .github/PULL_REQUEST_TEMPLATE.md 2>/dev/null || echo ""); \
TITLE=$(claude --no-session-persistence --print "Based on these git changes, generate ONLY a one-line Pull Request title in Japanese. Output ONLY the title, nothing else.\n\n$DIFF"); \
if [ -n "$TEMPLATE" ]; then \
BODY=$(claude --no-session-persistence --print "Based on these git changes, generate a Pull Request body in Japanese. You MUST follow this PR template exactly:\n\n$TEMPLATE\n\nFill in each section based on the changes. Output ONLY the body.\n\n$DIFF"); \
else \
BODY=$(claude --no-session-persistence --print "Based on these git changes, generate a Pull Request body in Japanese using markdown format. Include these sections: ## 変更内容, ## 変更理由, ## 備考. Output ONLY the body.\n\n$DIFF"); \
fi; \
gh pr create --title "$TITLE" --body "$BODY" --web; \
}; f'
使い方
# mainへのPR(デフォルト)
gh pr aicreate
# 特定ブランチへのPR
gh pr aicreate feature/xxx
コードの解説
BASE=${1:-main}
引数が渡されなかった場合のデフォルト値を main にする書き方です。feature/xxx へのPRを作りたい場合は gh pr aicreate feature/xxx と指定します。
git log $BASE..HEAD --oneline と git diff $BASE の両方を渡す理由
| コマンド | 分かること |
|---|---|
git log |
何のコミットをしたか(概要) |
git diff |
実際にどのコードが変わったか(詳細) |
両方渡すことで Claude がより文脈を理解したPRを生成できます。
PRテンプレートの自動検出
TEMPLATE=$(cat .github/pull_request_template.md 2>/dev/null \
|| cat .github/PULL_REQUEST_TEMPLATE.md 2>/dev/null \
|| echo "")
2>/dev/null でファイルが存在しないエラーを握りつぶし、|| で複数のパスを順番に試します。
[ -n "$TEMPLATE" ]
-n は「文字列が空でない場合に真」を返します。テンプレートの有無で Claude へのプロンプトを切り替えています。
テンプレートあり → テンプレートのセクションを厳守して埋める
テンプレートなし → ## 変更内容, ## 変更理由, ## 備考 で自由生成
--web
ブラウザでPR作成画面を開き、送信前に内容を確認・編集できます。自動でPRが作成されないので安心です。
まとめ
| コマンド | 動作 |
|---|---|
git aicommit |
1行のコミットメッセージを自動生成 |
git aicommit --detail |
詳細なbullet point付きコミットメッセージを自動生成 |
gh pr aicreate |
mainへのPRを自動生成 |
gh pr aicreate feature/xxx |
指定ブランチへのPRを自動生成 |
Claude Code を CLI ツールとして組み合わせることで、普段の Git ワークフローに自然にAIを組み込めます。どちらも最終的にエディタやブラウザで確認できるので、安心して使えます。
ぜひ試してみてください。
参考・謝辞
本記事の git aicommit のベースとなるアイデアは、以下の記事から着想を得ました。シンプルかつ実用的なアプローチを共有してくださった hfm さん、KOBA789さんに感謝いたします。