Github Copilot無課金ユーザー必見！？GitLensのAI機能を使ってコミットメッセージを自動生成する✨

# この記事を読むとできること
![画面収録 2024-07-10 20.43.42.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/656d538d-04c5-b18f-b5f9-0f395737b65c.gif)




GitLensのAI機能を使うと、↑のようにステージング領域に追加したファイルの変更差分を読み取ってコミットメッセージを自動生成し、その内容を自動挿入してくれます。

Github Copilotだとキラキラマーク「✨」をクリックするとコミットメッセージを自動生成できますが、GitLensでも同じようなことができます。


# はじめに
皆さん、VSCodeの拡張機能 [**GitLens**](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) は使っていますか？
GitLensはコードの履歴や変更点を視覚的に把握しやすくする拡張機能であり、個人的にはGitLensがないと開発できないくらい重宝しています！

:::note warn
GitLensはパブリックリポジトリであれば主要機能のほとんどを無料で利用できます。
一方、プライベートリポジトリでは一部の高度な機能が制限されているので、全機能をフル活用するにはGitKrakenアカウント（有料プランの契約）が必要です。
なお、本記事で紹介する内容はプライベートリポジトリでは未検証です。
:::

そんなGitLensですが、どうやらver 13.4（2023/3/16リリース）から実験的なAI機能が追加されており、コミットメッセージを自動生成する機能が利用できるようになっていました。
また、現在も開発が行われており、最新ver 15.1 (2024/6/5リリース) でも機能が拡張されたようです。

https://help.gitkraken.com/gitlens/gitlens-release-notes-current/#version-13-4

「コミットメッセージの自動生成ならGithub Copilot使えばよくね？」なのですが、私は個人開発においてはGithub Copilotに課金していません。（OpenAIやAnthropic等、様々な生成AIサービスに課金しているのでお財布事情的につらい🥲）

なので同じような機能がないか探していたところ、上記のGitLensのAI機能を見つけたので触ってみた感じです。

それでは使い方を紹介します。


# コミットメッセージを自動生成するための手順

GitLensをインストールしていない方は以下の記事を参考にインストールしてください。

https://future-architect.github.io/articles/20240415a/

## ①利用するAIモデルを選択する
GitLensのAI機能は、以下いずれかのモデルを利用してコミットメッセージを自動生成します。
- OpneAI GPT
- Anthropic Claude
- Google Gemini

なので事前に利用するモデルのAPIキーを用意しておいてください。

APIキーを用意したら、VSCodeで　`Command + Shift + p`（Windowsの場合は `Ctrl ＋ Shift ＋ p`） を押下してコマンドパレットを開き、`gitlens: Switch AI Model` と入力します。
すると以下のようにモデルを選択するウィンドウが表示されるので、任意のモデルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/c42e54d1-ff6a-da6d-82a4-8b31accfd425.png)
以降は、OpenAIのモデルを利用することを前提に説明します。

## ②ファイルの変更をステージング領域に追加する
ここでは、`main.py` ファイルに対して簡易的なadd関数を追加してステージング領域に上げます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/a2829e31-3438-5867-025f-157901a0a1f9.png)


## ③ `Generate Commit Message (GitLens)` をクリックする
画面上部の `・・・` をクリック → `Generate Commit Message (GitLens)` をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/72db1373-1fa2-6008-3f86-38be0f88a81a.png)

すると、以下のようにポップアップダイアログ（コードの変更差分がAIモデルに送信されることによるリスクを承諾するかどうか）が表示されます。
ここでは `Always` を選択します。

<img width="300" alt="img2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/3d5e74a8-ce51-bbc8-9eba-8bcd56731c46.png">

## ④AIモデルのAPIキーを入力する
以下のウィンドウが表示されるので、事前に用意したAPIキーを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/928845b1-af53-af31-7b32-b08aa30e66e7.png)



## ⑤お疲れさまです🚀
変更内容に基づいて以下のようにコミットメッセージが自動生成されました🚀

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/b6461a91-1114-d72e-02f8-5105c13680eb.png)

---

ここまでで、コミットメッセージを自動生成するための最低限の設定は完了なのですが、いくつか改善したい点がありました🤔

- コミットメッセージの内容を改善したい
    - 日本語で作ってほしい
    - Semantic Commit Messageなどに準拠したメッセージを作ってほしい
　→**生成AIに指示するプロンプトをカスタマイズしたい**

<br>

- コミットメッセージを自動生成するまでのGUIポチポチ（2手必要）がだるい
　　→**ショートカットキーを使って一発で生成したい** 

# 改善する
## 生成AIに指示するプロンプトのカスタマイズ
デフォルトでは、以下のプロンプトとなっています。
```text
Now, please generate a commit message. Ensure that it includes a precise and informative subject line that succinctly summarizes the crux of the changes in under 50 characters. If necessary, follow with an explanatory body providing insight into the nature of the changes, the reasoning behind them, and any significant consequences or considerations arising from them. Conclude with any relevant issue references at the end of the message.
```

このプロンプトの内容を変更したい場合は、`settings.json` の `"gitlens.experimental.generateCommitMessagePrompt":` で自由に指定することができます。

参考までに、以下のような感じで指定してみました。
```json:settings.json
  "gitlens.experimental.generateCommitMessagePrompt": "Semantic Commit MessageおよびCommit Message Guidelineに従い、コミットメッセージを作成してください。{{1行目の接頭辞のみ英語、それ以外（変更のサマリと2行目以降の変更内容）は日本語で出力してください。}}",
```

この状態でコミットメッセージの生成を実行したところ、まぁまぁいい感じに作ってくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/2727bb78-1a89-c49e-48f5-24b9adda77dc.png)


ちなみに、変更が複数あった場合もいい感じに作ってくれます。
冒頭のGIFはPlaywrightのハンズオンで環境構築したときの変更差分なのですが、変更点をもとに以下のようなコミットメッセージを作ってくれました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/5547ce6e-f775-4b51-908c-86390d8da20c.png)




## ショートカットキーを設定して一撃でコミットメッセージを生成できるようにする

<img width="300" alt="スクリーンショット 2024-07-10 16.22.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/5d0ca126-ab39-d2f1-8dd3-734688428570.png">

これを実現するには、`Command + Shift + p`（Windowsの場合は `Ctrl ＋ Shift ＋ p`） を押下してコマンドパレットを開き、`Preferences: Open Keyboard Shortcuts` と入力します。

すると、以下の画面が出るので検索ウィンドウに `Gitlens: generate Commit Message` と入力し、自動生成機能を呼び出すキーバインドを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/072b3a12-fd23-0094-2862-6cf8947d8d9f.png)

私は `Command + F7`　にしましたが、設定キーはお好みでどうぞ！

最後に、ステージング領域に変更が追加されている状態でショートカットキーを押下すると、以下のように自動生成機能が実行されます。

![画面収録 2024-07-10 20.43.42.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319375/656d538d-04c5-b18f-b5f9-0f395737b65c.gif)

# AIモデルを変更したい場合（例えばGPT→Claudeにする等）
まずは登録しているAPIキーを削除します。
削除の方法は、`Command + Shift + p`（Windowsの場合は `Ctrl ＋ Shift ＋ p`） を押下してコマンドパレットを開き、`GitLens: Reset Stored AI Key` と入力してEnterすればOKです。

その後、前述した手順①〜⑤を行います。

# さいごに
以上、GitLensのコミットメッセージ自動生成機能の紹介でした！

記事後半で説明したように、プロンプトのカスタマイズとショートカットキーの設定によってより効率的な運用ができると思います。

Github Copilot無課金の方は是非利用してみてください〜