AIChatにgitのコミットメッセージを書いてもらう

AIChatにgitのコミットメッセージを書いてもらう

はじめに

今回の記事は、AIChat というツールを使用して、Git のコミットメッセージを出力させる方法を記録しています。

AIChat は、ChatGPT や LocalAI などの LLM をターミナルから使用するためのツールです。

環境

  • Windows10 Pro(22H2)

事前準備

ChatGPT のアカウントを持っており、API キーを取得済み且つ利用するための課金を済ませているものとして勧めます。

私は試しに$5.00の課金をしました。

AIChat のセットアップ

AIChat のリポジトリのReleasesから aichat-v0.8.0-x86_64-pc-windows-msvc.zip をダウンロードします。

aichat-github.png

現在 Latest となっているのはバージョン0.8.0です。

適当な箇所へダウンロードし、解凍します。解凍されたexeファイルを任意の場所に移動します。今回は C ドライブ直下にaichatというフォルダを作成し移動しました。 aichat-exe.png

配置したバイナリファイル(.exe ファイル)をコマンドラインから実行できるようにパスを通します。

[設定] → [システム] → [詳細情報] → [システムの詳細設定] と移動し、システムのプロパティ画面を開きます。

その中の、環境変数というボタンをクリックします。

env-setting1.png

ユーザーの環境変数内のPathを選択し、編集をクリックします。

env-setting2.png

新規をクリックし、aichat.exeを配置した場所を追記します。

env-setting3.png

ここまで完了したら、ターミナルを起動します。コマンドプロンプトでも問題ないと思いますが、今回はWindows Terminalを起動しています。

起動したターミナルでaichatと入力すると、初回起動時の設定が始まります。

PS C:\Users\xxxx> aichat
# 設定ファイルが無いので作成するか否か聞かれます
? No config file, create a new one? Yes
# APIキーを入力します
? Openai API Key:
# プロキシーを利用しているか
? Use proxy? No
# メッセージを記録するか
? Save chat messages Yes

aichat のプロンプトに移行するので、.helpコマンドを入力して出来ることを確認します。

aichat-help.png

以下、Deepl 訳

.info 情報を印刷する
.set 一時的に設定を変更する
.model モデルの選択
.prompt GPTプロンプトを追加する
.role ロールを選択します
.clear role 現在選択されているロールをクリアします
.conversation 会話を開始します。
.clear conversation 現在の会話を終了する
.history 履歴を印刷する
.clear history 履歴を消去します
.help ヘルプメッセージを表示する
.exit REPLを終了します。

コマンドから設定を変更できるのですが、面倒なので作成されたymlファイルを直接編集していきます。

設定ファイルは%APPDATA%\aichatに配置されています。

Windows キー + R で [ファイル名を指定して実行] を起動して、%APPDATA%\aichatを入力します。

aichat-config.png

config.yamlを以下のように修正します。

"config.yaml"
api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
save: true
model: gpt-4 # ←追記

今回はgpt-4を使用します。

次に%APPDATA%\aichat配下にroles.ymlを作成します。内容は以下のように作成します。

"roles.yml"
- name: commit
  prompt: >
    与えられた変更から素晴らしいコミットメッセージを考えてください。
    変更はdiff形式で与えられます。
    # 制約
      - diff形式のメッセージが渡ってこなかった場合は新しくファイルが作成されたものとして、「add: [コミットメッセージ]」の形式でコミットメッセージを日本語で1行で出力する
      - 新しくファイルが更新されている場合は、「update: [コミットメッセージ]」の形式でコミットメッセージを日本語で1行で出力する
      - 新しくファイルが削除されている場合は、「delete: [コミットメッセージ]」の形式でコミットメッセージを日本語で1行で出力する
      - コミットメッセージのみ出力し、その他の説明などは省く

ここは適宜、出力したいコメントが得られるように修正して下さい。

実際に使用する

PowerShell を使用しても動作しますが文字コードの関係で文字化けしたり、Linux 形式のコマンドが利用できなかったり不便だったので、Git インストール時に使用できるGitbashを使用します。

試しに、aichat を自動でセットアップするリポジトリのコミットメッセージを出力させてみます。

aichat-setup-repository.png

ファイルをaddしてコミットメッセージを出力させます。ファイルは新しく作成されたものです。

git diff --cachedでは、ステージングエリアにステージされていて、まだコミットされていないファイルの内容の差分を表示します。

git add run.bat

git commit -m "`aichat -r commit \"$(git diff --cached)\"`"
[main aa6e6ba] add: 新しいファイルを追加
 1 file changed, 15 insertions(+)
 create mode 100644 run.bat

コミットメッセージが出力されました。試しにプッシュしてみます。

aichat-commit-message-add1.png

正しく追加されていました。次のファイルも同様にコミットメッセージを出力させます。

git add .

git commit -m "`aichat -r commit \"$(git diff --cached)\"`"
[main 12aa525] add: AIChatをインストールするためのPowerShellスクリプトを追加しました。
 1 file changed, 27 insertions(+)
 create mode 100644 setup.ps1

先程とは違うコミットメッセージが出力されました。

注意点としてgit add .のようにまとめてファイルを追加すると、精度が下がる印象があったので個別にファイルをaddしてからaichat -r commit \"$(git diff --cached)\"を実行したほうが良いと感じました。

また、今回のやり方ではコマンドを実行した時点でコミットメッセージが確定してしまうので、一度作成されたコミットメッセージを確認したい場合はaichat -r commit \"$(git diff --cached)\"を実行します。

直前のコミットを取り消したい場合はgit reset --soft HEAD~1を実行すると、直前のコミットがステージングエリアに登録された状態に戻ります。

自動設置するスクリプト

AIChat をセットアップする解説をしましたが、上記の手順を自動化するスクリプトを作成しました。

run.batファイルを管理者権限で実行すれば、記事内で解説したフォルダへの設置と環境変数の設定も自動で行われます。

最後に

AIChat に git のコミットメッセージを書いてもらう方法を見てきました。

使用した感じかなり便利だったので、今後もシステム開発では様々な場所で AI が活用される気がします。