🤖

aicommitsによるgitコミットメッセージの自動生成を試す

2023/03/10に公開

OpenAIを使ってgitのコミットメッセージを自動作成するツールを見つけたので試してみました。

https://github.com/Nutlope/aicommits

導入方法

npmコマンドで簡単にインストールできます。
brew対応のissueが上がっているようなので、近く実装されるかもしれません。

Install aicommits:

  1. npm install -g aicommits
  2. Retrieve your API key from OpenAI

Note: If you haven't already, you'll have to create an account and set up billing.

  1. Set the key so aicommits can use it:

aicommits config set OPENAI_KEY=<your token>
This will create a .aicommits file in your home directory.

補足:OpenAIのAPI key作成と設定

手順にあるようにOpenAIのAPI keyが必要になるので、予め作成しておきましょう。

aicommits config set OPENAI_KEY=<your token>を実行すると、~/.aicommitsが作成されます。
API keyは平文で保存されるので、取り扱いには注意しましょう。

hello.goを修正してコミットメッセージを生成してみる

Goのサンプルプロジェクトをcloneして、動きを確認してみます。
hello/hello.gostringutil.Reverseを使い!selpmaxe oG ,olleHを逆から並び替てHello, Go examples!と表示するコードです。

package main

import (
	"fmt"
	"golang.org/x/example/stringutil"
)

func main() {
	fmt.Println(stringutil.Reverse("!selpmaxe oG ,olleH"))
}

これを修正しstringutil.Reverseを削除してみましょう。
diffは以下の通り。

 func main() {
-       fmt.Println(stringutil.Reverse("!selpmaxe oG ,olleH"))
+       fmt.Println("!selpmaxe oG ,olleH")
 }

git add .に続いてaicommitsを実行してみましょう。

コミットメッセージの候補として、Update main to print string without reversingが表示されました!
ここでYesを選択すると、このメッセージとともにcommitされます。

HTMLを修正してみる

次はoutyet/main.goをいじってみましょう。
これはGoのリリースバージョンをチェックして、結果に応じたHTMLを返すwebサーバを立ち上げます。
HTMLのテンプレート部は以下の通り。

// tmpl is the HTML template that drives the user interface.
var tmpl = template.Must(template.New("tmpl").Parse(`
<!DOCTYPE html><html><body><center>
	<h2>Is Go {{.Version}} out yet?</h2>
	<h1>
	{{if .Yes}}
		<a href="{{.URL}}">YES!</a>
	{{else}}
		No. :-(
	{{end}}
	</h1>
</center></body></html>
`))

これを日本語に修正してみましょう。

-<!DOCTYPE html><html><body><center>
-       <h2>Is Go {{.Version}} out yet?</h2>
+<!DOCTYPE html><html>
+<head lang="ja">
+       <meta charset="utf-8">
+       <title>Goのリリース</title>
+</head>
+<body><center>
+       <h2>Go {{.Version}} はリリースされた?</h2>
        <h1>
        {{if .Yes}}
-               <a href="{{.URL}}">YES!</a>
+               <a href="{{.URL}}"はい!</a>
        {{else}}
-               No. :-(
+               いいえ、まだです。 :-(
        {{end}}
        </h1>

続いてgit add .aicommitsを実行します。

Update HTML template to include Japanese translation と表示されました!

感想

いかがでしょう?今回はかなり簡単な差分しかテストしていませんが、過不足ないメッセージが作成されていたのではないでしょうか?
コード量が増えた場合にどのようなレスポンスが得られるのか非常に気になるところです。時間を見つけて、もう少し複雑な事例を試してみたいと思います。

注意点

  • このツールはgit diffからコード変更を取得しOpenAIのGPT-3に送信しています。OpenAIの利用規約を理解した上で利用し、秘匿情報等の送信はご自身の責任の元で行ってください。
  • 本稿執筆時点の最新版v1.3.0を使っていたところ、OpenAI API Error: 400 - Bad Requestが表示されることが頻繁に発生しました。issueで報告もされていますので、もし同じ現象で困った方は、npm install -g aicommits@1.2.0等で過去バージョンを試してみてください。

参考

SARAH Tech Blog

Discussion