| 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
git log --oneline "$(git merge-base HEAD @{u} 2>/dev/null || git merge-base HEAD origin/HEAD)"..HEAD
- 既存 PR あり → タイトル・説明の更新作業に
- コミットが 0 件 → 終了
- 作業ツリーが汚れている → ユーザーに確認
Phase 2 — push
git push は CLAUDE_GIT_SKILL=pr-create を前置して実行する (PreToolUse hook ~/.claude/hooks/enforce-git-skill.sh が本スキル経由かどうかをこのマーカーで判定し、無いと直接実行はブロックされる)。
CLAUDE_GIT_SKILL=pr-create git push -u origin HEAD
CLAUDE_GIT_SKILL=pr-create git push
push 失敗時は gh auth status と git remote -v を確認してユーザーに報告。
Phase 3 — タイトル・本文の生成
コミットログを読み取ってタイトルと本文を生成する。
タイトル (日本語、50 文字程度):
- コミットメッセージの規約 (
feat: / fix: / docs: / refac: / chore: / style: / test:) を踏襲
- タイトルのprefixは必ず上記7種類のどれかを用いる。 refactor(frontend): 等のprefix改変、スコープ記述は認められない
- 句点なし、曖昧語 (
いろいろ修正 等) は避ける
- 単一コミット: その件名をそのまま流用(英語or曖昧な場合は別途日本語のタイトルを考える)
- 複数コミット: ブランチ全体の目的を集約して 1 件に要約
本文の構成 (必ずこの順で判定する)
Step 3-A — リポジトリの PR テンプレートを必ず先に検出する。default テンプレートにフォールバックする前に 必ず 以下を実行する。スキップ禁止。
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
ls .github/PULL_REQUEST_TEMPLATE/ 2>/dev/null
Step 3-B — Step 3-A でテンプレートが見つかった場合:
- テンプレートファイルを
Read ツール等で 必ず内容を読む
- 各セクション (
## 見出し / <!-- コメント指示 --> / チェックボックス) を そのまま維持
- テンプレートが要求する情報をコミットログから抽出して埋める
- テンプレート由来のセクションを削除・改名しない。コメント指示 (
<!-- ... -->) はそのまま残してよい
- 不明 / 該当無しのセクションは
- 該当なし 等で空欄を埋める (削除しない)
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 作成直後、付属スクリプトで 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 graphql の requestReviews mutation を botIds 付きで呼び、Copilot PR Reviewer (固定 bot ノード BOT_kgDOCnlnWA) を依頼する
- Copilot レビュー機能未有効・既に依頼済み・権限不足などで失敗する場合があるが、PR 作成自体は成功しているので終了コード 1 でも警告扱いとし、ユーザーには「Copilot 依頼に失敗 (理由)」と PR URL の両方を伝える
依頼に成功したら、続けてレビュー到着のポーリングを background で 起動する (run_in_background: true の Bash で実行し、セッションをブロックしない)。依頼に失敗した場合はポーリングを起動しない:
bash ~/.claude/skills/pr-create/scripts/poll-copilot-review.sh <PR番号>
Phase 6 — 完了報告
作成された PR URL・Copilot 依頼結果・ポーリング起動を報告していったん終了。
✅ PR #<N> を作成しました: <URL>
✅ Copilot にレビューを依頼しました (到着をバックグラウンドで監視中)
(Copilot 依頼が失敗した場合は ⚠️ で警告のみ表示し、PR 作成成功は維持する)
Phase 7 — レビュー到着時の自動対応
ポーリングの完了通知 (task-notification) を受けたら、出力に応じて自動で動く:
copilot_review=arrived かつ unresolved_threads > 0 → pr-review-fix スキルを起動して対応を開始する (修正計画の承認は pr-review-fix 内のフローが担うため、起動自体に確認は不要)。ship フローの最中なら先に ship.sh done review を打つ
unresolved_threads = 0 → 「Copilot レビュー到着、未解決の指摘なし」と報告して終了
unresolved_threads = ? → スレッド数の取得に失敗している。fetch_unresolved_threads.sh を手動実行して確認してから判断する (0 件と誤認しない)
- exit 1 (タイムアウト) → その旨を報告し、必要なら
poll-copilot-review.sh を再起動するか手動確認を提案
トラブルシューティング
- 既に 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>