create-pr
gh コマンドで GitHub の Pull Request を作成する。未コミット変更のコミット、release/* または master 上での新規ブランチ作成(命名規則つき)、過去のコミット履歴を辿ったマージ先の自動判定、リポジトリの PR テンプレート追従、挙動の変化を中心にした PR description 生成を行う。「PRを作って」「プルリクを出して」等の依頼で利用する。
Install
mkdir -p .claude/skills/create-pr-luna-rab && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16506" && unzip -o skill.zip -d .claude/skills/create-pr-luna-rab && rm skill.zipInstalls to .claude/skills/create-pr-luna-rab
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
gh コマンドで GitHub の Pull Request を作成する。未コミット変更のコミット、release/* または master 上での新規ブランチ作成(命名規則つき)、過去のコミット履歴を辿ったマージ先の自動判定、リポジトリの PR テンプレート追従、挙動の変化を中心にした PR description 生成を行う。「PRを作って」「プルリクを出して」等の依頼で利用する。About this skill
Create PR スキル
gh コマンドを使って Pull Request を作成する。コードの差分そのものではなく 挙動の変化 を中心に説明する PR を作る。
各ステップは順番に実行する。判断に迷う箇所はユーザーに確認し、勝手に推測で埋めない。
前提
ghCLI がインストール済みで認証済み (gh auth statusで確認できる)- カレントディレクトリが対象の git リポジトリ
手順
1. 現在の状態を把握する
以下を確認する。
git status --porcelain # 未コミット変更の有無
git branch --show-current # 現在のブランチ名
git log --oneline -20 # 直近の履歴
2. 未コミット変更の処理
git status --porcelain に出力がある(=未コミット変更がある)場合:
- 現在のブランチが
release/*またはmaster(およびmain)の場合は、コミット前に新しいブランチを作成する。 後述の「ブランチ命名ルール」に従う。新しいブランチ名を決める際、チケット番号が不明ならステップ3に進む前にユーザーに確認する(推測しない)。 - 変更内容を確認した上でコミットする。コミットメッセージは変更の意図がわかるものにする。
現在のブランチが release/* / master / main 以外なら、ブランチはそのままでコミットだけ行う。
未コミット変更が無い場合はこのステップをスキップする。
3. マージ先(base ブランチ)の判定
以下の順で決定する。
-
コミット履歴を遡って
release/*またはmasterを探す。 現在の HEAD から到達可能なコミットのうち、release/*またはmaster(main)ブランチが指しているものを探し、直近(最も近い祖先)のものを base にする。# HEAD の祖先に含まれる release/* と master/main を、HEAD から近い順に列挙する git for-each-ref --format='%(refname:short)' refs/heads/ refs/remotes/origin/ \ | grep -E '(^|/)(release/|master$|main$)' \ | while read ref; do if git merge-base --is-ancestor "$ref" HEAD 2>/dev/null; then # HEAD から ref までの距離(近いほど小さい) dist=$(git rev-list --count "$ref"..HEAD 2>/dev/null) echo "$dist $ref" fi done | sort -n上記で複数出た場合は
distが最小(最も近い)ものを採用する。1つに定まればそれを base にする。 -
1で定まらない場合は、ユーザーに選んでもらう。 候補となる
release/*およびmaster/mainを列挙し、どれをマージ先にするかユーザーに尋ねる。git for-each-ref --format='%(refname:short)' refs/heads/ refs/remotes/origin/ \ | grep -E '(^|/)(release/|master$|main$)' | sort -u
4. PR テンプレートの確認
リポジトリに PR テンプレートがあればそれに従って本文を組み立てる。以下を確認する。
ls .github/PULL_REQUEST_TEMPLATE.md \
.github/pull_request_template.md \
.github/PULL_REQUEST_TEMPLATE/ \
docs/PULL_REQUEST_TEMPLATE.md \
PULL_REQUEST_TEMPLATE.md 2>/dev/null
テンプレートが存在する場合は、その見出し・セクション構成を維持したまま中身を埋める。テンプレートが無い場合は次節の標準構成で本文を作る。
5. PR description の作成
差分を確認してから本文を書く。
git diff <base>...HEAD # base はステップ3で決めたブランチ
git log <base>..HEAD --oneline
description の方針:
- コードの変更点を逐一説明しない。差分を見ればわかる。挙動の変化 を中心に書く。
- コードについて触れるのは、理解が難しい箇所・注意を払うべきと判断した箇所に限る。
- チェック項目を作る場合は、実際の挙動から観測できる変化 を具体的に書く。コード内部の状態(変数・フラグ等)は通常観測できないので書かない。
- 「正しく」「正常に」など解釈に余地のある言葉は使わない。何がどう変わるかを具体的な事象で書く。
- チケット番号は推測しない。 ブランチ名や明示された情報から判別できない場合はユーザーに尋ねる。
テンプレートが無い場合の標準構成:
## 概要
<このPRで何が変わるか。挙動の変化を1〜3行で>
## 変更による挙動の変化
- <操作Xをすると、これまではAだったが、これからはBになる>
- <画面/コマンド/APIレスポンスなどで観測できる差分を列挙>
## 確認項目
- [ ] <操作手順> を行うと <観測できる結果> になる
- [ ] <別の操作> を行うと <観測できる結果> になる
## 補足
<理解が難しい箇所・注意点があれば。なければ省略>
6. PR の作成または更新
まずブランチを push する。
git push -u origin "$(git branch --show-current)"
次に、現在のブランチに紐づく PR が既に存在するかを確認する。
gh pr view --json number,url,baseRefName,title 2>/dev/null
-
既存 PR がある場合: 新規作成せず、その PR を更新する。本文・タイトルはステップ4・5で作り直したものに差し替える。base を変更する必要があれば
--baseも付ける。gh pr edit \ --title "<タイトル>" \ --body "<上で作成した本文>" # マージ先が変わる場合のみ: --base "<base>"既存の本文をテンプレート構成で上書きしてよいか不安が残る場合(手動で書き加えられた節がある等)は、上書き前にユーザーへ確認する。
-
既存 PR が無い場合: 新規に作成する。
gh pr create \ --base "<base>" \ --title "<タイトル>" \ --body "<上で作成した本文>"
作成・更新後、gh pr view --web の URL を含め、対象の PR をユーザーに伝える。
ブランチ命名ルール
新しいブランチを作るときは以下に従う。チケットが存在する場合は チケット名を末尾につける(-- 区切り)。
| 種別 | プレフィックス | 例 |
|---|---|---|
| リリース | release/ | release/v1.23.0 |
| 機能追加 | feature/ | feature/add-user-roles--DVSPBASE-12345 |
| 修正 | fix/ | fix/role-permission-inconsistency--DVSPBASE-23456 |
| 緊急修正 | hotfix/ | hotfix/role-permission-inconsistency |
- 説明部分はケバブケース(小文字・ハイフン区切り)で、変更内容が伝わる短い英語にする。
- チケット番号が不明な場合は 推測せず ユーザーに確認する。確認の結果チケットが無いなら末尾のチケット名は省略する。
やらない
- チケット番号・チケット名の推測(不明ならユーザーに尋ねる)
- マージ先の推測(履歴から1つに定まらなければユーザーに選んでもらう)
- コードの差分を逐一なぞる説明(挙動の変化に集約する)
- 「正しく動く」「正常に処理される」等、観測できない・解釈に幅のある表現
- コード内部状態をチェック項目にすること(観測できる挙動だけを項目にする)