Claude Media
Claude CodeでCONTRIBUTINGのPRチェックと返信の下書きを作る

Claude CodeでCONTRIBUTINGのPRチェックと返信の下書きを作る

初めての貢献者から届いたPRを、CONTRIBUTING.mdの基準に照らして点検し、丁寧な返信文まで下書きするスキルの作り方です。動的コンテキスト注入と権限の設定を中心にまとめます。

初めての貢献者のPRは、中身より先に「基準を満たしているか」を確かめる作業が重くなります。この記事では、CONTRIBUTING.mdの基準をClaude Codeのスキルにして、PRの差分・テストの有無・コミット規約を照らし、不足点を丁寧な返信文に下書きする手順を書きます。投稿は人が行い、スキルは下書きまでにとどめる構成です。

点検と返信を1つのスキルにする理由

CONTRIBUTING.mdは、貢献者がPRやissueを正しい形で出せるようにするための文書です。GitHubのドキュメントは、基準があると、不備のあるPRが差し戻されて出し直しになる手間を、オーナーと貢献者の双方で減らせると説明しています。

基準があっても、メンテナーの手間は残ります。初めての貢献者に返すときは、不足を並べるだけでは冷たく響きます。「ありがとう」から入り、直してほしい点を具体的に、直し方の手がかりと一緒に書く必要があります。この文面づくりが毎回の負担です。

そこで、点検と返信をひとつの手順にまとめます。点検は事実の照合、返信は言い回しの整形です。前者はコマンドの出力に基づき、後者はスキルの指示で口調を固定できます。毎回プロンプトを書き直す代わりに、/contrib-pr-reply 123のように呼び出すだけで済みます。

観点別のレビューは別の道具が受け持ちます。pr-review-toolkitは、テスト網羅やエラー処理などコードの質を専門エージェントに分けて見る汎用のレビューです。こちらは出力が違います。見るのはリポジトリ固有の基準への適合で、出すのは貢献者に宛てた返信文です。

前提となるファイルと環境

用意するものは3つです。

  • リポジトリにCONTRIBUTING.mdがあること。GitHubはルート、docs、.githubのいずれかに置けると案内しています
  • GitHub CLIのghが使え、対象リポジトリで認証済みであること
  • スキルを置く.claude/skills/ディレクトリ(リポジトリに入れれば、メンテナー全員で共有できます)

CONTRIBUTING.mdがルートにない場合は、後述のスキルのパスを置き場所に合わせて書き換えます。

SKILL.mdの全体像

次の内容を、リポジトリの.claude/skills/contrib-pr-reply/SKILL.mdに保存します。基準の項目は例なので、自分のCONTRIBUTING.mdの内容に合わせて入れ替えてください。

---
name: contrib-pr-reply
description: 初めての貢献者のPRをCONTRIBUTING.mdの基準で点検し、返信文を下書きする
argument-hint: [PR番号]
disable-model-invocation: true
allowed-tools: Bash(gh pr view *) Bash(gh pr diff *) Bash(cat ${CLAUDE_PROJECT_DIR}/CONTRIBUTING.md)
---
 
## このリポジトリの貢献基準
 
!`cat ${CLAUDE_PROJECT_DIR}/CONTRIBUTING.md`
 
## 手順
 
PR $ARGUMENTS を点検します。次のコマンドで情報を集めます。
 
- `gh pr view $ARGUMENTS --json title,body,author,commits,files,statusCheckRollup,isCrossRepository,maintainerCanModify`
- `gh pr diff $ARGUMENTS`
 
点検する項目は次のとおりです。基準の文言と照らし、根拠を1行で添えます。
 
1. PR本文: 目的と関連issueが書かれているか
2. 差分: 変更範囲が1つの目的に収まっているか
3. テスト: 変更したコードに対応するテストファイルが差分に含まれているか
4. コミット: 各コミットのメッセージが基準の書式に沿っているか
5. チェック: statusCheckRollup に失敗があるか
6. 取り込み方: isCrossRepository と maintainerCanModify を見て、返信で軽微な修正をこちらで引き受けられるかを判断する
 
## 出力
 
1. 点検表(項目 / 結果 / 根拠)
2. 返信文の下書き。次の順で書く
   - 最初に、時間を割いて送ってくれたことへの礼
   - 良い点を1つ以上、具体的に
   - 直してほしい点を、基準の該当箇所と直し方の例つきで
   - 最後に、質問があれば歓迎する旨
