open-pr について
open-pr は、GitHub CLI を使うコントリビューター向けの、プルリクエストを作成・更新するスキルです。ブランチや課題の確認から、本文の準備、提出、リンク検証までを扱います。
主な機能
- 01PR のベースブランチを特定
- 02別リポジトリの課題を解決
- 03変更内容と差分規模を確認
- 04PR の作成と更新
- 05クローズ参照を検証
活用シーン
- 01課題ブランチから PR を作成
- 02変更後に既存 PR を更新
- 03積み重ねた PR の親ブランチを指定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ clhbid/ agent-context --skill open-prインストール後、Claude Code で/open-prを入力して読み込まれたか確認します。
詳細
PR を開く
プルリクエストを開くか更新します。本文の作成は pr スキルが担当し、このスキルはその前後のすべてを行います。
ステップ 1:プルリクエストとベースを確認する
git fetch origin --prune
gh pr view --json number,url,baseRefName
ベースを決めつけないでください。 プルリクエストの対象ブランチとの差分を確認します。
- プルリクエストが存在する場合: その
baseRefNameを使用します。ステップ 6b で更新します。 - 存在しない場合: デフォルトブランチ(
mainまたはdevelopment)を使用します。gh repo view --json defaultBranchRef --jq .defaultBranchRef.nameで確認します。または、このスライスが前のスライスに積み重なっている場合は、前のスライスのブランチを使用します。ステップ 6a で作成します。
ステップ 2:Issue を取得する
ブランチ名から Issue 番号を解析します。ブランチ名は {issue_number}-{description} の形式です(例:54-return-to-after-login -> Issue #54)。
番号だけでは Issue を特定できません。 Issue 番号はリポジトリごとに割り当てられており、Issue が必ずしもプルリクエストを作成するリポジトリにあるとは限りません。あるリポジトリでの変更が、別のリポジトリで追跡されている Issue を実装することもよくあります。取得前にリポジトリを特定し、特に指定がなければ現在のリポジトリを使用します。
# Default to this repo; override when the issue lives elsewhere
ISSUE_REPO="$(gh repo view --json nameWithOwner --jq .nameWithOwner)"
gh issue view <issue_number> --repo "$ISSUE_REPO" --json title,body,url
取得した Issue が差分の内容と一致しない場合、リポジトリの特定を誤っています。他の人の Issue を対象にプルリクエストの本文を書く前に、確認してください。
ステップ 3:変更内容を読む
git status # warn the user about uncommitted changes
git log --oneline "origin/<base>"...HEAD
git diff "origin/<base>"...HEAD
ステップ 4:規模を確認する
git diff --shortstat <base>...HEAD
issue-tracker スキルの Ready for Agent の前に作業を分割する に記載された上限と比較します。上限を超えている場合はその旨を伝え、同スキルにある「簡素化してから分割する」方法を提案します。これによって作業が止まることはありません。 作成者が出すように指示した場合は、そのまま出してください。
ステップ 5:本文を書く
pr スキルを使って本文を書き、次の点に従います。
- マージ前またはマージ後に行う作業(「マージ前に環境変数 X を追加する」「マージ後にマイグレーション Y を実行する」など)は、Merge Danger の任意の説明欄に記載します。
- 最後に、締めくくりの行として
Closes #<issue_number>を記載します。プルリクエストが Issue の一部だけを実装する場合は、Part of #<issue_number>とします。Issue が別のリポジトリにある場合は、対象を明記します。Closes owner/repo#Nと記載してください。#Nだけの場合、このリポジトリの Issue N を指すことになります。
タイトルの形式: {issue_number}: {issue_title}。例:54: Return to after login。
ステップ 6a:プルリクエストを作成する
ステップ 5 の本文をファイルに保存してから、次を実行します。
git push -u origin HEAD
gh pr create --base "<base>" --title "<issue_number>: <issue_title>" --body-file <body-file>
gh pr edit --add-reviewer <maintainer>
--base は必須です。 指定しないと gh はデフォルトブランチを対象にします。そのため、前のスライスに積み重なっているスライスでは、親の変更も差分に含まれてしまいます。
レビュー可能な状態で開き、レビューを依頼します。 Draft は実行が途中で止まったことを意味します。リポジトリの AGENTS.md にある 実行の終了方法 の Blocked および Error の終了時に限って使用し、必要な対応を説明するコメントをプルリクエストに記載します。
ステップ 6b:プルリクエストを更新する
git push
gh pr edit --body-file <body-file>
本文を追記するのではなく、差分全体を対象に書き直します。Issue のタイトルが変わっている場合は、gh pr edit --title でプルリクエストのタイトルも更新します。
ステップ 7:リンクを確認する
gh pr view --json baseRefName,closingIssuesReferences
デフォルトブランチ宛てのプルリクエストに記載された Closes の行は、closingIssuesReferences に反映されている必要があります。反映されていない場合は、行を修正してください。積み重なったプルリクエストでは、親がマージされて GitHub が対象ブランチを変更するまでリンクは表示されません(issue-tracker の 終了参照が有効になるのはデフォルトブランチへのマージ時のみ を参照してください)。その旨を報告してください。Part of はリンクされません。