6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GPT-3を使ったシェルスクリプトでコミットメッセージ作成を自動化しよう!

Last updated at Posted at 2023-03-18

はじめに

コミットメッセージって大切ですよね。
とはいえ毎回考えるの面倒じゃないですか?特に英語で書かなきゃいけない場合とかは考える手間がかかりますよね。この記事では、OpenAIのGPT-3を活用し、たった一つのコマンドでgit diffの出力から適切なコミットメッセージを自動生成する方法をご紹介します。
さらに、git hooksを利用して、コミットメッセージを完全に自動化する方法も解説します。この方法を取り入れることでより効率的に作業に集中できるでしょう。

リポジトリ

手順

  1. まず、GPT-3 APIを利用できるように、Pythonでopenaiパッケージをインストールします。
$ pip install openai
  1. 次に、以下のシェルスクリプトgenerate_commit_message.shとPythonスクリプトgenerate_commit_message.pyを作成します。

generate_commit_message.sh:

generate_commit_message.sh
#!/bin/bash

# GPT-3 APIキーを環境変数に設定
export OPENAI_API_KEY="あなたのAPIキー"

# git diffの出力をPythonスクリプトに渡す
git diff --staged | python3 generate_commit_message.py

generate_commit_message.py:

generate_commit_message.py
import openai
import os
import sys

# 環境変数からAPIキーを取得
api_key = os.getenv("OPENAI_API_KEY")

# APIキーを設定
openai.api_key = api_key

# 標準入力からgit diffの出力を取得
diff_output = sys.stdin.read()

# GPT-3へのリクエストを作成
prompt = f"Given the following git diff output, suggest an appropriate commit message in English:\n\n{diff_output}\n\nCommit message:"
response = openai.Completion.create(
    engine="text-davinci-003",
    prompt=prompt,
    max_tokens=100,
    n=1,
    stop=None,
    temperature=0.7,
)

# コミットメッセージを取得して表示
commit_message = response.choices[0].text.strip()
print(commit_message)
Given the following git diff output, suggest an appropriate commit message in English:\n\n{diff_output}\n\nCommit message:

の部分がプロンプトになっています。もっと良いメッセージがあるかもしれないのでお好みでどうぞ。
また、今回は適当にtoken数を100としていますがもう少し増やした方が良いかもしれません。
APIキーには、OpenAIのAPI Keyを使用してください。

  1. シェルスクリプトとPythonスクリプトを同じディレクトリに保存し、シェルスクリプトに実行権限を与えます。
$ chmod +x generate_commit_message.sh
  1. これで、git diffの出力からコミットメッセージを自動生成できるようになりました。シェルスクリプトを実行するだけで、GPT-3が生成したコミットメッセージが表示されます。
$ ./generate_commit_message.sh
  1. 使ってみる
    試しに以下のようなファイルを追加してみて、メッセージを自動生成してみます。
test.txt
Hello world
$ ./generate_commit_message.sh
"Add 'Hello world' to test.txt"

良さげなメッセージが生成されましたね!🎉
今回はdiffの例がよくなかったかもしれませんが、使ってみた分にはとても便利でした!

さらに楽をしたい場合

更に、git hooksを利用して、コミットメッセージの自動生成を完全に自動化する方法を説明します。

  1. まず、.git/hooksディレクトリに移動します。
cd .git/hooks
  1. 次に、prepare-commit-msgファイルを作成し、以下の内容を追加します。この内容は、先ほどのgenerate_commit_message.shと同じです。
#!/bin/bash

# GPT-3 APIキーを環境変数に設定
export OPENAI_API_KEY="your_api_key_here"

# git diffの出力をPythonスクリプトに渡す
git diff --staged | python3 generate_commit_message.py
  1. prepare-commit-msgファイルに実行権限を付与します。
chmod +x prepare-commit-msg
  1. 先ほどのgenerate_commit_message.pyファイルは、適切な場所(例えば、プロジェクトのルートディレクトリ)に置いておき、prepare-commit-msgファイル内で正しいパスが指定されていることを確認してください。

これで、git commitを実行する度に、自動的にGPT-3がコミットメッセージを生成して設定してくれます。ただし、必要に応じて手動でメッセージを調整することを忘れずに行ってください。また、GPT-3 APIの利用にはコストがかかるため、利用料金に注意してください。

最後に

これで、GPT-3を活用したコミットメッセージの自動生成と、git hooksによる完全な自動化ができるようになりました。この方法を取り入れることで手間をかけずに、より効率的に作業に集中できるようになりました!

6
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?