
git commit を実行するときに差分を確認しつつ「どういうコミットメッセージにしたら良いかなぁ〜」と悩むことがある.
そこで LLM (Large Language Models) を使ってコミットメッセージを自動生成できる「OpenCommit」を個人的な検証リポジトリを中心に導入してみた.3週間ほど使ってみて,体験としてはイイ感じ👌
セットアップ
セットアップは README に載っている通りに実行した👌
$ npm install -g opencommit $ oco --version 3.2.7
次に oco config set コマンドを使って OCO_API_KEY に LLM プロバイダーの API Key を設定する必要があるけど(たとえば OpenAI の API Key など)今回は設定しなかった.後述する .env ファイルを使って GitHub リポジトリごとに設定できるためそちらを使う.ちなみに LLM プロバイダーとモデルはデフォルトで OpenAI の GPT‑4o mini になっていて,他に Anthropic / Gemini / Ollama などもサポートされている.
👾 .env
OpenCommit を導入する GitHub リポジトリの .gitignore に .env を設定しつつ,以下のようにした.必要最低限の設定にしてある👌
OCO_API_KEY=xxx OCO_GITPUSH=false OCO_ONE_LINE_COMMIT=true
まず OpenCommit ではコミットメッセージを自動生成した後に「git push する?」というインタラクションがある.個人的には細かく意味のあるステップで git commit をして,まとまってから git push を実行したく不要だな〜と感じたため OCO_GITPUSH=false で無効化した.README を読むと Push to git (gonna be deprecated) と書いてあるけど,現状まだ代替になる設定が見つからなかったため使うことにした😀
│ ◇ Do you want to run `git push`? │ No │ └ `git push` aborted
そして OCO_ONE_LINE_COMMIT=true というオプションを設定すると自動生成されるコミットメッセージをまとめることができる(まとめようと努力する).ちなみに src/prompts.ts を確認すると以下のようなプロンプトが挿入されるようになっている💡
Craft a concise commit message that encapsulates all changes made, with an emphasis on the primary updates. If the modifications share a common theme or scope, mention it succinctly; otherwise, leave the scope out to maintain focus. The goal is to provide a clear and unified overview of the changes in a one single message, without diverging into a list of commit per file change.
とは言え LLM モデルに依存しているところはあって,OCO_ONE_LINE_COMMIT=true を設定してもファイルごとにコミットメッセージが生成されてしまうこともある.関連する issue もあって参考になる✍
実行例
Terraform AWS Provider の v6.0.0-beta1 を試したときのコミットメッセージは以下のようになった.
chore(provider.tf): update AWS provider version to 6.0.0-beta1 for compatibility with new features and improvements
Terraform で Amazon Inspector 抑制ルールを設定したときのコミットメッセージは以下のようになった.
feat(inspector.tf): add AWS Inspector filter resource for CVE suppression to manage vulnerabilities effectively
Terraform で Amazon ECS クラスタを追加したときのコミットメッセージは以下のようになった.
feat(ecs): add ECS cluster resource with container insights enabled to enhance monitoring capabilities
Vibe Coding で CI/CD Level Checker ウェブサイトを実装したときのコミットメッセージは以下のようになった.
feat(QuizForm): enhance quiz form with bilingual support for questions and results to improve accessibility for users
gitmoji
また OCO_EMOJI というオプションを使うと gitmoji で標準化された絵文字(10種類)をコミットメッセージの冒頭に追加できる.さらに CLI に --fgm オプションを指定すると全種類の絵文字を対象にできる.
ちなみに CLI のヘルプを確認したら --fgm オプションの説明が載ってなくてプルリクエストを出したりもした👌(Full GitMoji の略というのは最初わからなかった...)
まとめ
LLM (Large Language Models) を使ってコミットメッセージを自動生成できる OpenCommit❗️
引き続き使っていくぞ〜 \( 'ω')/