kasiopeiya

pr-body

今のブランチの PR のタイトルと本文を差し替え、何を・なぜ変えたかと、マージで Issue を閉じる `Closes` 行を書く。push した後に使う。「pr-body」「PR本文を書いて」と指示されたとき。

kasiopeiya 0 Updated 1w ago
GitHub

Install

npx skillscat add kasiopeiya/claude-dev-template/pr-body

Install via the SkillsCat registry.

SKILL.md

/pr-body

Issue番号: $ARGUMENTS

今のブランチの PR のタイトルと本文を差し替える。PR は push を受けて pipeline.yml が作り、本文はコミットメッセージから生成される。このスキルはその PR が現れるのを待って差し替える。gh pr create は使わない(.claude/hooks/ が拒否する)。

引数が無ければ、何もせず Issue 番号が要ることを表示して終了する。

手順

1. 本文を書く

材料は Issue とこのブランチのコミットだけにする。コミットの範囲は、PR の作成先と同じデフォルトブランチ(GitHub のリポジトリ設定)からの差分にする。

デフォルトブランチ名は gh で GitHub から引く(origin/HEAD は clone した時点の値のまま残り、無いリポジトリもあるため使わない)。シェル変数は Bash ツールの呼び出しをまたいで残らないので、1回で実行する。

gh issue view $ARGUMENTS --json title,body
base=$(gh repo view --json defaultBranchRef --jq .defaultBranchRef.name) && git fetch origin "$base" && git log --format='%s%n%n%b' "origin/$base..HEAD"

本文には次を書く。

  • 何を変えたか
  • なぜ変えたか(差分の機械的な要約ではなく、Issue の「この変更が必要な理由」を自分の言葉で)
  • 末尾に Closes #$ARGUMENTS(マージ時に Issue が閉じる)

「なぜ」は動機が読み取れる形で書く。

  • 悪い例:「ログ出力を修正した」(何を変えたかだけで、なぜが無い)
  • 良い例:「◯◯の失敗を再現できなかったためログ出力を追加した。原因特定後に削除する」

本文は Write ツールでリポジトリの外(一時ディレクトリ)にファイルとして書き、そのパスを渡す。長文・記号を --body に直接埋めると、権限判定でコマンドごと拒否されることがある。リポジトリ内に置くと未追跡ファイルが作業ツリーに残る。

2. PR が現れるのを待つ

最大5分待つ(pipeline.yml の PR 作成 job の timeout と同じ)。

for i in $(seq 20); do gh pr view --json number,url && break; sleep 15; done

3. タイトルと本文を差し替える

コミットが複数あると、pipeline.yml はブランチ名をタイトルにする。タイトルは、コミットが1件ならその件名にする。複数なら、変更全体を表す件名をコミットの件名と同じ形(type: 説明 (#$ARGUMENTS))で書く。どれか1件の件名を流用すると、そのコミットの分だけを表すタイトルになる。

gh pr edit --title "<タイトル>" --body-file <本文ファイル>

4. 報告する

差し替えた PR の URL を表示して終了する。

手順2で待っても PR が現れない、または差し替えに失敗したときは、どこで止まったかと本文ファイルのパスを表示して終了する。呼び出し元はこの表示で失敗を知る。