BedrockのClaudeでGitのコミットメッセージを自動生成してくれるNeovimプラグイン
どうも、ご無沙汰してますAWS大好き芸人のken11です。
今回はNeovimのためのコミットメッセージ自動生成プラグイン GitComet を作りました。(名前は正直なんでもよかったんですが、CommitとCommentと自動生成の彗星のような早さをかけてCometにしておきました)
これは Amazon Bedrock 上の Claude 3.5 Sonnet を利用して、ステージングされた git diff
から適切なコミットメッセージを生成してくれるプラグインです。
つくった理由
企業環境やセキュリティ制約のある環境では、一般的な LLM API(OpenAI や Google Gemini など)を自由に使えない場合があります。
しかし、 Amazon Bedrock なら利用可能 というケースは一定数あります。
Neovim 向けのプラグインとして Amazon Bedrock を活用できるものはまだほとんど存在していません。
Copilot Chat など、 Git のコミットメッセージを自動生成してくれるプラグインは既にいくつかあるのですが、 Bedrock 対応しているものがないので個人的に不便だと感じていました。
そこで、 Neovimから簡単にAmazon Bedrockを利用してAIコミットメッセージを生成できるツール を作ることにしました。
実装のポイント
かわいいコミットメッセージで生成
GitCometでは、 AIが生成するコミットメッセージを 絵文字とprefix付きのフォーマット [1] に整形する機能も備えています。
例えば、以下のような形式のコミットメッセージが自動生成されます。
🐛 fix: 修正されたバグの詳細
✨ add: 新機能の概要
🔥 remove: 不要になったコードの削除
こうすることで、 統一感のある、可読性の高いコミットメッセージ を簡単に作成できます。
これすごい憧れだったんですよ。
やろうと頑張っても真面目に運用できた例しがなくて()
Bedrockはcurlでも利用できる
BedrockはAWS SDKを使う以外にも、 curl
を使って直接APIを叩くことができます。
これは --aws-sigv4
というAWSの認証方式を利用することで実現できます。
GitCometでは、Neovimの plenary.curl
を利用し、 --aws-sigv4
認証を使って curl
でBedrock APIにリクエストを送る形にしています。
リクエストボディは以下のような構造になっています。
{
"system": "Generate concise and meaningful Git commit messages based on the provided git diff.",
"messages": [
{ "role": "user", "content": "以下の git diff に基づいて適切なコミットメッセージを考えてください。\n(diffの内容)" }
],
"max_tokens": 1024
}
このリクエストを curl
で送ることで、 Claude 3.5 Sonnet から適切なコミットメッセージを取得し、Neovimのバッファに挿入する仕組みです。
ただ、 curl
のバージョンが古いと問題があるようなので、必要に応じて curl
のアップデートをしてください。
まとめ
今回はとりあえず Claude 3.5 Sonnet しか対応しませんでしたが、 Amazon Bedrock は 多種多様なモデルを呼び出せる のが魅力です。
にもかかわらず、 Bedrockに対応したツールやプラグインはまだまだ少ない という印象です。
また、企業のポリシーとして「BedrockのClaudeならOK、他のAPIはNG」というケースもあるため、
Bedrock対応のツールを増やしていくことは重要 だと考えています。
今後は Anthropic以外のモデルにも対応 し、さらに便利なNeovimプラグインにしていきたいと思います! 🚀
Discussion