Smart pr
Skill mjcreativelab/mjcreativelab-agent-prompts/skills/smart-pr
Claude Code 用プラグイン集(skills, hooks, rules)
npx -y skills add mjcreativelab/mjcreativelab-agent-prompts --skill smart-prAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
現在のブランチから GitHub Pull Request を作成または更新する。作業内容の自動要約・ラベル付与・関連 Issue 紐づけを行う。 必要に応じてデフォルトブランチを現在のブランチへマージしてから push する(副作用あり)。 「PR 作って」「プルリク作成」「PR 更新して」「/smart-pr」と言ったら起動する。 コミット(smart-commit)やレビュー(smart-review)とは別物。
SKILL.md
14.8 KB, ~5.2k tokens by cl100k_base, as published. Nobody here has run it
Smart PR
現在のブランチから PR を作成、または既存 PR を更新する。
引数の解析
$ARGUMENTS を以下のルールで解析する:
-pがある場合 →-pより後の部分を{プロンプト}として保持する-pがない場合 →{プロンプト}は空{プロンプト}は PR のタイトル・本文・ラベル等に関する追加指示として使う
例: -p ドラフトで作って / -p レビュアー向け補足に移行手順を書いて
プロジェクト規約
本スキルは以下の規約に従う。詳細は references/git-conventions.md を参照(必要時のみ Read)。プロジェクト側の CLAUDE.md / AGENTS.md / README に独自規約があればそちらを優先する。
- デフォルトブランチへの直接 push 禁止。force push もしない。
- PR / Issue 作成時は作成者を自動アサイン(
get_meでログイン名取得 →issue_writeのassigneesに渡す)。 - 既存ラベルのみ付与。新規ラベル作成は提案しない。
issue_writeのlabelsは上書きのため、既存ラベルを取得して結合する。- MCP の
bodyパラメータには実改行を含める(\nリテラルは禁止)。
ツール選択
- GitHub API 操作 → GitHub MCP ツールを優先(承認不要・パラメータ明示)。
- git 操作 → Bash。
git remote get-url originの出力([email protected]:owner/repo.gitまたはhttps://github.com/owner/repo.git)からowner/repoを抽出して MCP の必須パラメータに渡す。.git拡張子は除去する。
MCP ツール名について: 本 SKILL.md では GitHub MCP サーバーが提供する
list_pull_requests/pull_request_read/update_pull_request/create_pull_request/issue_write/get_me/list_issues/search_issuesを short name で記載する。実際の呼び出し時は環境上のフルネーム(例:mcp__plugin_github_github__list_pull_requests等)にマップする。複数 MCP サーバーで名前が衝突する場合はサーバー名を含む完全修飾名を使う。
手順
1. 状態確認
1-a. ローカル状態の取得(Bash 並列)
git remote get-url origin && git branch --show-current && git status --short
1-b. デフォルトブランチの検出
まず git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' を試す。空文字列が返ったら以下のフォールバックを使う:
for name in develop main master; do
git show-ref --verify --quiet "refs/remotes/origin/$name" && echo "$name" && break
done
検出できなければユーザーに確認する。
1-c. MCP 並列呼び出し
list_pull_requests(owner,repo,head: "<owner>:<branch>",state: "open")で既存 PR を検索get_meでアサイン用ログイン名を取得
list_pull_requests レスポンスからは number / title / body / labels のみ保持し、他フィールド(タイムスタンプ・ユーザー詳細等)はコンテキストから破棄する。
1-d. 判定
- デフォルトブランチにいる → 「作業ブランチで実行してください」と案内して終了
- デフォルトブランチと差分なし → 「PR にする変更がありません」で終了
- 未コミット変更あり → ユーザーに通知(
/smart-commitを提案) - PR が存在する → 更新フロー(Step 4-U)へ
- PR が存在しない → 新規作成フロー(Step 4-N)へ
2. デフォルトブランチとの同期確認
git fetch origin
git merge-base --is-ancestor origin/<default-branch> HEAD
含まれている場合はスキップ。含まれていない場合は behind しているので以下を実行する。
2-a. behind 件数の確認とユーザー承認
git rev-list --count HEAD..origin/<default-branch>
「origin/<default-branch> に対して N コミット behind しています。マージしますか?」とユーザーに提示し、承認を得てから git merge origin/<default-branch> を実行する。件数が 0 でも提示する。
2-b. 競合発生時
git merge が非 0 で終了した場合は競合あり。以下のコマンドで一覧を取得し、ファイル名のみをユーザーに提示する(ファイル内容を全 Read しない):
git diff --name-only --diff-filter=U
ユーザーに以下の選択肢を提示する:
- 個別ファイルを指定してもらい、
git diff <file>で該当箇所のみ Read して解決方針を相談 git merge --abortで merge を取り消して中断
ユーザーの承認なしに git add / git commit しない。
3. 未プッシュコミットのプッシュ
git rev-parse --verify origin/<branch> 2>/dev/null
- 存在しない(リモート未追跡) →
git push -u origin <branch> - 存在する → 未プッシュコミットがあれば
git push、なければスキップ
push 後、変更概要を取得:
git log --oneline <default-branch>..HEAD
git diff <default-branch>...HEAD --stat
--stat の合計行数が 1000 を大きく超える場合は、ファイル単位でサマリを作り、各ファイルは必要に応じて部分 Read に留める(diff 全文をコンテキストに乗せない)。
既存 PR 更新フロー
4-U. 差分特定・分析
pull_request_read(owner, repo, pullNumber)で現在の PR を取得し、以下のフィールドのみ保持する:
{
"number": 45,
"title": "...",
"body": "...",
"labels": ["bug"]
}
他フィールド(コミット一覧・コメント・アサイン情報・タイムスタンプ等)はコンテキストから破棄する。git log <default-branch>..HEAD の出力と PR の commits との差分から、PR に未反映の新規コミットを特定する。
新規コミットがなければ「更新する変更がありません」で終了。
5-U. PR 本文の更新
既存本文を 構造解析してから新規変更を追記する:
- 既存本文の Markdown 見出し(
## 概要/## 変更内容/## レビュアー向け補足/## 関連 Issue等)を正規表現で抽出する。見出しレベルが##でない場合は本文の表記に合わせる。 - 新規コミット種別と引数
{プロンプト}を以下のセクションへ振り分ける:
| 内容 | 振り分け先(簡易構成 / 標準構成) |
|---|---|
| 機能追加・修正・テスト等のコード変更 | ## 変更内容 / ## 実装内容(末尾追記。標準構成で表・図があれば行・分岐の追記も検討) |
引数 {プロンプト} の指示内容 | {プロンプト} で指定されたセクション、未指定なら ## レビュアー向け補足 / ## 備考 |
| 設計判断・影響範囲・既知の制約 | ## レビュアー向け補足 / ## 設計判断(要点)(追記) |
| 新規 Issue 紐づけ | ## 関連 Issue(追記) |
| 方向性が大きく変わる場合のみ | ## 概要(提案 → 承認後更新) |
- 既存記述は変更しない(追記のみ)。ラベルも追加のみ・削除しない。タイトルは原則変更しない。
6-U. ユーザー確認 → 更新実行
更新後の本文・追加ラベルをユーザーに提示し、承認を得る。
update_pull_request(owner, repo, pullNumber, body)で本文更新。body パラメータは実改行で渡す(\n リテラル禁止 — プロジェクト規約参照)。
ラベル追加が必要な場合は issue_write の labels に既存ラベル + 追加ラベルを結合した配列を渡す(上書きされるため)。
最後に PR URL を表示。
新規 PR 作成フロー
4-N. 作業内容の分析
git log --oneline <default-branch>..HEAD で全コミットを取得し、git diff <default-branch>...HEAD --stat で変更規模を把握する。--stat 合計が大きい場合はファイル単位サマリに留め、Claude が必要と判断したファイルのみ git diff <default-branch>...HEAD -- <file> で個別 Read する。変更概要・影響コンポーネント・関連 Issue を把握する。
5-N. 関連 Issue 探索
優先順位:
- ブランチ名から
issue-(\d+)正規表現で抽出(例:feature/issue-42-...→42) -
- で抽出できなければコミットメッセージ本文の
#NN表記をgit logで検索
- で抽出できなければコミットメッセージ本文の
-
- でも見つからなければ
search_issuesで候補を探し、ユーザーに紐づけるか確認
- でも見つからなければ
Closes #XX(完全解決時。自動クローズ)または Refs #XX(参照のみ・部分対応)を本文に記載する。地の文で close / fix / resolve 系の語を Issue 番号に直接続けない(意図しない auto-close を避ける。詳細は git-conventions.md)。
6-N. ラベル選定
リポジトリの既存ラベルから変更種別に合致するものを選ぶ。既存ラベル一覧の取得手順:
list_issues(owner,repo,state: "all",perPage: 30)で取得した結果のlabelsフィールドからユニーク化する(MCP にlist_labels系がないため)- プロジェクト側に独自のラベル運用ルール(CLAUDE.md・AGENTS.md・README 等)があればそれを優先する
汎用的な対応指針:
| 変更種別 | 推奨ラベル候補(リポジトリに存在するものを使う) |
|---|---|
| 新機能・機能追加 | feature, enhancement |
| バグ修正 | bug, fix |
| ドキュメント | documentation, docs |
| ビルド・CI・依存 | infra, chore, ci |
| リファクタリング | refactor |
| テスト | test |
リポジトリに該当ラベルが存在しない場合はラベル無しでも可。新規ラベル作成は提案しない。
7-N. PR タイトル・本文作成
タイトル: <type>(<scope>): <日本語説明> — 70文字以内(<type> は smart-commit と同じ feat/fix/docs/refactor/chore/test/perf/style/build/ci)
タイトルの例:
| 変更概要 | タイトル |
|---|---|
| ユーザー検索 API を追加 | feat(api): ユーザー検索エンドポイントを追加 |
| バリデーションの不具合を修正 | fix(validation): null 入力時のバリデーション失敗を修正 |
| ログ整形ロジックを抽出 | refactor(logger): 整形ロジックを util に抽出 |
| README にセットアップ手順を追加 | docs(readme): ローカル開発のセットアップ手順を追加 |
本文: assets/pr-template.md を使用。まず変更の性質から構成を選ぶ:
| 構成 | 対象 | 内容 |
|---|---|---|
| 標準構成(既定) | 機能実装・複数ファイルにまたがる変更・設計判断を含む変更 | 図・表で実装内容を可視化する: クラス / ファイル構成表、主要フローの mermaid シーケンス図(分岐は alt/else)、構成図(mermaid flowchart・任意)、設計判断表(採用した方針 / 未対応 follow-up)、受入条件 ↔ 検証の対応表 |
| 簡易構成 | chore / docs / typo / 依存更新・少量の変更など、レビュワー向けに細かい説明が不要な内容 | 概要・変更内容の箇条書きのみ。図・表などの要素は不要 |
- 判断に迷う場合は「レビュワーがこの説明なしで diff を読めるか」で決める(読めるなら簡易構成でよい)
- 標準構成でも、各図表は説明価値がある場合のみ使う(埋めるための図表を作らない)
- プロジェクトに PULL_REQUEST_TEMPLATE(
.github/配下)がある場合はそのセクション構成(レビューポリシー等の独自セクション含む)を骨格にし、標準構成の図表を対応するセクションへ埋め込む
同期ノート: assets/pr-template.md と上記の構成選択ルールは、
smart-issue-resolveの「収束後のコミット・PR 作成 → PR タイトル・本文」へ複製している(スキル間ファイル参照ができないため意図的に二重化)。どちらかを変更したらもう一方も同期する。
8-N. ユーザー確認 → 作成実行
タイトル・本文・ラベル・紐づけ Issue・ベースブランチを表示して承認を得る。
承認後:
create_pull_request(owner,repo,title,body,head,base)で作成。bodyは実改行で渡す(\nリテラル禁止)。- 戻り値の
numberを控える。 issue_write(owner,repo,issueNumber: <PR番号>,assignees: [<get_me で取得したログイン>],labels: <選定ラベル配列>)でアサインとラベルを設定。
最後に PR URL を表示。
- ドラフト PR はユーザーの明示的指示がある場合のみ(
draft: trueをcreate_pull_requestに渡す)。 - GitHub Project への自動追加はしない。
コンテキスト管理
長い会話でコンテキスト圧縮が発生した場合、以下を再取得する:
git remote get-url origin→ owner/repogit branch --show-current→ ブランチ名- デフォルトブランチ名(Step 1-b の手順)
ただし本スキルは新規セッションでの実行を推奨しており(README 参照)、通常は圧縮が発生しない。
注意事項
- MCP ツールの
bodyパラメータには実改行を含める(\nリテラルは GitHub 上で 1 行表示になる)。Step 6-U / Step 8-N から本注意を再参照すること。 --no-verifyは使わない。- force push はしない。
- ドラフト PR はユーザーの明示的指示がある場合のみ。
What ships with it: 3 files
8.0 KB alongside SKILL.md
assets/
- pr-template.md3.3 KB
references/
- git-conventions.md3.4 KB
- README.md1.2 KB