Create GitHub Pull Request

Skill to create a GitHub Pull Request from commits on the current branch. Handles push, title/body generation, and PR creation automatically without user confirmation unless issues arise.

Sby Skills Guide Bot
DevelopmentIntermediate
007/22/2026
Claude Code
#pull-request#github#automation#git#workflow

Recommended for


name: pr-create description: "GitHub Pull Request を作成する時に使う。トリガー: 「PR 作って」「PR 作成」「プルリクエスト作って」「create PR」「open PR」「raise PR」等のユーザー指示、または pr-create スキル指定。コミット済みブランチから push 確認 → タイトル / 本文案の提示 → gh pr create 実行 → Copilot レビュー依頼 → 到着をバックグラウンド監視し、指摘があれば pr-review-fix へ自動接続するまでを一気通貫。コミット作成自体は担当せず、事前に commit スキル等で済ませておく前提。"

pr-create

現在のブランチに積まれたコミットから GitHub Pull Request を作成するスキル。 コミット作成は担当せず、push 確認 → タイトル / 本文生成 → PR 作成までを行う。 問題がない限り、ユーザー確認は挟まず全自動で進める。

前提

  • 現ブランチに PR に載せるコミットが 1 件以上 積まれていること。無い場合は「PR に含めるコミットがありません」と伝えて終了
  • 現ブランチに 既に PR が存在 する場合 (gh pr view で検出) は新規作成せず、既存 PR の タイトル・説明に現状コードベースを反映する
  • 作業ツリーが汚れている (未コミットの変更がある) 場合はユーザーに扱いを確認 (コミットするか stash するか)
  • 依存: gh CLI (authenticated)、git

ワークフロー (6 Phase)

Phase 1 — 事前チェック

git status --short                                           # 未コミット変更の有無
git rev-parse --abbrev-ref HEAD                              # 現ブランチ名
gh pr view --json number,url 2>/dev/null                     # 既存 PR の検出
git log --oneline "$(git merge-base HEAD @{u} 2>/dev/null || git merge-base HEAD origin/HEAD)"..HEAD
                                                             # PR に載るコミット一覧
  • 既存 PR あり → タイトル・説明の更新作業に
  • コミットが 0 件 → 終了
  • 作業ツリーが汚れている → ユーザーに確認

Phase 2 — push

git pushCLAUDE_GIT_SKILL=pr-create を前置して実行する (PreToolUse hook ~/.claude/hooks/enforce-git-skill.sh が本スキル経由かどうかをこのマーカーで判定し、無いと直接実行はブロックされる)。

# upstream 未設定の初回 push
CLAUDE_GIT_SKILL=pr-create git push -u origin HEAD

# upstream 設定済みでローカルが先行
CLAUDE_GIT_SKILL=pr-create git push

push 失敗時は gh auth statusgit remote -v を確認してユーザーに報告。

Phase 3 — タイトル・本文の生成

コミットログを読み取ってタイトルと本文を生成する。

タイトル (日本語、50 文字程度):

  • コミットメッセージの規約 (feat: / fix: / docs: / refac: / chore: / style: / test:) を踏襲
    • タイトルのprefixは必ず上記7種類のどれかを用いる。 refactor(frontend): 等のprefix改変、スコープ記述は認められない
  • 句点なし、曖昧語 (いろいろ修正 等) は避ける
  • 単一コミット: その件名をそのまま流用(英語or曖昧な場合は別途日本語のタイトルを考える)
  • 複数コミット: ブランチ全体の目的を集約して 1 件に要約

本文の構成 (必ずこの順で判定する)

Step 3-A — リポジトリの PR テンプレートを必ず先に検出する。default テンプレートにフォールバックする前に 必ず 以下を実行する。スキップ禁止。

# GitHub が認識する標準パスを全て確認 (大小文字・場所違いを網羅)
for p in \
    .github/pull_request_template.md \
    .github/PULL_REQUEST_TEMPLATE.md \
    docs/pull_request_template.md \
    docs/PULL_REQUEST_TEMPLATE.md \
    pull_request_template.md \
    PULL_REQUEST_TEMPLATE.md; do
  [ -f "$p" ] && echo "FOUND: $p" && break
done
# 複数テンプレート (`.github/PULL_REQUEST_TEMPLATE/*.md`) もありうる
ls .github/PULL_REQUEST_TEMPLATE/ 2>/dev/null

Step 3-B — Step 3-A でテンプレートが見つかった場合:

  1. テンプレートファイルを Read ツール等で 必ず内容を読む
  2. 各セクション (## 見出し / <!-- コメント指示 --> / チェックボックス) を そのまま維持
  3. テンプレートが要求する情報をコミットログから抽出して埋める
  4. テンプレート由来のセクションを削除・改名しない。コメント指示 (<!-- ... -->) はそのまま残してよい
  5. 不明 / 該当無しのセクションは - 該当なし 等で空欄を埋める (削除しない)

Step 3-C — Step 3-A で 何も見つからなかった場合のみ、default テンプレートを使う。詳細は references/default_template.md を参照 (本 SKILL.md にはあえて inline で載せない。フォールバックである旨を明示するため)。

本文の書き方

リポジトリテンプレートの有無にかかわらず、常に以下にしたがって本文を推敲する

  • 概要: Why を 1行で書く。コードから読める What の冗長説明は書かない
  • 変更点:
    • コミット、ファイル単位ではなく、わかりやすい機能単位で分割する。
    • コードを読めばわかる具体名は極力書かない。
    • 悪い例: 旧 experiments/sim2real/utils/action_dr.py を削除し、engine (LowFreqNoiseInjector / dagger_offset_approach_iter / sample_duration_scale / sample_ee_perturbation / taper_weight) を polaris/dr/motion_noise.py に移設
    • 良い例: DR関連のutil関数を正しい場所へ移設
  • 動作確認: 簡潔に 2〜3 項目程度まで。実行者が実際に確認する最低限に絞り、網羅リストにしない

Phase 4 — PR 作成

gh pr create を HEREDOC で呼び出す (改行・Markdown を安全に渡すため)。CLAUDE_GIT_SKILL=pr-create を前置しないと PreToolUse hook にブロックされる。

CLAUDE_GIT_SKILL=pr-create gh pr create --title "<承認済みタイトル>" --body "$(cat <<'EOF'
## 概要
...

## 変更点
- ...

## 動作確認
- [ ] ...
EOF
)"

