OpenCommitで差分から意味のあるコミットメッセージを生成する
誰しも経験はあるでしょう:勤務終了時、5つの異なるファイルに dozen の変更、疲労が蓄積、それでもまたしても git commit -m "fix"、wip 2、refactor のような「傑作」がリポジトリの履歴に放り込まれる。そして数ヶ月後、認証が壊れた理由を探ろうとして git log を開くと、一行メッセージの壁が目に入る。
OpenCommitの作者は、このルーティンを自動化することを決意しました。このプロジェクトはステージングされた変更(staged changes)を取得し、言語モデルを使ってコードの差分を分析し、Conventional Commits標準に準拠した適切な明確な説明文を生成します。

実際の動作
このツールはnpm経由でグローバルCLIパッケージとしてインストールされます。プロジェクトに変更を加え、通常のコミットコマンドの代わりに oco を呼び出します:
npm install -g opencommit
次に、APIキーを設定する必要があります。デフォルトでは、OpenAIモデル用に設定されています(例:gpt-4o-mini):
oco config set OCO_API_KEY=sk-...
その後、ワークフローは極めてシンプルになります。ファイルに変更を加え、以下のコマンドを実行します:
git add .
oco
oco コマンドはモデルを呼び出し、変更の差分を渡し、 готовуюテキストを提案します。問題がなければEnterを押すとコミットが作成されます。手動確認をスキップしたい場合は、oco --yes フラグがあります。
コードをクラウドに送信しない運用
セキュリティ要件や企業ポリシーにより、ソースコードをサードパーティのサーバーに送信できない開発者は多くいます。OpenCommitはローカルランナーとの統合機能を備えています。
このツールは Ollama および llama.cpp と通信できます。ローカル作業の場合、必要なモデル(例:Llama 3やMistral)でOllamaを起動し、設定を切り替えるだけです:
oco config set OCO_AI_PROVIDER='ollama' OCO_MODEL='llama3:8b'
GPUサーバーがローカルネットワーク上の別のマシンにある場合は、エンドポイントアドレスを指定するだけです:
oco config set OCO_API_URL='http://192.168.1.10:11434/api/chat'
同じスキーマが llama.cpp でも動作し、組み込みのHTTPサーバー llama-server を実行します。
チーム標準向けの設定
OpenCommitには、生成されるメッセージを実際のチーム開発に適合させる便利な設定がいくつかあります。
Conventional Commitsとcommitlint
デフォルトでは、 Conventional Commits形式のメッセージを生成します(feat: ...、fix: ...、chore: ...)。リポジトリ既に @commitlint が設定されている場合、ローカルリンタールールを使用するように切り替えることができます:
oco config set OCO_PROMPT_MODULE=@commitlint
最初の実行時に、コマンドはローカルな .opencommit-commitlint ファイルを作成し、モデルはそのファイルからテキスト生成の例と制約を取得します。
不要なファイルの無視
変更されたロックファイルの何千行もの行をプロンプトに送信するのは無意味であり、トークンコストの点でも無駄です。ファイル *.lock と *-lock.* は自動的に除外され、他のファイルについては .opencommitignore を作成できます:
path/to/large-asset.zip
**/*.jpg
dist/**
チケット番号付きテンプレート
多くの場合、JiraやGitHub Issuesのタスク番号をメッセージの先頭に含める必要があります。このために、$msg プレースホルダーによるテンプレートサポートがあります:
oco '#1042: $msg'
ユーティリティは $msg の代わりに生成された説明を挿入し、タスクプレフィックスはそのまま残します。
Git Hookとの統合
OpenCommitで最も便利な使い方は、 prepare-commit-msg フックに接続することです。そうすれば、oco コマンドを覚える必要すらありません。
フックは以下で有効になります:
oco hook set
これで git commit を呼び出すと(またはVS Code / WebStormインターフェースでコミットボタンをクリックすると)、OpenCommitは自動的にテキストを生成し、エディターの入力ウィンドウに挿入します。モデルが重要な詳細を見逃した場合は、その場で表現を微調整できます。
ニュアンスと制限事項
このユーティリティを使用する際には、いくつか覚えておくべきことがあります:
- 差分のサイズ。 一度に数百ファイルを変更した場合、リクエストがモデルのコンテキスト制限に達したり、説明が 너무一般的すぎたりする可能性があります。OpenCommitは小さくアトミックなコミットで最も効果的です。
- GitHub Action。 リポジトリには、ブランチにプッシュしたときにコミットを自動的に修正する готовуюアクションがあります。これには注意が必要です:このアクションはインタラクティブなリベースを実行し、コミットSHAを書き換えます。このシナリオは共有ブランチには使用できません(
main、dev)。
誰が役立つのか
OpenCommitは、個人プロジェクトや小規模チームでの不注意なコミット履歴管理の問題を解決します。ガイドラインに従って手動でコミットをフォーマットするのが面倒な場合、このツールは多くの時間を節約します。
最も簡単な開始方法は、グローバルインストールとローカルOllamaの組み合わせです:こうすれば、トークンに費用をかけることなく、リポジトリで生成品質をすぐにテストできます。
関連プロジェクト