name: github-pr-create description: Use when asked to create or open a GitHub PR, including casual requests like "PRまでお願い", "PRまで", "pushしてPR", "PR作って", or "PR open". Handles PR body generation and gh-based PR creation.
概要
gh CLI を使って GitHub に PR を作成する。PR 作成・本文更新では GitHub コネクタを使わない。会話内に完成済みの PR_BODY がない場合でも、このスキル内のテンプレートに従ってその場で本文を生成してから PR を作成する。
事前確認
gh auth statusが成功することを確認する- 現在のブランチが
mainmasterdevelop系なら、そのまま PR を作らず先に作業ブランチを作る BASE..HEADにコミットがない場合は、先にコミットを作る- 未追跡ファイルや無関係な変更は勝手に追加・コミットしない
- PR 本文や更新本文は必ずファイル経由で渡す。Markdown を
--body "..."や--field body="$(cat ...)"のようにシェル引数へ直接埋め込まない
実行手順
1. 品質チェックを実行する
会話の流れの中で未実施の品質チェックがあれば、PR作成前に実行する。実行コマンドは AGENTS.md や package.json など、プロジェクトで使われている標準的な設定ファイルから解決する。コマンドが見つからない場合はスキップする。
Format
- 会話内でまだ
format系のコマンドが実行されていなければ、CI のフォーマット漏れ検知前の最後の確認として、プロジェクトの format コマンドを実行する - format によって差分が発生した場合は、差分内容を確認し、この PR に含めるべき整形差分だけを
git add+git commitする - 無関係な未コミット変更や未追跡ファイルは追加しない
Lint / TypeCheck
- 会話内でまだ
lint/typecheck/tsc系のコマンドが実行されていなければ、プロジェクトに存在する lint / typecheck / tsc コマンドを実行する - エラーがあれば修正して再実行する(修正できない場合はユーザーに報告して中断)
Test
- 会話内でまだ test コマンドが実行されていなければ、プロジェクトの test コマンドを実行する
- 失敗があれば修正して再実行する(修正できない場合はユーザーに報告して中断)
2. PR 本文を用意する
- 会話内に完成済みの
PR_BODYがある場合は、それを優先して使う PR_BODYがない場合は、現在の変更内容から以下の構造で本文を生成する
## Issues
- Close {IssueId} <!-- Issue をクローズする場合 -->
- Refs {IssueId} <!-- 関連付けのみでクローズしない場合 -->
## Why
この変更が必要な背景・目的・モチベーション。
## Summary
この PR で行う変更の簡潔な説明。
## Changes
- 変更 1
- 変更 2
## Checklist
- [ ] フォーマット
- [ ] リント / 型チェック
- [ ] テスト
- [ ] 項目(必要に応じて追加)
## Details(任意)
技術的な詳細、実装メモなど
- 本文生成時は次のガイドラインに従う:
- 明確で簡潔な言葉を使用する
- 何を と なぜ に焦点を当てる
- Issue をクローズする場合、
Issuesセクションは- Close {IssueId}の形式にする - Issue をクローズしない場合、
Issuesセクションは- Refs {IssueId}の形式にする Summaryは 2〜3 文以内に収めるChecklistは手順 1 で実施した品質チェックの結果を反映させる(実施済みなら[x]、未実施なら[ ])Detailsは必要な場合のみ追加する
3. gh で PR を作成する
# 変数設定
BRANCH=$(git branch --show-current)
BASE="${BASE_BRANCH:-main}"
# gh 認証確認
gh auth status
# 保護ブランチ上では止める
case "$BRANCH" in
main|master|develop)
echo "Create or switch to a work branch before opening a PR."
exit 1
;;
esac
# PR対象のコミットがない場合は止める
if [ -z "$(git log --oneline "${BASE}..HEAD")" ]; then
echo "No commits to include in the PR. Commit your changes first."
exit 1
fi
# リモート確認&プッシュ(必要時)
if [ -z "$(git ls-remote --heads origin $BRANCH)" ]; then
git push -u origin $BRANCH
fi
# PR作成(PR_BODY は既存入力またはその場で生成)
FILE=$(mktemp)
trap 'rm -f "$FILE"' EXIT
cat > "$FILE" << 'EOF'
${PR_BODY}
EOF
gh pr create --base "$BASE" --body-file "$FILE" --title "${PR_TITLE}" ${WEB:+--web}
# 作成結果の確認
gh pr view "$BRANCH" --json title,body,url
入力
- PR_BODY: 会話履歴や事前生成済み本文(任意。未指定時はその場で生成)
- PR_TITLE: タイトル(未指定時は推定またはユーザー確認)
- BASE_BRANCH: ベースブランチ(default: main)
- WEB: ブラウザで開く場合は
--webを追加
エラー対応
- gh未インストール/未認証:
gh auth loginを促す - main/master/develop 上で作業中: 先に作業ブランチを作る
- コミットが未作成: 先にコミットを作る
- Push失敗: エラー内容を表示して手動対応を促す
- 既存PRがある:
gh pr view "$BRANCH" --json title,urlで既存PRを確認する - 本文更新が必要:
gh pr edit --body-file "$FILE"を試し、GraphQL の Projects classic などgh pr edit側の取得エラーで失敗した場合はgh api repos/<owner>/<repo>/pulls/<number> --method PATCH --field body=@"$FILE"を使う - GitHub コネクタが権限不足になる場合: コネクタと
ghの認証主体は別物なので、PR 作成・本文更新はgh/gh apiで継続する
注意
- Markdown を含む PR 本文は
gh pr create --bodyに直接埋め込まず、必ず--body-fileを使う - バッククォート、
$()、引用符、改行を含む本文はシェルに解釈されるため、--body "..."、--field body="$(cat "$FILE")"、未クォートの heredoc を使わない gh apiで本文を渡す場合は--field body=@"$FILE"のようにファイル参照で渡す- 作成後は
gh pr view --json title,body,urlでタイトル・本文・URL を確認する