オプション (ユーザー指示があった時のみ追加):

  • --draft — draft PR として作成
  • --reviewer <user>[,<user>...] — レビュアー指定
  • --base <branch> — base ブランチを明示 (省略時はリポジトリのデフォルトブランチ)
  • --assignee <user> — アサイン指定

Phase 5 — Copilot レビュー依頼 + 監視起動 (必須・毎回)

PR 作成直後、まず CI チェック完了の監視を background で 起動する (run_in_background: true の Bash で実行し、セッションをブロックしない)。Copilot 依頼の成否に関わらず起動する:

bash ~/.claude/skills/pr-create/scripts/poll-ci-checks.sh <PR番号>
  • pending が消えるまで待機し、ci=pass|fail|none を出力して終了する
  • push 直後のチェック未登録は grace 期間 (デフォルト 120s) 内なら登録待ちとして扱い、grace を過ぎても現れなければ ci=none (CI なしリポジトリ) と判定する
  • CI 修正後の再 push 時も、このスクリプト単体を background で再起動して再監視する

続けて、付属スクリプトで GitHub Copilot を PR レビュアーに登録する。省略禁止

bash "${CLAUDE_PROJECT_DIR:-$HOME}/.claude/skills/pr-create/scripts/request-copilot-review.sh" <PR番号>

スクリプト本体: ~/.claude/skills/pr-create/scripts/request-copilot-review.sh

  • 内部で gh api graphqlrequestReviews mutation を botIds 付きで呼び、Copilot PR Reviewer (固定 bot ノード BOT_kgDOCnlnWA) を依頼する
  • Copilot レビュー機能未有効・既に依頼済み・権限不足などで失敗する場合があるが、PR 作成自体は成功しているので終了コード 1 でも警告扱いとし、ユーザーには「Copilot 依頼に失敗 (理由)」と PR URL の両方を伝える

依頼に成功したら、続けてレビュー到着のポーリングも background で 起動する。依頼に失敗した場合はこちらは起動しない (CI 監視は起動済みのまま維持する):

bash ~/.claude/skills/pr-create/scripts/poll-copilot-review.sh <PR番号>

Phase 6 — 完了報告

作成された PR URL・Copilot 依頼結果・監視起動 (レビュー / CI の 2 本) を報告していったん終了。

✅ PR #<N> を作成しました: <URL>
✅ Copilot にレビューを依頼しました (レビュー到着 / CI 完了をバックグラウンドで監視中)

(Copilot 依頼が失敗した場合は ⚠️ で警告のみ表示し、PR 作成成功と CI 監視は維持する)

Phase 7 — 監視完了時の自動対応

監視は 2 本 (レビュー / CI) が独立して動くため、完了通知 (task-notification) も個別に届く。それぞれの出力に応じて自動で動く:

poll-ci-checks.sh の通知:

  • ci=failCI の失敗原因を確認・修正して push し、poll-ci-checks.sh を background で再起動する (レビュー指摘対応と重なる場合はまとめて対応してよい)。ship フローの最中は CI が fail のままだと ship.sh done review が通らない
  • ci=pass|none → 報告のみ (レビュー対応の進行はレビュー側の通知に従う)
  • exit 1 (タイムアウト) → その旨を報告し、gh pr checks で現状を確認して再起動か手動確認を提案

poll-copilot-review.sh の通知:

  • copilot_review=arrived かつ unresolved_threads > 0 → pr-review-fix スキルを起動して対応を開始する (修正計画の承認は pr-review-fix 内のフローが担うため、起動自体に確認は不要)。ship フローの最中なら先に ship.sh done review を打つ (CI が未完 / fail だと通らない点に注意)
  • unresolved_threads = 0 → 「Copilot レビュー到着、未解決の指摘なし」と報告して終了
  • unresolved_threads = ? → スレッド数の取得に失敗している。fetch_unresolved_threads.sh を手動実行して確認してから判断する (0 件と誤認しない)
  • exit 1 (タイムアウト) → その旨を報告し、必要なら poll-copilot-review.sh を再起動するか手動確認を提案 (再起動時のレビュー待機は開始時点からの増分基準なので、到着済みレビューがある場合は gh pr view --json reviews で直接確認する)

トラブルシューティング

  • 既に PR が存在: 新規作成せず既存 PR URL を返す。タイトル / 本文の更新が必要なら gh pr edit <N> --title/--body-file で対応
  • push 失敗 (403 等): gh auth status / git remote -v で認証と remote を確認
  • 作成後にタイトル / 本文を直したい: gh pr edit <N> --title "..." または gh pr edit <N> --body-file /tmp/body.md
  • draft ↔ ready の切り替え: gh pr ready <N> / gh pr ready --undo <N>
Related skills