PR説明文ライター
現在のブランチの差分を読み取り、完全なGitHubプルリクエスト説明文を作成します。1つのコマンドでPRを作成または更新します。
ライティングスタイル
生成されるすべてのPR説明文に適用:
- 能動態を使用。「Xが追加されました」ではなく「Xを追加」
- 概要は現在形(「キャッシュ層を追加」)、文脈は過去形(「従来のアプローチはリクエストごとにN回のレンダリングを引き起こしていた」)
- 短い文、箇条書きは1項目1アイデア
- ダッシュ(—)は使用せず、代わりにカンマまたはピリオドを使用
- 不要な表現を避ける:「このPR」「このコミット」「議論に基づき」
- 具体性が一般性に勝る:「p95レイテンシを800msから90msに削減」は「パフォーマンスを改善」よりも優れる
ステップ1:セットアップを確認
gh が認証されていることを確認:
gh auth status
認証されていない場合:gh auth login を実行し、プロンプトに従います。
現在のディレクトリがgitリポジトリであり、アクティブなブランチがあることを確認:
git branch --show-current
HEADが切り離されている、またはブランチがない場合は、処理を停止し、ユーザーに説明するブランチを尋ねます。
ステップ2:差分コンテキストを収集
以下の3つのコマンドを実行してコンテキストを構築:
ファイルサマリー(何が変わったか):
git diff main...HEAD --stat
コミットメッセージ(なぜ変わったか):
git log main...HEAD --oneline
完全な差分(どのように変わったか):
最初に origin/main(常に最新)を使用し、フォールバックとしてローカルの main、次に master を使用:
if git rev-parse origin/main &>/dev/null 2>&1; then
BASE=origin/main
elif git rev-parse main &>/dev/null 2>&1; then
BASE=main
else
BASE=master
fi
git diff $BASE...HEAD
差分が非常に大きい場合(500行超)、--stat サマリーとコミットメッセージのみを読み取ります。また、差分の最初の200行を読み取り、主要な変更を把握します。出力全体を処理する必要はありません。
また、既存のPRを確認し、その現在のタイトル/本文を読み取ります:
gh pr view --json title,body,baseRefName 2>/dev/null
ステップ3:フォーマットガイドを読む
何かを書き始める前に、references/pr-format-guide.md を全文読んでください。以下の内容を内部化します:
- 必須セクションとその順序
- 各セクションの書き方
- 含めるべきものと省略すべきもの
- テストセクションのフォーマット
ステップ4:説明文を生成する
references/pr-format-guide.md のフォーマットを使用してPR説明文を書きます。
ルール:
- Changesセクションのすべての箇条書きは、差分内の何かに対応している必要があります
- コード変更から示唆されないテスト手順をでっち上げないでください
- 関連するコンテンツがないセクションは完全に省略してください(「N/A」と書いたり空のままにしないでください)
- スクリーンショットセクション:差分にUI変更が含まれている場合のみ含めてください
- コミットメッセージが「なぜ」を説明している場合は、その文脈をサマリーで使用してください
QAチェックポイント: 提示前に以下を確認:
- サマリーは1~2文、能動態、不要な表現なし
- すべての変更箇条書きが具体的で差分に対応している
- でっち上げられた指標や結果がない
- テスト手順が実行可能である(誰かが従える内容)
- どの行にもダッシュ(—)がない
ステップ5:PRを作成または更新する
説明文をユーザーに提示し、「PRを作成しますか、既存のPRを更新しますか、それとも出力のみにしますか?」と尋ねます。
新規PRを作成:
バッククォート、引用符、改行を安全に扱うため、stdinで本文を渡します:
gh pr create --title "タイトル" --body-file - << 'EOF'
本文
EOF
タイトルはコミットメッセージと差分サマリーに基づいて提案します。タイトルは命令形で、72文字以内にします:「Redisキャッシュをユーザーセッションルックアップに追加」とし、「追加されました」とはしないでください。
既存のPRを更新:
gh pr edit --body-file - << 'EOF'
本文
EOF
出力のみ: 手動でコピー&ペーストできるように、タイトルと本文をコードブロックで表示します。
作成または更新後、「PR description updated. View it at: [URL]」と確認します。