コミットメッセージを考えるのが地味に面倒だと感じることはないでしょうか。 もはや最近だとすべてAIがやるから考えることもないかもしれませんが、未だに手で修正などを加えた時は自分でコミットメッセージを考えています。
普段私はlazygit
を使っているのですが、lazygitで作業をしていると、いちいち閉じてAI呼び出してをするのが面倒に感じていました。
今回はlazygitの customCommands からClaude Codeの claude コマンドを呼び出して、ステージング済みの差分からコミットメッセージを自動生成する設定を作りました。
やりたかったこと
lazygitにはキーバインドに任意のシェルコマンドを割り当てられる customCommands という機能があります。
これを使って、ファイル一覧のパネルで ctrl+g を押すと、ステージングとの差分( git diff --cached )をClaudeに渡してコミットメッセージを生成し、そのままエディタが開いて確認・修正してからコミットできる、という流れを目指しました。
最終的にできた設定はこちらです。
Macはデフォルトだと設定コマンドは ~/.config/lazygit/config.yaml に保存されています。 他のOSの場合
customCommands:
- key: "<c-g>"
context: "files"
description: 'generate commit message'
command: |
MSG=$(git diff --cached | claude --no-session-persistence --print --model haiku \
--system-prompt 'Output only a one-line git commit message in English. Begin with a capitalized base-form verb. End with a period. Output nothing except that single line.' \
'Here is the staged diff. Produce the commit message.')
git commit -e -m "$MSG"
loadingText: "Generating..."
output: terminal
シンプルにコマンドを書いているだけですが、haikuのモデルに1行の英語で、始まりは動詞でコミットメッセージを書くように指示しています。
私はこのスタイルなので、必要に応じて適宜変更してください。
ただ、プロンプトがうまくないと余計なメッセージが含まれてしまうので注意が必要です。
もう一点 output: terminal を指定しないと、コマンド発動後にコミットメッセージが入力されないので注意してください。
haiku モデルにコミットメッセージだけ出力してと頼んでも、指示が緩いと以下のような前置きを勝手に付けてくることがありました。
This is a simple task, not requiring a plan... I'll just output the commit message directly.
Fix typo in user validation logic.
他の工夫としては --no-session-persistence でセッションを残さないようにしています。
まとめ
lazygitのcustomCommandsとClaude Codeを組み合わせて、ステージング差分からコミットメッセージを生成するキーバインドを作りました。 カスタムコマンドの存在を知らなかった方や、同じようにlazygitとAIを組み合わせたい方の参考になれば幸いです。