GitHub MCPを使って、PRの指摘対応&返信を自動化するCopilotプロンプトを作ってみた

「PR作成」「PRレビュー」と自動化を進めてきましたが、今回はその続き。 レビューで指摘された内容を修正して、返信するところまでを自動化するプロンプトを作ってみました。

作成した背景

これを作った背景は、自分の開発スタイルの変化が大きいです。

  1. 個人開発でのAI駆動開発の推進 最近は「基本的な開発はAIに任せる」という方針でやってます。いわゆるAI駆動開発ってやつですね。 人間はディレクションに回って、手を動かす部分はなるべくAIにお願いしたい。
  2. 指摘対応と返信の往復が面倒 レビュー指摘をもらったら、「コードを修正してコミット」→「GitHubに戻ってコメントに返信」という作業が発生します。 このスイッチングコストを減らして、VS Code内だけで完結させたかったんです。

作成したプロンプト

実際に使用しているプロンプトです。 例えば .github/prompts/pr-fixer.prompt.md みたいなパスに置いて使っています。

下記はそのまま使用できます。

---
description: GitHub MCPを使用して、PRについたレビュー指摘を確認し、コード修正案の作成と返信コメントの投稿を行うためのプロンプト
---

## ユーザー入力

```
$ARGUMENTS
```

**重要:**
処理を開始する前に、上記のユーザー入力(特定の指摘にのみ対応したい場合や、反論したい場合など)を確認し、反映してください。

## 概要

指定されたPull Requestのレビューコメント(指摘事項)を取得し、内容を分析します。指摘に対する**コードの修正案**を作成するとともに、レビューアへの**返信コメント**を作成・投稿します。

# 実行フロー

## 0. 対象PRの確認(対話ステップ)

**ユーザー入力 `$ARGUMENTS` を確認してください。**

* **対象PRの特定:** PR番号やURLが指定されているか?
   * 指定がない場合、`current_branch` に紐づくPRを検索するか、ユーザーに「どのPRの指摘に対応しますか?」と尋ねてください。

## 1. レビュー指摘の取得

対象PRから未解決(Open)のレビューコメントを取得してください。

* **使用ツール:** `list_pull_request_review_comments`
* **重要:** 各指摘に対応する **コメントID (id)** を必ず取得・保持してください(後でリプライに使用します)。
* **フィルタリング:** 既に「解決済み(Resolved)」になっているものや、Botによるコメントは除外してください。

**確認アクション:**
取得した指摘の一覧を要約してユーザーに提示し、対応する範囲を確認してください。
> 「以下の指摘が見つかりました。すべてに対応しますか? それとも特定の項目のみ対応しますか?」
> 1. {{ファイル名}} (ID: {{comment_id}}): {{指摘要約}}
> 2. ...

## 2. 対応方針の検討とコード修正

ユーザーが選択した各指摘について、以下の手順で処理を行ってください。

1.  **指摘箇所の把握:** コメントがついているファイルと行番号を確認し、現在のコードを取得します。
2.  **修正案の作成:** 指摘内容に基づいてコードを修正してください。
    * *仕様書や関連資料(あれば)との整合性も確認してください。*
3.  **ユーザー確認:** 修正後のコードを提示し、適用してよいか確認します。

**出力フォーマット:**

```
### 指摘 {{番号}}: {{指摘内容の要約}}
**対象ファイル:** {{ファイルパス}}

**修正案:**
{{言語}}
{{修正後のコードスニペット}}
```

この修正を適用しますか? (はい/いいえ/修正して)

## 3. 返信コメントの作成

コードの修正方針が固まったら(または議論が必要な場合)、レビューアへの返信コメントを作成します。
丁寧かつ具体的な返信を心がけてください。

* **修正した場合:** 「ご指摘ありがとうございます。〇〇のように修正しました。(コミットハッシュ等を含めるとベター)」
* **議論が必要な場合:** 「〇〇という理由で現状の実装にしています。××という案についてどう思われますか?」

## 4. GitHub MCPによる実行(返信投稿)

コードの修正(ユーザーによるエディタ上での適用)が完了した後、GitHub MCPツールを使用して、**当該コメントのスレッドに対して直接リプライ(返信)**を投稿してください。

* **禁止事項:** `create_issue_comment`(PR全体のタイムラインへの投稿)は使用しないでください。これはスレッドへの返信になりません。
* **使用ツール:** `reply_to_pull_request_review_comment` または `create_pull_request_review_comment_reply`
    * ※ツール名が不明な場合は、`id` や `comment_id` を引数に取る「返信用のツール」を必ず探して使用してください。
* **引数:**
  * `owner`: {{ owner }}
  * `repo`: {{ repo }}
  * `pull_number`: {{ pull_request_number }}
  * `comment_id`: {{ 返信対象の親コメントID }} (**必須**)
  * `body`: {{ 作成した返信本文 }}

## エラーハンドリング

* どうしてもリプライ用ツールが見つからない、またはエラーになる場合のみ、ユーザーに許可を得た上で PR全体のタイムラインへのコメント (`create_issue_comment`) を使用してください。

工夫したポイント

コメントIDの保持と活用

ただ指摘内容を読むだけじゃなく、その後の「返信」を見越して comment_id をしっかり保持させるように指示しています。 これをしないと、どのコメントに対する返信なのかAIが迷子になってしまうので。

リプライ形式へのこだわり

プロンプト内でかなり強めに「スレッドに対して直接リプライしてくれ」と書いています。 create_issue_comment(全体のタイムラインへのコメント)は禁止事項にして、あくまで会話の流れの中で返信するように設計しました。

使ってみた感触と課題

コードの修正案を出してくれるところまでは、かなりスムーズです。「ここ直して」と言われたら、AIがパッと修正コードを出してくれるので、それを適用するだけ。ここは期待通りでした。

ただ、課題もあります。 「返信がリプライ形式(スレッド)にならないことがある」 という点です。 プロンプトであれだけ「スレッドに返信して!」と書いたんですが、MCPツールの仕様なのかAIの解釈の問題なのか、全体のタイムラインにコメントが投稿されてしまうことが多々あります。 ここはまだ試行錯誤が必要な部分ですね。