Copilot Chat を “コードレビューの達人” にする実践的プロンプト設計と運用のコツ
はじめに
コードレビューは高品質なソフトウェア開発において欠かせないプロセスですが、時間と労力を要する作業でもあります。 自身の Pull Request やメンバーの Pull Request において、GitHub Copilot にコードレビューをしてもらうことで、問題になりそうなコードをかなり見つけられるようになりました。
この記事では、GitHub Copilot を使ったコードレビューの方法を比較しながら、特に柔軟性の高い Copilot Chat を活用したアプローチについて詳しく紹介します。
GitHub Copilot によるコードレビューの3つの方法
コミット前の変更のレビュー(VSCode)
VSCode 上でコミット前の変更をレビューしてもらう方法です。
詳細は公式ドキュメントを参照してください。
- メリット
- 自身で行った変更をレビューしてもらう用途に便利
- 早期にフィードバックがもらえるため少ない修正で済む
- デメリット
- メンバーの Pull Request をレビューする用途では使えない
Web Browser でのレビュー(Web UI)
Web Browser で実行する方法で、Pull Request の Reviewer として Copilot をアサインします。
詳細は公式ドキュメントを参照してください。
- メリット
- 気軽に利用できる
- メンバーの Pull Request もレビューできる
- デメリット
- 現状は Enterprise プランでないと細かい調整はできない (GitHub Copilot コード レビューのコーディング ガイドラインの構成 - GitHub Docs)
Copilot Chat を使ったレビュー
今回特に紹介したい Copilot Chat のエージェントモードを使う方法です。
- メリット
- 細かい制御ができる
- MCP Server を使える
- メンバーの Pull Request もレビューできる
- 関連した追加の作業を指示できる
- デメリット
- 設定やプロンプト調整などの準備が必要
この方法は最も柔軟性が高くおすすめです。以降ではこの方法について詳しく解説します。
Copilot Chat によるコードレビューの準備
Copilot Chat で効果的にレビューするには、MCP Server の設定とプロンプトファイルを用意しておくことが重要です。
MCP Server の設定
MCP Server(Model Context Protocol Server)は、Copilot Chat に外部コンテキストを提供するためのサーバーです。 設定方法は各 MCP Server のドキュメントやVSCode の公式ドキュメントを参照してください。
私は以下の MCP Server を設定しています。
サーバー | 目的 |
---|---|
github-mcp-server | Pull Request の情報を参照する |
fetch | 外部ドキュメントやライブラリの最新情報を取得する |
Brave Search | ウェブ検索を通じて最新の技術動向やベストプラクティスの情報を収集する |
これらのサーバーにより、Copilot Chat は Pull Request 情報や外部ドキュメントを参照できるようになります。
プロンプトファイルの準備
プロンプトファイルは Copilot Chat の動作をカスタマイズするための仕組みです。 VSCode のコマンドパレットから「新しいプロンプトファイル」を選択することで作成できます。
詳細は公式ドキュメントを参照してください。 なお、この機能はまだ実験的なので、将来的に変更される可能性があることに注意してください。
以下は私が使用しているプロンプトファイル例です。
---
mode: "agent"
---
GitHub Pull Request の内容を確認し、コードレビューを実施してください。
レビュー対象が指定されていない場合は尋ねてください。
必要に応じて公式ドキュメントなどを参照し正確な情報に基づいて判断するよう努め、引用元のリンクを必ず記載してください。
最高のコード品質となるよう多角的かつ厳格にレビューし、すべてのレビューコメントを出し切ってください。
意図を明確にするためにレビューコメントには以下のメタ情報を明示してください。
| メタ情報 | 期待する対応 | 説明 |
| --- | --- | --- |
| [ask] | 回答必須 |確認 |
| [must] | 修正必須 | この対応がされていないと Approve できない |
| [imo] | 修正任意 | この対応がされていなくても Approve できる |
| [nits] | 修正任意 | 細かい指摘 |
| [next] | 修正不要 | 今後の改善点 |
| [good] | - | 良い点 |
| [suggestion] | - | 提案 |
このプロンプトファイルの重要なポイントは以下の2つです。
- ドキュメント参照の指示: 公式ドキュメントなどを参照し、出典を明示するよう指示している
- メタ情報の使用: 指摘のレベル感を明確にするためのメタ情報を定義している
メタ情報は以下の記事を参考にしています。
Copilot Chat によるコードレビューの実行
作成したプロンプトファイルは Copilot Chat 上で /
コマンドから呼び出せます。 例えば github-code-review.prompt.md
という名前でプロンプトファイルを作成した場合、以下のように入力するだけでコードレビューを開始できます。
/github-code-review <PULL_REQUEST_URL>
実行すると、Copilot Chat は Pull Request の情報や変更されたファイル、コミット詳細などを確認した上でコードレビューしてくれます。
コードレビュー出力例
以下は Copilot Chat によるコードレビュー出力の例です。
# GitHub Pull Request レビュー: #4955
## 概要
このPRは、GitHub Actions内の`story release`通知が失敗していた問題を修正するものです。PR #4917と同様の対応を行っており、Slackへの通知処理を修正しています。
## 変更内容の分析
変更内容は以下の通りです:
1. notify_story_released.yml ファイルの修正
- `slackapi/slack-github-action@v2.1.0` の設定方法を変更
- 従来の方式(`channel-id` + `env` でのトークン設定)から、新しい方式(`method` + `token` + payload内に`channel`指定)に変更
- JSONフォーマットの構造を調整
## レビューコメント
### [must] JSONフォーマットの問題
```yaml
"channel": 'C065KP3HFS5',
```
この部分で JSON の構文エラーがあります。JSON ではキーと値の両方をダブルクォーテーションで囲む必要がありますが、値がシングルクォーテーションになっています。これは以下のように修正する必要があります:
```yaml
"channel": "C065KP3HFS5",
```
これは修正必須の問題です。このままでは GitHub Action が正しく実行されず、Slack への通知が失敗します。
### [good] 適切な API メソッド指定
```yaml
method: chat.postMessage
token: ${{ secrets.SLACK_BOT_TOKEN }}
```
Slack API の `chat.postMessage` メソッドを使用し、適切にトークンを設定している点は良いです。これにより、Slack API を直接呼び出して通知を送信できます。
### [good] 参照実装の活用
PR #4917に倣って修正されている点は、すでに動作確認済みの実装を参考にしていることから適切です。同様の問題に対して同様の解決策を適用することで、一貫性が保たれています。
### [nits] コメントの追加
変更前のコードには `# development` というコメントが含まれていましたが、変更後のコードにはこのコメントが消えています。メンテナンス性を考えると、チャンネル ID の意味を示すコメントを残しておくと良いでしょう。
```yaml
"channel": "C065KP3HFS5", # development
```
## 総合評価
概ね適切な修正が行われていますが、JSON のフォーマットエラーは確実に修正する必要があります。この点を修正することで、GitHub Action が正常に動作し、Slack への通知が期待通り行われるようになります。
## 確認すべき点
この修正が完了した後、実際に release タグをつけて PR をマージした際に、Slack の `development` チャンネルにリリース通知が届くことを確認してください。
## 参考情報
- [slack-github-action ドキュメント](https://github.com/slackapi/slack-github-action)
- [Slack API: chat.postMessage](https://api.slack.com/methods/chat.postMessage)
メタ情報や参考情報が出力されており、レビュー内容を人間が確認しやすい形になっています。
また Pull Request の説明に他の Pull Request や Issue へのリンクなどがあれば、それらも連鎖的に参照してくれました。
関連した追加の作業を指示する
Copilot Chat によるコードレビューの利点のひとつに、関連した追加の作業を指示できるという点があります。
例えば、自身の Pull Request であれば、指摘内容や改善方法について追加で質問したり、実際に修正作業を指示できます。
メンバーが作成した Pull Request であれば、MCP Server 経由で Pull Request に Suggested change 付きのレビューコメントを追加できます。
まとめ
GitHub Copilot を活用したコードレビューの方法を紹介しました。 特に Copilot Chat と MCP Server、カスタムプロンプトを組み合わせることで、柔軟性の高い効率的なコードレビューが実現できます。 AI によるコードレビューは人間の負担を軽減し、より多くの問題の早期発見に役立ちます。
コードレビュープロセスに Copilot Chat を取り入れてみて、開発効率の向上を実感してみてはいかがでしょうか。
Discussion