初めまして、株式会社うるるの眞島と申します。
うるる (ULURU) Advent Calendar の17日目の記事となります。
はじめに
GitHub Copilotのカスタムインストラクション機能とプロンプトテンプレートを活用して、IssueやPRに必要な情報を記載するために、私自身が使っている方法をご紹介したいと思います。
IssueやPRは見る人(レビュアー)のために充実させた方が良いとわかっていても、毎回手を抜かずに書くのは現実的にはなかなか厳しいですよね。
ちょっとした対応だと、コメント書いている時間の方がコード修正より長くなってしまったり、テンプレートで書くべき内容が指示されていても、「まあこれでいいか」となってしまうことも。
コーディングは最近AIにお任せすることも増えてきていますし、同じようにIssueやPRの作成も、AIに対応してもらったら楽できるかも、と考えて導入してみたら、想像よりだいぶ楽できて、IssueやPRの情報も充実させることができました。
「Issue作成めんどくさい」「PRに何書けばいいかわからない」…そんな悩みを少しだけ解決することができるかもしれません。
前提条件
この記事で紹介する手順は、以下が実行可能な環境を前提としています。
- Visual Studio Code
- GitHub Copilot ChatのAgentモード
- GitHub MCPサーバー
GitHub MCPサーバーの詳細はこちら:
課題
- ❌ Issueを毎回きっちり埋めるのは結構面倒くさい
- ❌ PRの説明が不足気味で、レビュアーが実装内容や意図を理解できない
たとえテンプレートが用意されていたとしても、IssueとPRの記載内容はエンジニアのスキルや経験、その時々の忙しさにも依存してしまいがち。
解決策の全体像
これらの課題を解決するために、以下の3つの仕組みを導入しました。
- 専用インストラクション - プロジェクトの知識をCopilotに教える
- Issue/PRテンプレート - 必要な情報を構造化
- プロンプトテンプレート - 作業フローを自動化
課題1: Issueを毎回埋めるのが面倒
問題点
Issueのテンプレートがあっても、必要な情報を手作業で記載するのは結構な時間がかかります。そして大事だとわかっていても正直、面倒くさい作業と感じていました。
解決策
- Github MCPを使ってIssueを直接AIが作成できるようにした
- 適当な内容でIssue作成することを防ぐためテンプレートを作成、参照するようにした
.github/prompts/ 以下にIssue作成専用のインストラクションを作成し、Issue作成フローを自動化しています。
設定内容(サンプル)
# GitHub操作用設定
Issue作成時に使用するテンプレートと対象リポジトリの情報を以下に示します。
ユーザーへの質問は1つ1つ選択肢形式で行い、ユーザーが選びやすいようにしてください。
## 作業フロー
- **ユーザに修正を行うブランチを確認し**、対象ブランチに切り替えてください。
- 切り替えたブランチを最新の状態にしてください
- Issueのプロジェクト名、カテゴリ、概要の3つをユーザーに確認し、それを元にIssueをテンプレートを参照して作成してください
- タイトルのタスク名は概要から要約したものを使用してください
- 不具合(Bug)の場合は「不具合No」をユーザに確認し、タイトルのカテゴリを【不具合No.ユーザが入力したNo】にしてください
- 作成したIssue番号を接頭辞として付与したブランチを新しく作成し、pushしてください。
- ブランチ作成後、DraftのPRをテンプレートを参照して作成してください
- PR先は 手順2で最新化したブランチです
- upstream から origin に向けて PR をユーザに確認してから作成してください
- PRタイトルは Issueタイトルと同じにしてください
- PR説明には Issue のリンクを貼ってください
- Issueにも PR のリンクを貼ってください
## Issueテンプレート参照先
[ISSUE_TEMPLATE.md](../ISSUE_TEMPLATE.md)
## Githubデフォルト設定(MCPが参照する)
- owner: xxxxxx
- repo: xxxxxxxxx
- assignees: ["あなたのユーザID"]
- type: 利用可能なIssueタイプ
- pullするリモート: origin
- push先リモート: upstream
Issueのテンプレートは別ファイルをリンクしています。
テンプレートはMD形式で必要な情報を書けば問題なしです。
使い方
Issueを作成するときにGitHub Copilot Chatで以下のように呼び出すだけ
1. `/` を入力すると、`.github/prompts/` 配下のファイル一覧が表示される
2. 作成したIssue作成用のプロンプトファイル を選択
3. 「新しいIssueを作成したい」と入力
Copilotが対話形式で必要な情報を聞いてくれて、Issue作成からブランチ作成、Draft PR作成まで自動で行ってくれます。間違えてしまうことも当然あるので、一応AI操作中はリアルタイムでチェックしておくのが良さそうです。
効果
- 🥳 (あんまり)面倒くさくない!
- ⏱️ Issue作成やDraftPR作成時間の短縮!
- ✅ テンプレートの記載漏れがなくなり、情報も充実!
- 🔗 Issue-PR-ブランチの紐付けが自動化(DraftPR作成し忘れも防止)!
課題2: PRの説明不足でレビュアーが困る
問題点
PRを作る時、以下のような状況になりがち(と個人的には思っています)。
- PRテンプレートがただの定型文になっていて機能していない
- レビュアーが背景を理解できず、結局対面レビュー(会話)をする
解決策
- 対応内容をAIに理解させる
- 対応内容を理解したAIにIssue、PRを作成・更新させる
(適当な内容でPR作成することを防ぐためテンプレートを参照させる)
Issue作成やコーディングをAIに実施させている場合、1番目は不要ですね。ご自身で対応した場合は、修正内容(コミットした)内容やIssue内容をAIに読み込ませてください。
次に**PULL_REQUEST_TEMPLATE.md** を作成し、以下のような構造にします。
## ストーリー
関連Issueのリンク: #XXX
## WHAT(何を開発したか)
このPRで実現する機能や修正内容を簡潔に
## HOW(どのように実現したか)
実装方法の概要:
- 使用した技術やライブラリ
- 主要な変更ファイルとその役割
- 処理フロー
## WHY(なぜその設計を選択したか)
設計判断の理由:
- 他の選択肢と比較した結果
- トレードオフの考慮
- 将来の拡張性への配慮
PR作成・更新用の新しいカスタムインストラクションを作成します
(参考名:create-pr.prompt.md)
# GitHub操作用設定
ユーザーへの質問は1つ1つ選択肢形式で行い、ユーザーが選びやすいようにしてください。
## PR作成テンプレート
タイトル: 【プロジェクト名】【カテゴリ】タスク名
本文: [テンプレート](../PULL_REQUEST_TEMPLATE.md) を参照してください。
## PR作成・更新時のルール
- 作成する前にIssueに紐づくPRが既に存在しないか確認してください
- PRが存在する場合
- 新規作成ではなく既存のPRを更新してください
- 既存のPRの記載内容を確認し、必要に応じて修正を加えてください
- PRが存在しない場合
- PR先は、修正を行ったブランチの最新化を行ったブランチです
- upstream から origin に向けて PR をユーザに確認してから作成してください
- PRタイトルは Issueタイトルと同じにしてください
- PR説明には Issue のリンクを貼ってください
- Issueにも PR のリンクを貼ってください
## Githubデフォルト設定(MCPが参照する)
- owner: xxxxxx
- repo: xxxxxxxxx
- assignees: ["あなたのユーザID"]
- type: 利用可能なIssueタイプ
- pullするリモート: origin
- push先リモート: upstream
使い方
Chatで下記のように依頼するだけです!
/create-pr.prompt.md
今回の修正内容をレビューが理解できるように詳細に説明するようにしてください
効果
- 🥳 (そこまで)面倒くさくない
- 📝 PRの説明が構造化され、読みやすくなる
- 🧠 レビュアーが設計意図を理解しやすい
- 💬 レビューコメントが本質的な議論に集中
実際にCopilotに「PRの説明を作成して」と依頼すると、コードの変更内容を分析して、WHAT/HOW/WHYを自動生成してくれます。
参考情報
インストラクションやプロンプトファイルの構造
.github/
├── copilot-instructions.md # インストラクション
├── ISSUE_TEMPLATE.md # Issueテンプレート
├── PULL_REQUEST_TEMPLATE.md # PRテンプレート
└── prompts/ # プロンプトテンプレート集
├── create-issue.prompt.md
└── create-pr.prompt.md
ハマりそうなポイントと対策
-
copilot-instructions.mdの内容は、会話が長くなるとAIは忘れてしまうことがある
- 専用のプロンプトで明確に指示する方が良さそう
- 「インストラクションをもう一度読み込んで」という指示も有効
- 1つのファイルにたくさん書くより、別ファイルにしてリンク貼る
最後に
最後まで読んでくださり感謝です🙇