Claude CodeでPRを作成する手順 — gh pr createまでの自動化フロー
Claude CodeでのPR作成は、変更の要約、gh pr createでの生成、説明文の推敲、セッションの呼び戻しの順に進めると安定します。PRに紐づく条件とつまずきの切り分けも扱います。
Claude Codeに「PRを作って」と頼むだけでもPRは作られます。ただ、先に変更を要約させ、生成してから説明文を推敲させる順に分けると、レビューしやすいPRが出てきます。この記事ではその流れと、作成後にセッションをPRから呼び戻す仕組み、紐づかないときの切り分けを扱います。
Claude CodeでPRを作成するとき、裏で何が動くか
Claude CodeはGitHubのgh CLIを介してPRを作ります。gitの差分とコミット履歴を読み、gh pr createをBashツールで実行する、という組み合わせです。
差分から読み取れるのは「何が変わったか」までで、「なぜ変えたか」は含まれません。意図は会話の履歴やコミットメッセージから拾われます。意図を一言も伝えずにPRだけ作らせると、説明文が変更点の列挙に寄りやすくなります。
複数のコミットにまたがる変更を1本のPRにまとめる場面が、この流れの向き先です。1コミットだけの小さな修正なら、「PRを作って」の一言で足ります。
作成前に確認する3点と、許可ルールの書き方
最初に確認するのは3点です。
ghCLIがインストールされ、認証済みであること- 対象の変更がコミットされていること
- リモートリポジトリへのpush権限があること
認証はローカルのgh設定に依存します。Claude Code側で追加設定をする必要はありません。
gh pr createはリポジトリへの書き込みを伴うため、初回は許可ダイアログが出ます。繰り返し使うなら、コマンドを絞って許可リストに入れる選択肢があります。
{
"permissions": {
"allow": ["Bash(gh pr create *)"]
}
}ワイルドカードの前の半角スペースはルールの一部です。Bash(gh pr create *)はgh pr create単体にも引数付きにも一致し、スペースを抜いたBash(gh pr create*)は別のコマンド名にも広がります。末尾の:*はBash(gh pr create:*)のように書けて、スペース形と同じ意味です。ダイアログで「今後確認しない」を選んだときに保存されるのは、スペース形です。
:*が効くのは末尾だけです。Bash(gh:* pr create)のように途中へ置くと、コロンが文字として扱われ、ghのコマンドに一致しません。
Bash(gh *)のように広く許可すると、gh repo deleteのような破壊的な操作まで通ります。許可リスト全体の書き方はClaude Code settings.json完全ガイドにまとめています。コマンドを絞って許可する考え方は、サービス設定を書かせる場面でも同じです。具体例はClaude CodeでsystemdのUnitファイルを作成する手順にあります。
要約、生成、推敲の3段階で進める
公式のワークフローも同じ3段階です。各段階で渡すプロンプトは短くて足ります。
PR作成の3段階
- 1
変更を要約させる
後続の説明文の土台になります。要約に抜けや誤りがあれば、この段階で直させます。
認証モジュールに加えた変更を要約して - 2
PRを生成させる
直前に要約させたやり取りがあるので、説明文にはその内容が入ります。
PRを作って - 3
説明文を推敲させる
薄い箇所や背景の不足は、そのまま追加を頼みます。
セキュリティ改善に関する背景をもっと詳しくPRの説明に加えて
要約の段階で、複数の関心事が1つのブランチに混ざっていると気づければ、PRを分ける判断がしやすくなります。
社内テンプレートに沿った書式が必要なときは、.github/pull_request_template.mdの存在か書式を指示に含めておきます。テンプレートの各項目に対応する内容を差分から埋めさせる指示にすると、空欄のまま出る事態を避けやすくなります。項目と違う場所に情報が入ることもあるので、提出前の目視は省けません。
生成された説明文は、提出前に自分で読みます。「この変更で注意すべきリスクや考慮点は何か」と聞いて指摘させておくと、レビュー段階の手戻りが減ります。公式のワークフローでも、提出前にリスクを挙げさせることが推奨されています。
作成後にPRからセッションを呼び戻す
gh pr createでPRを作ると、そのセッションはPRに自動で紐づきます。この仕組みはClaude Code v2.1.27で入りました。同じバージョンで--from-prフラグも追加されています。
claude --from-pr 1234自分のPR番号に置き換えて実行すると、そのPRに紐づくセッションだけを並べた選択画面が開きます。番号を覚えていなければ、セッション内で/resumeを開き、検索欄にPRのURLを貼る方法もあります。検索欄がPRのURLを受け付けるようになったのはClaude Code v2.1.122です。
v2.1.287のclaude --helpでは、このフラグは次のように表示されます。
--from-pr [value] Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term値は省略できます。省略すると、検索語を入れられる選択画面がそのまま開きます。リファレンスによると、値にはPR番号のほかに、GitHubとGitHub EnterpriseのPRのURL、GitLabのマージリクエストのURL、BitbucketのプルリクエストのURLを渡せます。
URLを受け付ける範囲は、版を追って広がりました。
| バージョン | 変わった点 |
|---|---|
| v2.1.27 | 変わった点--from-prが入り、GitHubのPR番号かURLで再開できる |
| v2.1.119 | 変わった点GitHub Enterprise、GitLab、BitbucketのURLを受け付ける |
| v2.1.122 | 変わった点/resumeの検索欄にPRのURLを貼って探せる |
GitLabのURLを渡して通らないときは、古い版を使っていないかを先に見ます。
選択画面から選んで再開したセッションは、保存されていた権限モードを復元せず、そのコマンドラインで新規に始めたときの権限モードで始まります。前回に権限を緩めていても、そのままは引き継がれません。
セッション内の/resumeで切り替えた場合も同じで、保存済みのモードは戻らず、いま開いているセッションのモードが続きます。モードを指定して始めたいときは、起動時に--permission-modeを付けます。
セッションがPRに紐づく条件と、紐づかない条件
「PRを作ったのに--from-prで出てこない」という場面の切り分けには、紐づきの判定ルールが役立ちます。判定はghコマンドの種類ごとに違います。
PRに紐づく操作と、紐づかない操作
紐づく
gh pr createとglab mr createで作成したとき。ghで既存PRを編集・コメント・クローズ・ready化したとき(コマンドの出力がPRを名指ししている場合)。gh pr checkoutやブランチへのpushのあと、gh pr viewで見つかる開いたPR。
紐づかない
出力にPRが出ないghコマンド。公式はgh pr mergeを代表例に挙げています。対話端末にしか結果を出さないためです。
push後に作ったPRにも紐づく場合があります。先にpushしてからPRを作る順でも、リンクが付く余地があるということです。Claude Codeは、pushの時点でPRがまだ無くても、同じディレクトリで続く最大5回のgit・gh・glab・curlコマンドのたびにブランチを検索し直します。GitHubのREST APIでPRを作らせた場合も、再検索で見つかれば紐づきます。
PRが複数に紐づいたセッションは、claude agentsの一覧で個数表示(3 PRsなど)になります。数字の色はPRの状態を表します。黄はチェック待ち・レビュー待ち・チェック失敗、緑はチェック通過でレビューのブロックなし、紫はマージ済み、灰はドラフトまたはクローズです。複数のときの色は、開いているPRのうち最も対応が必要なものに合わせます。全件はピークパネルで見られます。
PRのラベルは、GitHubなら#1234の形で表示され、PRへのリンクになります。セッションへ追加の指示を送ってもラベルは残ります。リンクとして描画されない端末では、FORCE_HYPERLINK=0を設定すると平文で出せます。
バックグラウンドセッションにPRまで任せる場合
claude agentsから起動するバックグラウンドセッションは、作業を隔離したワークツリーで行い、タスクに応じてドラフトPRを開きます。公式の記述では、コミットとpushは確認なしで行い、mainやmasterへのpush、強制push、マージは行わないとされています。
自分で隔離していないチェックアウトを編集するセッションは、コミットやブランチの切り替えの前に確認を挟みます。隔離をnoneにした場合、ワークツリーへの移動に失敗した場合、すでにあるワークツリーの中で始めた場合が該当します。作業の終わりには、パスやブランチ、PRなど成果の置き場所を示す報告が返ります。
CLAUDE.mdやタスク指示に「コミットとpushは自分でやる」と書いてあれば、そちらが優先されます。PRを人間が作る運用なら、その旨を書いておけば自動のpushを止められます。マージは常に自分の手で行う前提になるため、緑の番号を見てからレビューとマージに進みます。
よくあるつまずきと対処
ghが未インストールまたは未認証だと、PR作成が失敗します。Claude Code側にこの状態を解決する手段はないので、作業を始める前にgh auth statusで認証状態を確認します。
コミットしていない変更は、要約にもPRにも出ません。ワーキングツリーの未コミット分はgit履歴に現れないため、git statusで未追跡ファイルが残っていないかを確かめます。
「PRを作って」だけで済ませると、列挙調の説明文になりやすいです。背景や設計判断を書かせたいなら、要約の段階か推敲の段階で明示します。
大きな差分は、1本にまとめず分けたほうが軽くなります。変更が複数の関心事にまたがるなら、コミット単位かディレクトリ単位でPRを分けると、要約もレビューも軽くなります。
ベースブランチは、作成後に必ず見ます。派生ブランチで作業していると、意図と違うブランチが相手になる可能性があります。作成後に表示されるベースブランチ名を確認します。
gh pr mergeでマージしたあとにPRのラベルが付かないのは、gh pr mergeが結果を対話端末にだけ出力し、コマンドの出力からPRを特定できないためです。この場合はリンクが作られません。マージ前に紐づいていたPRは、claude agentsの一覧でマージ済みの紫で表示されます。
よくある質問
ドラフトPRとして作れますか
gh pr createには--draftオプションがあります。「ドラフトPRとして作って」と頼めば、そのフラグ付きで実行させられます。レビュー準備が整うまで通知を出したくないときの選択肢です。ドラフトのPRは、claude agentsの一覧では灰色の番号で表示されます。
GitLabやBitbucketでも同じ手順で使えますか
gh pr createはGitHub専用です。GitLabではglab mr createを使います。ここで作ったマージリクエストもセッションに紐づき、一覧には!1234の形で表示されます。Bitbucketには、リファレンスが挙げるURLの受付以外に、作成コマンドの紐づけを示す記述を確認できていません。
まとめ
PR作成は、要約を挟んでから生成させ、最後に説明文を推敲させる3段階に分けると、意図が伝わるPRになります。作成後にclaude --from-prが空振りしたら、そのPRを作ったghコマンドが出力でPRを名指ししていたかを見ると原因を切り分けられます。