GitHub Copilotで実現するコミットメッセージの自動生成

に公開

以前、czgcommitlintを組み合わせて、規約に沿ったコミットメッセージを自動生成する方法を紹介しました。

https://zenn.dev/ryoku4/articles/30b6177636b3b1

今回は、GitHub CopilotAwesome GitHub CopilotのConventional Commitを使い、コミットメッセージを生成する手法を紹介します。

前提

  • GitHub CLIのがインストールされていること
  • GitHub Copilotを利用できる環境であること

Skillのインストール

まずはAwesome CopilotのConventional Commitをインストールします。

gh skill install github/awesome-copilot conventional-commit

.agents/skills/conventional-commitSKILL.mdがインストールされます。

Skillのワークフロー

Conventional Commitの基本的な流れは次のとおりです。

  1. git statusで変更されたファイルを確認する
  2. git diffまたはgit diff --cachedで差分を検査する
  3. git add <file>で変更をステージする
  4. コミットメッセージを生成する
  5. メッセージ生成後、以下のコマンドを実行する
git commit -m "type(scope): description"

SKILL.mdから読み取れるコミットメッセージ構造

Conventional CommitのSkillでは、次のようなXML形式でコミットメッセージを構成しています。

<commit-message>
  <type>feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert</type>
  <scope>(スコープ: 省略可)</scope>
  <description>変更内容の要約(命令形)</description>
  <body>(オプション: より詳細な説明)</body>
  <footer>(オプション: 例 BREAKING CHANGE: 詳細, または関連イシュー番号)</footer>
</commit-message>

typeの選択肢

  • feat: 新機能の追加
  • fix: バグ修正
  • docs: ドキュメントのみの変更
  • style: コードの意味に影響しない変更
  • refactor: バグ修正や新機能追加ではないコードの変更
  • perf: パフォーマンス改善
  • test: テスト関連の変更
  • build: ビルドシステムや外部依存関係の変更
  • ci: CI設定の変更
  • chore: その他の雑務的な変更
  • revert: 以前のコミットの取り消し

  • feat(parser): 配列を解析する機能を追加
  • fix(ui): ボタンの配置を修正
  • docs: READMEに使用方法を追記
  • refactor: データ処理のパフォーマンスを改善
  • chore: 依存関係を更新
  • feat!: 登録時にメールを送信 (BREAKING CHANGE: メールサービスが必須化)

検証ルール

  • type: 指定された型のいずれかである必要がある
  • scope: 任意だが、変更箇所を明確にするために推奨
  • description: 必須。命令形で簡潔に記述
  • body: 任意。補足説明が必要な場合に使用
  • footer: 任意。破壊的変更や Issue 参照を記載

実際の使い方

GitHub Copilotのコマンドやチャット機能から、Conventional CommitのSkillを呼び出すことができます。

czg + commitlintとの比較

czg + commitlint

  • ローカルにczgとcommitlintをインストールして使う
  • commitlint.config.jsでルールとプロンプトを定義する
  • 差分から複数候補を生成し、選択してコミットを作成する
  • ルールベースの検証とAIによる生成を組み合わせる

GitHub Copilot + Awesome GitHub Copilot

  • gh skill installでSkillを導入するだけで使い始められる
  • SKILL.mdに定義されたワークフローとXML構造に従う
  • GitHub Copilotのプロンプトから直接コミットメッセージを生成する

GitHub Copilotをすでに使っている環境では、追加のローカル設定が少なくスムーズに導入できる点がメリットです。一方、czg + commitlintはローカルに細かいルールを置いて厳密にチェックしたい場合に強みがあります。

まとめ

GitHub CopilotとAwesome GitHub CopilotのConventional Commitを使用することで、Conventional Commits形式のコミットメッセージを生成できます。

  • SKILL.mdはコミット構造、例、検証ルールを含む
  • czg + commitlintと比べ、GitHub Copilotは設定の手間が少ない

GitHub Copilotを活用して、従来のツールベース運用とは異なる形でコミットメッセージの作成を試してみましょう。

Discussion