AIでPull Requestの説明文を作る方法|変更理由と確認点を整理

AIでPR説明を作る前に比較差分と変更理由、実行済み検証を揃え、レビュー対象・未確認・戻し方を事実と照合します。

AIものさし編集部

AIでPull Requestの説明文を作るときは、先に「今回の差分」「変更が必要な理由」「実際に行った検証」を分けて渡します。差分にない意図や、実行していないテストを自然な文章で補わせないことが重要です。完成基準は文章量ではなく、reviewerが根拠へ戻り、変更の必要性と残る未確認を判断できることです。

この記事はPR説明の草案作成と照合を扱います。コードレビューやREADME作成とは別の成果物です。以下の仕様・差分・テストは架空例で、実repositoryのPR作成、Copilot操作、テスト実行、投稿は行っていません。

比較対象を固定し、事実を三つに分ける

まずbase branch、head branchまたはcommit、対象ファイルを確定します。作業中の差分や前のPRの変更が混ざると、説明とreview画面が一致しません。GitHubのPR比較はbase/headの関係を持つため、branch比較の資料(新しいタブで開く)も確認し、実際のFiles changedと同じ範囲を使います。

表は横にスクロールできます

情報根拠の例AIへ許す扱い
起きていた問題issue・再現条件・担当者の確認確認済みの条件だけを要約
最終的な変更対象diffと関連実装ファイルと処理を結び説明
変更理由要件・設計判断・人の説明diffから意図を推測しない
検証command・対象commit・結果実行済み/未実施を分ける
制約・戻し方影響範囲・運用計画不明なら未確認と記す

private codeや顧客データをAIへ入力できる環境かも確認します。secret、個人token、不要なlog全文を渡さず、生成に必要なファイルと仕様に絞ります。PR説明へ内部情報をそのまま転載しないようにします。

最終変更の前後を一つの具体例で書く

架空例として、検索欄を空にしても以前の検索結果が残る画面を考えます。以下は説明用の事実カードで、実装・動作確認済みの報告ではありません。

表は横にスクロールできます

項目架空の入力
問題検索欄を空にした後も旧結果が表示される
最終差分空入力の分岐で表示中の結果を初期状態へ戻す
要件空入力では検索結果を表示しない
検証テストはまだ実行していない
未確認入力を素早く切り替えた場合の応答競合

この情報から書けるのは「空入力で旧結果が残る問題に対し、空入力分岐で表示状態を初期化する」という説明です。「全検索で性能改善」「競合を完全解決」「テスト成功」とは書けません。実装に途中で別案があっても、最終差分を中心に説明します。

AIへの依頼例は次です。

添付の最終diffと事実カードだけを根拠にPR説明案を作ってください。問題の条件、変更後の挙動、根拠ファイル、実行済み検証、未実施、影響と未確認に分けます。理由が入力にない場合は推測せず質問事項へ回してください。テストの追加と実行成功を混同しないでください。各主張に根拠ファイルまたは記録を対応付けてください。

依頼文を長くするより、入力の事実と未確認を揃える方が有効です。AIへ渡していない仕様や実行結果は、人が資料を追加するまで確定させません。

GitHub Copilotのsummaryは草案として使う

GitHub公式のPR summary手順(新しいタブで開く)は、PRの説明欄やcomment欄で生成し、内容を確認して追加contextを加える流れを案内しています。利用条件はアカウントと現行資料で確認します。同資料ではCopilot Freeでは利用できないとされています。

公式資料は、既存のPR説明の内容を生成に考慮しない点も注意しています。すでに書いた理由や検証記録がある場合は退避し、生成文への置換で失わないようにします。既存の説明を無条件に空にしたり、生成直後に投稿したりする必要はありません。

Copilot以外のAIへ差分を渡す場合も、参照できた範囲と人が補うcontextを分けます。GitHubのCopilot利用上の制約(新しいタブで開く)は、もっともらしくても不正確な出力があり得ることと、人による確認の必要性を説明しています。

実行済み検証と、追加したテストを区別する

テストファイルがdiffにあることは、テストを実行して成功した証拠ではありません。逆に既存テストだけを実行した場合、今回の変更専用の再現テストを追加したと書きません。対象commitや実行時の差分が説明対象と一致するかも確認します。

表は横にスクロールできます

観測した事実書ける表現書かない表現
test ファイルを追加、未実行テスト追加・実行未実施テストPASS
unit testを実行し成功対象commandと結果実機や本番まで確認済み
browserで一経路を確認条件・画面・結果全環境で問題なし
外部接続がなく未確認未確認の接続と必要条件接続成功を推測

架空例の検証欄なら「未実施。空入力と入力切替の確認が必要」と書きます。後から実行したら、実際のcommand、条件、結果へ更新します。失敗した検証も隠さず、今回の変更に関係するかと残る問題を分けます。

主張ごとにdiffと根拠へ戻る

生成後は、問題条件、変更挙動、影響範囲、検証結果を一文ずつ照合します。根拠のない主張は削除するか、確認待ちへ戻します。文章を少し弱めるだけで事実に変えることはできません。

表は横にスクロールできます

確認対象照合先不一致なら戻す場所
何が変わるか最終diff・仕様差分読解・要件確認
なぜ必要かissue・人の判断変更理由の入力
どこまで確認したか実行記録検証欄
影響・制約関連実装・運用条件未確認と担当者
戻せるか変更種別・復旧計画運用設計

戻し方も、すべてを「revertすれば戻る」としません。DBや外部状態を変更するなら、コードの差し戻しとは別の復旧条件があります。今回の差分にその影響があるかを確認し、根拠がない場合は戻し方未検討と明示します。

追加commitの後に説明を更新する

レビュー中に修正したら、説明が現在の差分と一致するかを再確認します。取りやめた変更、古い検証結果、以前のファイル pathが残りやすい箇所です。新しい差分を見ずに文言だけを整えないようにします。

完成した説明は、問題と結果を先に示し、reviewerが見るべき変更、検証、制約へ続けます。実装者の作業日記より、最終変更を初見で判断できる情報を残すことが目的です。

確認した公式資料