🚀

BedrockのClaudeでGitのコミットメッセージを自動生成してくれるNeovimプラグイン

2025/02/04に公開

どうも、ご無沙汰してますAWS大好き芸人のken11です。

今回はNeovimのためのコミットメッセージ自動生成プラグイン GitComet を作りました。(名前は正直なんでもよかったんですが、CommitとCommentと自動生成の彗星のような早さをかけてCometにしておきました)
これは Amazon Bedrock 上の Claude 3.5 Sonnet を利用して、ステージングされた git diff から適切なコミットメッセージを生成してくれるプラグインです。

https://github.com/ken11/GitComet.nvim

つくった理由

企業環境やセキュリティ制約のある環境では、一般的な 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プラグインにしていきたいと思います! 🚀

脚注
  1. 絵文字については この辺 を参考にさせてもらいました。ありがとうございます。 ↩︎

Discussion