背景やWhy込みでPull RequestのdescriptionをVSCode Copilot Agentに生成させる

背景

  • 最近はコードの修正内容からcommit logの自動生成(github.copilot.chat.commitMessageGeneration.instructions)などが簡単にできるようになってきました
  • 一方、レビュアーは以下のような情報が欲しくなる場合が多いです
    • 修正の背景
    • なぜその実装方法を取ったのか
      • 他にはどういう選択肢が考えられ、なぜそれは選ばなかったのか
  • しかし、この辺の情報を丁寧に書いていくのはそれなりに時間がかかります
  • Agentと相談しながら実装する場合、チャットログにそういった情報が含まれることがあります
    • そういった前提を揃えたほうがAgentもうまく実装できることが多いです
  • チャットログの内容を元に、背景やWhyをdescriptionに反映させることまで自動でやらせたいなと思いました

規模が大きい修正はADR(Architectural Decision Records)やDesign Docsを元にすればいいと思いますが、本エントリはもう少し小さい修正を対象にして書いています。

実装方法

VSCodeのsettings.jsonに以下のinstructionを書きましょう。「prを更新して」とチャットで言えば、Pull Requestのdescriptionを背景情報などを含めてAgentが書いてくれます。実際のPull Requestへの反映までやってくれます。

{
    "github.copilot.chat.codeGeneration.instructions": [
        {
            "text": "「prを更新して」と言われたら、最初に修正内容をdiff形式で確認するために`gh pr diff`を実行しましょう。次にコミットメッセージを把握するために`gh pr view --json commits --jq '.commits[] | .messageHeadline'`を実行しましょう。最後に、修正内容とコミットメッセージを把握した上で、チャットの会話内容を考慮しながらPull Requestのタイトルとdescriptionを更新しましょう。実際の更新には`gh pr edit`を使いましょう。`.github/PULL_REQUEST_TEMPLATE.md`が存在する場合、そのテンプレートに沿った形でPull Requestの説明文を生成してください。"
        }
    ],

やっていること

やっていることは単純で

  • gh pr diffでコードのdiffを把握させる
  • gh pr view --json commits --jq '.commits[] | .messageHeadline'でコミットログを把握させる
  • チャットの会話内容も把握させる
  • それらを考慮した上でgh pr editを使ってdescriptionを修正させる
  • .github/PULL_REQUEST_TEMPLATE.mdがあれば、それを尊重した形で修正する

の以上です。

もちろん、これだけで完璧にいかないことや追加で関連prのリンクを貼るなどの手直しが必要なことも多いですが、イチから書く必要がなくなるので、大分気が楽になります。

細かいテクニック: 背景など長くなりそうな情報は音声で入力する

SuperwhisperAqua Voiceなどを使って背景をがーっと口頭で説明して書き起こさせましょう。多少の書き起こしのミスが含まれる場合がありますが、コードのコンテキストなどを一緒に見せると、Copilot Agent側が空気を読んでかなり修正してくれます。タイピングをするより3倍速くらいで入力できます。

話す際も頭の中にあることをdumpするイメージで話すだけでいいです。自分の頭の中で構造化しなくても、Agent側が割とよしなに構造化してくれます。

細かいテクニック: あとから背景を反映させる

「やべっ。最初からAgentにコードを書かせてしまって、背景とかを説明するの忘れてた...」ということがあります。その場合にはVSCodeのCopilot Agentに対して、以下のように指示すると余計なコードの修正などをせずコンテキスト情報として考慮してくれるようになります。

これから、ここまで行なった修正が必要になった背景を説明します。説明を読み終わったら「はい」とだけ返事をしてください。

---

ここから背景をがーっと書いていく。