💬

Gemini CLI で Git のコミットメッセージを自動生成する

に公開

はじめに

ソフトウェア開発において、分かりやすい Git のコミットメッセージを書くことは非常に重要です。後から変更履歴を追いかけたり、他の開発者と共同作業したりする際に、質の高いコミットメッセージは大きな助けとなります。

しかし、変更内容を正確に要約し、適切なフォーマットで記述するのは意外と手間がかかる作業です。「git diff の結果を眺めながら、うーん、なんて書こうか…」と悩んだ経験は誰にでもあるのではないでしょうか。

筆者は、VS Code で開発をすることが多く、Copilot による Git コミットメッセージの自動生成が便利で良く使っています。これが便利すぎて、調子に乗って毎回 Copilot に作成してもらっていたら、使用制限に到達してしまって困ってしまいました。

そこで、Gemini CLI でも似たようなことができないか調べてみたところ、やり方がわかったので、今度は Gemini CLI を使うようにしています。Copilot のように VS Code に統合されているわけではないので、少し手間が増えますが、手作業でコメントを用意するよりは質の良いものができるので助かっています。

この記事では、Google の Gemini CLI を活用して、このコミットメッセージ作成プロセスを自動化し、開発効率を向上させる方法を紹介します。

Gemini CLIとは

Gemini CLI は、ターミナルから直接 Gemini モデルを対話的に利用できるコマンドラインツールです。プロンプトを使うことで、テキストの生成、要約、変換などを簡単に行うことができます。

また、パイプ (|) やリダイレクト (<>) と組み合わせることで、他のコマンドの出力を Gemini に渡したり、Gemini の出力を他のコマンドへ入力したりして、自動処理を行うことができます。

この特性を活かせば、「git diff の出力」を「コミットメッセージ」に変換する、といった作業が非常に簡単に実装できます。

前提条件

この記事の手順を試すには、以下のツールがインストールされている必要があります。

ツール名 説明
Git バージョン管理システム
Gemini CLI Google の Gemini API を利用するための CLI ツール

Gemini CLI のインストールや設定がまだの方は、公式のドキュメントを参考にセットアップを完了してください。

手順

基本的な流れは非常にシンプルです。

  1. コミットしたいファイルをステージング (git add)
  2. Gemini CLI へコミットメッセージを生成するように指示 (gemini -p)

ターミナルで、コミットしたい変更があるリポジトリのディレクトリに移動し、コミットしたいファイルをステージングしてから、gemini コマンドを実行します。

プロンプトの内容について、細かい指示をした方が精度があがるので、ここではシェルスクリプトを用意して実行することにします。

コマンドの用意

最初にコマンドを用意します。ここでは generate_commit_message.sh としましょう。

generate_commit_message.sh
#!/bin/bash
# shellcheck disable=SC2006

PROMPT=$(cat << EOS
# コミットメッセージの要約作成

- Conventional Commits 形式でコミットメッセージを作成すること
- 件名は 50 文字以内とすること
- 日本語とすること
- 作成するコミットメッセージには、変更の要約、目的、影響を盛り込むこと
- 最後に、件名とは別に変更内容の要約を記述すること

## 手順

1. コマンド 'git diff --staged' を実行した結果の取得
2. 結果から、具体的かつ簡潔で分かりやすいコミットメッセージを作成
3. 作成したコミットメッセージを 1 行 80 文字以内に要約

## 'git diff --staged' を実行した結果

---

eval "$(git diff --staged)"

---

## 出力例

feat: hello関数を更新し、goodbye関数を追加

目的: アプリケーションの挨拶機能を拡張し、終了時のメッセージ表示機能を提供します。
影響: 既存のhello関数の出力が変更されますが、機能的な影響はありません。
新しいgoodbye関数が利用可能になります。

---
hello関数のメッセージを「Hello, Gemini!」に変更。
goodbye関数を追加し、「Goodbye, world!」を出力するようにしました。

---
要約: hello関数の出力メッセージを更新し、goodbye関数を新規追加しました。

EOS
)
gemini \
    --yolo \
    --model gemini-2.5-flash \
    --prompt "${PROMPT}"

コマンドの解説

  • git diff --staged: ステージング済みの変更を対象として、現在の作業ディレクトリの変更内容を表示
  • gemini: Gemini CLIを実行
    • --yolo: 自動で処理を進行
    • --model: 使用するモデルの指定
    • --prompt プロンプトの指定

実行例

例えば、以下のような main.py があったとして、これを Git リポジトリへ登録してあったとします。

main.py
def helle():
    print("Hello, world!")

これを次のように変更します。

main.py
def hello():
    print("Hello, Gemini!")

def goodbye():
    print("Goodbye, world!")

変更を Git リポジトリへ反映するために、ステージングします。

git add main.py

差分を確認するには git diff --staged コマンドを実行します。

git diff --staged

実行結果は次のようになります。

diff --git a/main.py b/main.py
index a41e776..798be0f 100644
--- a/main.py
+++ b/main.py
@@ -1,2 +1,6 @@
+
 def hello():
-    print("Hello, world!")
+    print("Hello, Gemini!")
+
+def goodbye():
+    print("Goodbye, world!")

この状態で先ほどのコマンドを実行します。

bash generate_commit_message.sh

すると、Gemini CLIは以下のようなコミットメッセージを生成します。

feat: hello関数を更新し、goodbye関数を追加

目的: アプリケーションの挨拶機能を拡張し、終了時のメッセージ表示機能を提供します。
影響: 既存のhello関数の出力が変更されますが、機能的な影響はありません。
新しいgoodbye関数が利用可能になります。

---
hello関数のメッセージを「Hello, Gemini!」に変更。
goodbye関数を追加し、「Goodbye, world!」を出力するようにしました。

---
要約: hello関数の出力メッセージを更新し、goodbye関数を新規追加しました。

生成されたメッセージを確認し、必要に応じて手直しを加えたら、git commit コマンドでコミットします。

git commit -m "feat: hello関数を更新し、goodbye関数を追加"

要約を採用しても良いでしょう。

git commit -m "hello関数の出力メッセージを更新し、goodbye関数を新規追加しました。"

おわりに

Gemini CLI を使うことで、面倒な Git のコミットメッセージ作成を半自動化し、時間を節約しながらも質の高いコミットログを維持することができます。プロンプトを工夫すれば、自分のプロジェクトのルールに合わせたメッセージを生成させることも可能です。

ぜひこの方法を日々の開発ワークフローに取り入れて、より快適な Git ライフを送ってみてください。

Discussion