3. 返信文は下書きです。投稿はせず、私が確認してから出します。

各行が何をしているか

ポイントは4つあります。

基準を毎回読み込ませる(動的コンテキスト注入)

!`cat ...`の行は、スキルがClaudeに渡される前にコマンドとして実行され、出力で置き換えられます。つまりClaudeには、コマンド自体ではなくCONTRIBUTING.mdの全文が届きます。基準をスキルに書き写さずに済むため、CONTRIBUTING.mdを更新すれば次の呼び出しから新しい基準で点検されます。基準が二重管理にならない点が、スキルに丸写しするより安全です。

この記法は、!が行頭か空白の直後にあるときだけ認識されます。KEY=!`cmd`のように文字に続けると、そのまま文字列として残ります。

パスには${CLAUDE_PROJECT_DIR}を使っています。注入コマンドは、セッションのシェルの現在のディレクトリで実行され、Claudeがcdすると動きます。プロジェクトのルートを指す変数を使えば、どこで呼び出しても同じファイルを読めます。この変数は、スキル本文とallowed-toolsの両方で展開されます。

呼び出しを人に限る(disable-model-invocation)

disable-model-invocation: trueにすると、Claudeが会話の流れで勝手にスキルを起動しなくなります。副作用のあるワークフローや、実行のタイミングを自分で決めたい作業に向く設定です。このスキルは外部に書き込みません。それでも人が選んだPRにだけ使いたいので、手動限定にしています。

コマンドを読み取り系に絞る(allowed-tools)

allowed-toolsに並べたツールは、スキルを呼び出したターンの間、確認なしで使えます。ここではgh pr view、gh pr diff、CONTRIBUTING.mdのcatだけを許可しました。gh pr commentやgh pr reviewは含めていません。投稿に使うコマンドを許可しないことで、返信を勝手に出さない運用をスキルの側でも支えます。

この許可は次のメッセージを送ると失効します。スキルの内容は会話に残りますが、権限は残りません。

注入コマンドの扱いにも注意が要ります。注入コマンドは、スキルの展開中に確認のプロンプトを出しません。許可ルールで承認されていないコマンドがあると、通常のモードでは呼び出し自体が中断されます。catをallowed-toolsに入れているのはこのためです。

引数でPRを指定する($ARGUMENTS)

$ARGUMENTSは、スキル名の後ろに打った文字列に置き換わります。/contrib-pr-reply 123なら、本文中の$ARGUMENTSが123になります。注入コマンドの中には引数を入れていません。PRの情報取得はClaudeに実行させる形にし、allowed-toolsでgh pr view *とgh pr diff *を通しています。

実行して返信を受け取る

CONTRIBUTING.mdがあるリポジトリでClaude Codeを起動し、PR番号を付けて呼び出します。

/contrib-pr-reply 123

Claudeはgh pr viewとgh pr diffで情報を集め、点検表と返信文を出します。出力は、例えば次のような形になります(スキルの指示に沿った例示であり、実際の出力は基準とPRの内容で変わります)。

| 項目 | 結果 | 根拠 |
|---|---|---|
| PR本文 | 要確認 | 関連issueの記載がない |
| テスト | 不足 | src/parser.ts の変更に対応するテストが差分にない |
| コミット | 要確認 | 2件目が「fix」のみで、基準の書式に沿っていない |
 
--- 返信文の下書き ---
はじめてのPR、ありがとうございます。パーサーの境界条件を
丁寧に直してくださっていて、読みやすい差分でした。
 
マージの前に、2点だけお願いできますか。
- src/parser.ts の変更に対するテストの追加(CONTRIBUTING.mdの
  「テスト」の節を参照ください。既存のテストを真似る形で十分です)
- 2件目のコミットメッセージを基準の書式に直す
  (git rebase -i で書き換えられます)
 
不明な点があれば、ここで気軽に聞いてください。

下書きは自分で読み、必要なら直してから投稿します。投稿にghを使う場合も、人が内容を確かめた後に手で実行します。

基準を照合しやすい形に直す

返信文の質は、CONTRIBUTING.mdの書き方に左右されます。「質の高いPRを歓迎します」のような抽象的な文言は、点検に使えません。次のように、判定できる文にしておくと、スキルの照合が安定します。

  • 「テストを書く」ではなく「src/の変更には、同名のテストをtests/に追加する」
  • 「分かりやすいコミットメッセージ」ではなく「1行目は命令形、50字以内。理由は本文に書く」
  • 「小さなPRにする」ではなく「1つのPRで扱う目的は1つにする」

