
こんにちは。ACS事業部の越川です。
GitHub Copilot coding agentが自動生成するPRの本文(description)、チームのフォーマットに合わせたいと思ったことはありませんか?
先日、この課題を5パターンで検証した記事が公開されました。
結論は「copilot-instructions.mdもPRテンプレートも効かない」。PR本文の生成はインストラクションとは別の独立したフェーズで実行されているため、現時点では公式の方法ではカスタマイズできません。
本記事では、この「できなかった」に対して、GitHub Actionsによる後処理で書き換える方法を7回の試行錯誤を経て実現したので、その過程と最終的な構成を紹介します。
- アプローチ: Copilotの後にActionsで書き換える
- ハマり1: Copilot coding agentのbot名が文脈で異なる
- ハマり2: CopilotがPR本文を後から上書きする
- ハマり3: DRAFTを外す人によってactorが変わる
- 成功した最終構成
- おまけ: CLIからCopilotを自動アサインする方法
- まとめ
- 参考文献
- お知らせ
アプローチ: Copilotの後にActionsで書き換える
発想はシンプルです。Copilot coding agentがPRを作成した後に、GitHub Actionsで本文を上書きします。
Copilot coding agent が PR を作成 → GitHub Actions 発火 → 差分と Issue 情報を取得 → チームフォーマットに沿った本文を生成 → gh pr edit で上書き
しかし、このシンプルな発想を実現するまでに7回の試行錯誤が必要でした。
ハマり1: Copilot coding agentのbot名が文脈で異なる
最初に躓いたのは、「CopilotのPRだけを対象にする」条件式です。
GitHub Actionsではgithub.actor(誰がトリガーしたか)で条件分岐するのが一般的です。しかし、Copilot coding agentの名前は文脈によって異なります。
| 場面 | 名前 |
|---|---|
GitHub Actionsのgithub.actor |
Copilot |
GitHub APIのuser.login |
Copilot |
gh pr viewのauthor.login |
app/copilot-swe-agent |
| IssueアサインAPIの指定名 | copilot-swe-agent[bot] |
copilot[bot]でもcopilot-swe-agent[bot]でもなく、Copilot。これを突き止めるまでに3回の試行が必要でした。
ハマり2: CopilotがPR本文を後から上書きする
bot名の問題を解決し、テンプレートベースでのPR本文書き換えに成功しました。Actionsのログにも「PR本文を更新しました」と表示されています。
しかしPRを確認すると、Copilotのデフォルト本文に戻っている。
原因は、Copilot coding agentのワークフローにあります。
- CopilotはまずDRAFT(WIP)のPRを作成する
- この時点で
openedイベントが発火し、Actionsが本文を書き換える - しかしCopilotはまだ作業中。コードを生成し終えた後、PR本文を自分で上書きする
つまり、openedのタイミングでは早すぎるのです。
ハマり3: DRAFTを外す人によってactorが変わる
解決策として、Copilotの作業完了後にDRAFTが外れるready_for_reviewイベントをトリガーに追加しました。しかし、DRAFTを外すのは人間です。するとgithub.actorはDRAFTを外した人(例: apc-m-koshikawa)になり、Copilotとの条件が一致しません。
ここで発想を切り替えました。「誰がトリガーしたか」ではなく「PRを作ったのは誰か」で判定する。
if: github.event.pull_request.user.login == 'Copilot'
github.event.pull_request.user.loginはPR作成者を指すので、誰がDRAFTを外しても常にCopilotと一致します。
成功した最終構成
7回目の試行で、以下の構成に到達しました。
name: Rewrite Copilot PR Description on: pull_request: types: [opened, ready_for_review] jobs: rewrite-description: if: github.event.pull_request.user.login == 'Copilot' runs-on: ubuntu-latest permissions: pull-requests: write contents: read issues: read steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get PR info env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | gh pr diff "$PR_NUMBER" > /tmp/pr_diff.txt gh pr view "$PR_NUMBER" --json title,body,headRefName > /tmp/pr_meta.json - name: Generate new PR description run: | PR_TITLE=$(jq -r '.title' /tmp/pr_meta.json) DIFF_STAT=$(wc -l < /tmp/pr_diff.txt) FILES_CHANGED=$(grep '^diff --git' /tmp/pr_diff.txt \ | sed 's/diff --git a\///' | sed 's/ b\/.*//' | sort -u) cat > /tmp/new_description.md <<EOF ## 概要 ${PR_TITLE} ## 変更内容 ### 変更ファイル $(echo "$FILES_CHANGED" | while read f; do echo "- \`$f\`"; done) ### 差分統計 - 変更行数: ${DIFF_STAT} 行 ## テスト - [ ] 動作確認済み - [ ] 既存のテストが通ること EOF sed -i 's/^ //' /tmp/new_description.md - name: Update PR body env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | gh pr edit "$PR_NUMBER" --body-file /tmp/new_description.md
運用フローは以下の通りです。
- Issueを作成し、Copilot coding agentをアサイン
- CopilotがDRAFT PRを作成し、コードを生成
- Copilotの作業完了を確認し、
gh pr readyでDRAFTを外す ready_for_reviewでActionsが発火し、PR本文がチームフォーマットに書き換わる
おまけ: CLIからCopilotを自動アサインする方法
検証の過程で、CLIからCopilot coding agentをIssueにアサインする方法も判明しました。
gh api repos/OWNER/REPO/issues/ISSUE_NUMBER/assignees \ --method POST \ -f "assignees[]=copilot-swe-agent[bot]"
Web UIを開かなくても、ターミナルからIssue作成→Copilotアサインまで一気に実行できます。
まとめ
Copilot coding agentのPR本文は、公式にはカスタマイズできません。しかし、GitHub Actionsで後処理として書き換えることで対応できます。
実装にあたって押さえるべきポイントは3つです。
- bot名は
Copilot。copilot[bot]でもcopilot-swe-agent[bot]でもない - タイミングは
ready_for_review。openedではCopilotに上書きされる - 条件は
user.loginで判定。actorはトリガーした人になるので使えない
今回はテンプレートベースでの書き換えでしたが、LLM APIを組み合わせれば、差分の要約や変更理由の自動生成も可能です。
元記事の「できなかった」を「こうすればできる」に変えるまでに7回の試行錯誤がありました。この過程自体が、AI駆動開発における「動かしてみないとわからない」を体現していると感じています。
参考文献
- kumewata. "Copilot coding agent の PR description はカスタマイズできるのか?検証した" — Zenn
- GitHub Docs. "GitHub Copilot coding agent" — docs.github.com
お知らせ
私の所属する ACS 事業部では、開発者ポータル Backstage、Azure AI Service などを活用し、Platform Engineering + AI の推進・内製化を支援しています。
www.ap-com.co.jp www.ap-com.co.jp www.ap-com.co.jp
また、GitHub パートナーとしてお客様に GitHub ソリューションの導入支援を行っています。 GitHub Copilot などのトレーニングなども行っておりますので、ご興味を持っていただけましたらぜひお声がけいただけますと幸いです。
一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。