GitLensによるcommitメッセージ自動生成

# はじめに
私はcommitメッセージを英語で書く派なのですが、英語って難しいなと日々感じています。
正直なところ、つい最近まではcommitメッセージの丁寧さをそこまで意識せず、ざっくりの感覚で書いていたのは否めないです。
これを改善するための手段として、最近AIの使い道を模索する中で良さそうなものを発見したので記事に残したいと思います。

# 目的
どういう単語を使えば良いのか？どういう文章を書けば良いのか？その辺をちゃんと意識してcommitメッセージを作ろうとした時に、時間がかかっちゃうので参考になる文章がほしい。

[こういった例文をまとめた記事](
https://gist.github.com/mono0926/e6ffd032c384ee4c1cef5a2aa4f778d7)もすごくありがたく参考になるのですが、AIによる自動生成はやっぱり欲しいなぁ。そんな思いです。

# commitメッセージを自動生成する
VSCodeの拡張機能 [**GitLens**](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) を使います。
エディタ上でコードの履歴や変更点を視覚的に把握しやすくする拡張機能です。
現在Experimentalではありますが、いくつかのAI Modelを用いたcommitメッセージの自動生成が行えるようになっています。

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

## 事前準備
まずは[**GitLens**](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens) をインストールしましょう。

## AI Model選択
VSCodeで　`Command + Shift + p`（Windowsの場合は `Ctrl ＋ Shift ＋ p`） を押下してコマンドパレットを開きます。
そこで、`gitlens: Switch AI Model` と入力します。
お好きなModelを選択して、APIキーの設定をすれば終了です。

![スクリーンショット 2024-07-25 18.40.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/e806520c-10a6-67e0-7f29-d02e8c124512.png)


## Generate Commit Message！
今回はREADMEを修正してみます。
git add しましょう。

![スクリーンショット 2024-07-25 18.37.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/6008e082-d0e0-14c8-a96c-ead737b3a330.png)

そして右上の３点リーダーからGenerate Commit Message！

![スクリーンショット 2024-07-25 18.38.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/16a2e783-97fc-9025-363b-774170303d5f.png)

出てきました。
題・説明も書いてくれるみたいです。

![スクリーンショット 2024-07-25 18.42.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/801a37b0-97cb-4ce5-ddef-e47f251b5258.png)


# 簡潔なメッセージにしたい
commitメッセージのprefixとか、言語設定（日本語・英語）は、会社によって違ったりすると思います。

なので、カスタマイズしていきましょう。

`settings.json` の `"gitlens.experimental.generateCommitMessagePrompt":` で、実行時に与えるpromptを自由に指定することができるようです。

私の場合、

- 1行の英語のcommitメッセージにしたい
- prefixはつけたい

という希望がありました。

# promptに規約を含める

```json:settings.json
  "gitlens.experimental.generateCommitMessagePrompt": "Semantic Commit MessageおよびCommit Message Guidelineに従い、英語のコミットメッセージを1行で作成してください。"
```

[Semantic Commit Message](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)や[Commit Message Guideline](https://gist.github.com/robertpainsi/b632364184e70900af4ab688decf6f53)は、人間と機械が読みやすく、意味のあるcommitメッセージにするためのフォーマット仕様です。
この規則に沿うことでprefixがついたり比較的読みやすい文章が生成されます。

やってみると、期待通りのメッセージで生成されるようになりました。

![スクリーンショット 2024-07-25 19.02.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/e23a6c2a-7f42-a4f2-7975-abfe2b48216b.png)

commitメッセージは改行できるので、別に無理やり1行にしなくても良いのでは？という意見もあると思います。
しかし、会社内でcommitの粒度を小さくしていこう！という動きがあるため、敢えてこの設定にしています。
generateした結果が超アバウトな内容だったり、超長いメッセージだったりすると、そもそもcommitを分けようって考えに至るよね。たぶん。




## あとは楽に実行する
いちいち３点リーダーからGenerate Commit Messageを押すのも面倒です。
なのでショートカットキーを設定します。

`Command + Shift + p`（Windowsの場合は `Ctrl ＋ Shift ＋ p`） を押下してコマンドパレットを開き、`Preferences: Open Keyboard Shortcuts` と入力し、
`Gitlens: generate Commit Message` と入力し、好きなショートカットコマンドを設定しましょう。

![スクリーンショット 2024-07-26 13.38.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730383/c0b1e346-51f3-e206-cb36-dd9d858fe452.png)

これで楽に実行できるようになります。

# 最後に
実際やってみると、おお、こんな単語使うのか〜とかこんな文章書けば良いのか〜みたいな気付きがあって面白いです。
生成された文章が適切かどうかは都度判断必要かと思いますが、気をつけながらうまく取り入れていきたいと思います。（言うまでも無いことですね）