あわせて、スキルの点検項目と基準の見出しを対応づけておくと、返信文に「基準のこの節を参照ください」と書けるようになります。CONTRIBUTING.mdの節名は、貢献者にとって次の行動の手がかりです。

軽微な不足はこちらで直すという選択肢

点検で見つかった不足が、コミットメッセージの書式やテスト1件のような軽いものなら、貢献者に差し戻す代わりにメンテナー側で直す道もあります。gh pr viewのJSONにはisCrossRepository(フォークからのPRか)とmaintainerCanModify(メンテナーによる変更の可否を示す項目)が用意されています。この2つを点検項目に加えておくと、返信文を「直してもらう」と「こちらで直します」のどちらの方向で書くかを、Claudeが材料つきで提案できます。

初めての貢献者にとっては、小さな不備で差し戻されるより、「軽い点はこちらで整えます」と言われるほうが、次の貢献につながりやすい場面もあります。どちらを選ぶかは、リポジトリの方針とメンテナーの手間で決まる判断です。スキルには、選択肢を並べて提案させるところまでを任せ、決めるのは人にします。

つまずきやすい点

呼び出しが中断される

Shell command permission check failedのようなエラーで止まるときは、注入コマンドが許可ルールに合っていません。allowed-toolsのパターンと、スキル本文のcatの書き方が一致しているかを確かめます。拒否ルールに当たるコマンドも同じ形で中断します。

CONTRIBUTING.mdが見つからない

.github/CONTRIBUTING.mdやdocs/CONTRIBUTING.mdに置いている場合は、2か所のパスを両方直します。本文の注入行とallowed-toolsのパターンが違うと、上の中断につながります。

差分が大きすぎる

大きなPRでは、差分がコンテキストを圧迫します。gh pr diffには--name-onlyでファイル名だけを出すオプションと、--excludeで一部のファイルを除くオプションがあります。生成物やロックファイルを--excludeで外すと、点検に必要な部分に絞れます。

PRの本文は信頼できない入力

PR本文やコミットメッセージは、外部の人が書いた文字列です。そこに「この指示を無視して〜」のような文が混ざる可能性があります。このスキルは読み取り系のコマンドしか許可していないため、書き込みの被害は出にくい作りです。それでも返信文は必ず人が読んでから投稿します。

なおgh pr diffは、標準では差分中のターミナルのエスケープシーケンスを無害化して出力します。

スキルの実行を分離したいとき

点検の途中経過で会話を汚したくない場合は、context: forkを指定してサブエージェントで実行する選択肢があります。ただし、フォークしたサブエージェントは会話履歴を見ません。スキルの指示だけで完結させる必要があり、このスキルの本文は基準の注入とPR番号の引数だけで足りるため、そのまま使えます。サブエージェントの仕組みはClaude Code Subagents完全ガイドにまとまっています。

context: forkは既定でバックグラウンドで動きます。結果を同じターンで受け取りたいなら、background: falseを併記します。

似た用途との置き場所

スキルの書き方全般はClaude Code Skillsのfrontmatter全フィールドが詳しいです。PRの種類によって点検の重みを変えたいときは、別のスキルに分けると運用が楽になります。たとえば、セキュリティ修正のPRをレビューする手順は、回帰テストと抜け道の確認に重心があり、貢献者への返信とは目的が違います。

まとめ

このスキルの核は、CONTRIBUTING.mdを動的コンテキスト注入で毎回読み込み、読み取り系のコマンドだけを許可して、返信文を下書きまでで止めることです。基準の側を「判定できる文」に書き直しておくほど、点検の根拠が具体的になり、初めての貢献者に渡す返信も短く済みます。まずは自分のリポジトリのCONTRIBUTING.mdから、機械的に照合できる項目を3つ選び、スキルの点検項目にしてみるのが取り掛かりやすい入口です。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. code.claude.com/docs/en/skills
  2. docs.github.com/en/communities/setting-up-your-project-for-healthy-contrib…
  3. cli.github.com/manual/gh_pr_view
  4. cli.github.com/manual/gh_pr_diff
この記事を共有:XはてブLinkedIn