rpc-to-pr
Connect RPC をローカルで叩き、curl コマンドとレスポンスを現在ブランチの PR ディスクリプション末尾に追記する。動作確認エビデンスを PR に残したい時に使う。
SKILL.md.claude/skills/rpc-to-pr/SKILL.md
GitHubConnect RPC 動作確認 → PR 追記
概要
ローカルで Connect RPC エンドポイントを curl で叩き、結果(curl コマンド + レスポンス JSON)を現在ブランチに紐づく PR の body 末尾に追記するスキル。
RPC を叩くだけで PR への記録が要らないなら /local-rpc-test を使う。
そちらはリポジトリごとの接続設定を持ち、トークンも自動発行される。
前提
- 現在ブランチが GitHub にプッシュ済みで、紐づく PR が存在すること
ghCLI が認証済みであること- proto ファイルがプロジェクト内にあること
実行手順
1. proto ファイルの検索とメソッド選択
.proto を Glob 検索(**/*.proto)し、package 名・service 定義・rpc メソッド・リクエスト型のフィールド構造を抽出する。
引数でメソッドが指定されていればそれを使い、無ければ一覧を出してユーザーに選んでもらう。
2. 接続先の決定
デフォルトは http://localhost:<port> で、ポートはプロジェクトの設定(compose, README, cmd/)から推定。引数で指定があればそれを使う。
Note: 内部運用 RPC など host にポートマッピングされていないケースもある。その場合は docker exec <container> curl ... パターンで叩く必要があるため、ホスト直叩きで接続拒否されたら docker exec も試す。プロジェクト固有のアクセス方法は memory を参照。
3. トークンの取得
- 環境変数
RPC_TOKENがあればそれを使う(curl 内で$RPC_TOKENとして参照) - なければユーザーに JWT トークンの入力を求める
- 認証不要のエンドポイント(内部 RPC 等)はスキップ
- トークンをファイルに書かない。echo / cat で出さない。
4. リクエストボディの構築
proto のメッセージ定義からフィールドを抽出し、JSON を提示。引数で '{"key":"value"}' 形式があればそれを使う。不足はユーザーに聞く。
5. curl の実行
curl -s --location 'HOST/PACKAGE.SERVICE/METHOD' \
--header 'Content-Type: application/json' \
--header "Authorization: $RPC_TOKEN" \
--data 'REQUEST_BODY'
レスポンスを jq で整形して保存(実行はするが、トークンは表に出さない)。レスポンスサイズが大きい場合は次のステップで方針を確認。
6. レスポンスサイズと内容の確認
レスポンスが大きい場合(数十件超 / 数 KB 超)は全件貼らない:
- 件数や主要フィールドのバリエーションを集計してユーザーに提示
- 「全件 / 各バリエーション 1 件ずつの抜粋 / 単一サンプルのみ」のいずれかを選んでもらう
- 個人情報(個人の氏名・email・電話番号等)が含まれる場合はマスク方針を確認(学校名・会社名などの組織名や ID は実データのまま貼ってよい)
7. 現在ブランチの PR を検出
BRANCH=$(git branch --show-current)
gh pr list --head "$BRANCH" --json number,url,title --limit 5
- 0 件: 「現在ブランチ
$BRANCHに紐づく PR が見つかりません。PR 番号を指定してください」とユーザーに確認 - 1 件: そのまま採用、番号を表示して確認
- 複数件: 一覧表示して選択させる
8. 既存 body の取得
gh pr view <number> --json body --jq .body > /tmp/pr-body.md
9. body 末尾に追記して更新
追記フォーマット(Authorization ヘッダのトークンは <TOKEN> でマスク):
## RPC 動作確認
```bash
curl -s --location 'HOST/PACKAGE.SERVICE/METHOD' \
--header 'Content-Type: application/json' \
--header 'Authorization: <TOKEN>' \
--data 'REQUEST_BODY'
```
<details>
<summary>レスポンス</summary>
```json
{
...
}
```
</details>
更新:
gh pr edit <number> --body-file /tmp/pr-body-updated.md
更新後、PR URL を表示する。
10. 複数メソッドを連続で確認する場合
2 回目以降は 追記方式(既存セクションは消さずに ## RPC 動作確認 (2) のように連番を振る)。複数 RPC を 1 PR で確認するケースを想定。
引数の形式
/rpc-to-pr → 対話的に選択
/rpc-to-pr SomeMethod → メソッド指定
/rpc-to-pr SomeMethod '{"foo":"bar"}' → メソッド + ボディ
/rpc-to-pr --pr 123 SomeMethod → PR 番号を明示
注意事項
- トークン漏洩防止: PR body にトークン実値が混入しないこと。
Authorization: <TOKEN>で必ずマスク。レスポンス JSON にトークン相当のフィールド(access_token 等)が含まれる場合もマスクするか、ユーザーに確認する - 個人情報マスク: 学校名・会社名などの組織名や ID は実データのまま貼る(証跡価値を保つ)。個人を特定できる情報(氏名・email・電話番号等)が含まれる場合のみ、一部マスクは半端なので対象フィールドを一括でダミー化する
gh pr editは body 全置換なので、必ずgh pr view --json bodyで取得した既存 body の末尾に追記する形にすること- 既に同じセクションが末尾にある場合(再実行など)は連番化(
(2),(3)...)して残す - PR が draft かどうかに関係なく動作する
- プロジェクト固有のアクセス方法(host 非公開 / docker exec / 認証バイパス等)は memory やプロジェクトの CLAUDE.md を参照