mcpField
F
forge-address-pr-feedback

forge-address-pr-feedback

github.com/mgratzerテスト・品質8354 回インストール3 日前に更新
リポジトリ

forge-address-pr-feedback について

Pull Request の未解決レビューコメントを体系的に処理する開発スキルです。各スレッドを分類し、必要なコード変更とチェックを行って返信します。人の判断が必要な議論は未解決のまま残します。

主な機能

  1. 01GraphQL による未解決スレッドの取得
  2. 02レビュー意見の分類
  3. 03スレッドごとの対応とテスト
  4. 04適切な返信と解決処理
  5. 05延期事項の Issue 化

活用シーン

  1. 01PR のコード修正依頼への対応
  2. 02レビュアーの質問や議論への返信
  3. 03延期するフィードバックの Issue 管理
  4. 04無人モードでのレビュー対応

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mgratzer/forge --skill forge-address-pr-feedback

インストール後、Claude Code で/forge-address-pr-feedbackを入力して読み込まれたか確認します。

詳細

PR フィードバックへの対応

プルリクエストの未解決のレビューコメントに体系的に対応します。

入力

PR 番号または URL($ARGUMENTS。省略した場合は現在のブランチから自動検出します)。優先順位の指針を追加する場合は、任意で -- <additional context> を指定します。

無人モード: --unattended を指定した場合、質問は行いません。代わりに、ステップ 2~3 で処理内容を説明します。

プロセス

ステップ 1:未対応のスレッドを取得する

GraphQL を使用します。REST API ではレビュー スレッドの isResolved ステータスを取得できません。最後のコメントがこちらからのものであるスレッドはレビュアーの返信待ちであり、どのモードでもここでは除外されます。forge-guard から呼び出された場合は、$PR と $ME を再取得せず、そのまま使用します。

# Derive owner/repo from the checkout; PR_ARG is the number or URL from $ARGUMENTS, empty when omitted
PR_ARG=""
OWNER=$(gh repo view --json owner --jq .owner.login)
REPO=$(gh repo view --json name --jq .name)
PR_NUMBER=$(gh pr view $PR_ARG --json number --jq .number)   # empty PR_ARG → PR for the current branch
ME=$(gh api user --jq .login)

gh api graphql -F owner="$OWNER" -F repo="$REPO" -F pr="$PR_NUMBER" -f query='
query($owner: String!, $repo: String!, $pr: Int!) {
  repository(owner: $owner, name: $repo) {
    pullRequest(number: $pr) {
      reviewThreads(first: 100) {
        nodes {
          isResolved
          isOutdated
          path
          line
          id
          comments(last: 20) {
            nodes { id body author { login } url }
          }
        }
      }
    }
  }
}' --jq ".data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false and .comments.nodes[-1].author.login != \"$ME\")"
ステップ 2:各スレッドを処理する

対応が必要なスレッドごとに、ファイルと周辺のコンテキストを確認し、次のように分類します。

  • 対応可能 — コードの変更が必要です
  • 質問 — 説明を返信します
  • 議論 — 変更によってコードが改善するかを判断します
  • 対応済み — スレッドは未解決ですが、変更は行われています
  • 対応しない — 現在のアプローチが望ましい状態です
  • 保留 — 妥当な指摘ですが、対象範囲外です。保留項目として新しい Issue を作成します

議論のスレッドについて、判断がユーザーに委ねられる場合は、決めつけずに AskUserQuestion で確認します。無人モードの場合: コードまたはプロジェクトの規約で判断できるときは、その根拠を説明して決定します。どちらでも判断できない場合は、「判断が必要です: と 。<それぞれのコスト>」と返信し、スレッドを未解決のままにして、要約の人間の判断が必要な項目に記載します。決して解決済みにしたり、Issue に記載して隠したりしないでください。

ステップ 3:各スレッドに個別に対応して返信する

各スレッドに対応してから次へ進み、すべての返信で解決したコミットを参照できるようにします。

各スレッドについて:

  1. 変更を行う(対応可能な場合)
  2. lint/format/checks を実行する
  3. コミットする:git commit -m "fix: address PR feedback, <brief description>"
  4. 返信し、結果が確定した場合は解決する — 対応可能、対応済み、または保留の場合に行います。質問、議論、対応しない場合は、レビュアーが判断の根拠を確認できるよう、未解決のままにします。1 回の変更で両方を行います(未解決のままにするスレッドでは resolveReviewThread を省略します)。返信は GraphQL の変数として標準入力で渡してください。クエリに直接埋め込むと、引用符や改行で問題が起きます。
gh api graphql -f threadId="<THREAD_ID>" -F body=@- -f query='
mutation($threadId: ID!, $body: String!) {
  addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {
    comment { id }
  }
  resolveReviewThread(input: {threadId: $threadId}) {
    thread { isResolved }
  }
}' <<'REPLY_EOF'
<response>
REPLY_EOF

分類ごとの返信形式:

  • 対応可能:「<sha> で修正しました。<変更内容>」
  • 質問:「<コード参照を含む回答>」
  • 議論:「<判断とその根拠>」
  • 対応済み:「<sha> で対応済みです。」
  • 対応しない:「<理由>のため、現在のアプローチを維持します。」
  • 保留:「追跡用の Issue # を作成しました。」
ステップ 4:保留項目の Issue を作成する

各保留項目について、プロジェクトの Issue トラッカーに Issue を作成します(issue-operations を参照)。PR のコンテキストとして、レビュアーのコメント、PR 番号、提案する解決策を含めます。

ステップ 5:プッシュして要約する
git push

報告する内容:対応したスレッド、作成したコミット、作成した保留項目、判断が必要なスレッド。

ガイドライン

  • 検出には GraphQL を使用 — REST API では解決ステータスを確認できません
  • 対応して返信してから次へ進む — まとめて処理しないでください
  • 具体的に記述する — コミット、行番号、コードを参照してください
  • 変更をテストする — コミット前にチェックを実行してください

関連スキル

フィードバックに大幅な変更が必要な場合: レビューを再依頼する前に、forge-reflect を使用してもう一度セルフレビューを行います。 呼び出し元: forge-guard はフィードバックの各ラウンドで、このプロセスを無人モードで実行します。

使用例

/forge-address-pr-feedback 123
/forge-address-pr-feedback 123 -- prioritize security comments
/forge-address-pr-feedback --unattended 123
/forge-address-pr-feedback

コメント