mcpField
G
github-pr-review-workflow

github-pr-review-workflow

github.com/uwe-schwarzテスト・品質53 回インストール
リポジトリ

github-pr-review-workflow について

GitHub のプルリクエストレビューを処理する開発者向けのワークフロースキルです。gh-pr-review 拡張機能を使い、指摘の検証、修正とテスト、スレッドへの返信・解決までを扱います。

主な機能

  1. 01PR 情報の取得とレビュー一覧表示
  2. 02レビュー指摘の分析と妥当性確認
  3. 03修正の実装とチェックの実行
  4. 04返信、待機、スレッドの解決

活用シーン

  1. 01PR の未対応コメントを処理
  2. 02修正後のテスト、型、lint の確認
  3. 03未採用の提案理由を説明してレビューを継続

インストール

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

$npx skills add https://github.com/uwe-schwarz/skills --skill github-pr-review-workflow

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

詳細

GitHub PR レビューワークフロー

agynio/gh-pr-review の gh-pr-review エクステンションを使用して、GitHub のプルリクエストをレビューし、フィードバックに対応し、スレッドを解決するための一連のワークフローです。

gh-pr-review のドキュメント: https://github.com/agynio/gh-pr-review


インストール

gh-pr-review エクステンションをインストールします(まだインストールされていない場合):

gh extension install agynio/gh-pr-review

インストールを確認します:

gh pr-review --help

ワークフローの概要

PR Review Request
  ├─ Get PR number/repo context
  ├─ List all review threads
  ├─ Analyze feedback and comments
  ├─ Validate whether each comment applies and explain decisions
  ├─ Implement fixes in code
  ├─ Run tests (unit + lint + typecheck)
  ├─ Reply to all open review threads with explanations
  ├─ Wait up to 5 minutes for follow-up
  ├─ Resolve review threads (or address follow-ups)
  └─ Commit and push changes

手順

1. PR のコンテキストを取得する

現在の PR の詳細を取得します:

# Get PR number
gh pr view --json number

# Get PR title and status
gh pr view --json title,author,state,reviews

# Get repository info (for gh pr-review)
git remote get-url origin

出力: PR 番号(例:<PR_NUMBER>)とリポジトリ(例:<OWNER/REPO>)


2. レビュースレッドを一覧表示する

すべてのレビュースレッド(対応中および古くなったもの)を一覧表示します:

# From PR root directory
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>

# Example:
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>

レスポンス形式:

[
  {
    "threadId": "<THREAD_ID>",
    "isResolved": false,
    "updatedAt": "2026-01-17T22:48:36Z",
    "path": "path/to/file.ts",
    "line": 42,
    "isOutdated": false
  }
]

主なフィールド:

  • threadId:解決または返信に使用する GraphQL ノード ID
  • isResolved:現在のステータス
  • isOutdated:コメント以降にコードが変更されたかどうか
  • path + line:ファイルの場所

すべてのレビュースレッドが解決済みであるか、スレッドが存在しない場合は、通常のコメントを検索して分析します:

gh pr view <PR_NUMBER> --comments --json author,comments,reviews

3. フィードバックを読み、分析する

GitHub API 経由でレビューコメントを取得します:

# Get all review comments for PR
gh api repos/<OWNER>/<REPO>/pulls/<PR_NUMBER>/comments

# With jq for cleaner output
gh api repos/<OWNER>/<REPO>/pulls/<PR_NUMBER>/comments \
  --jq '.[] | {id,body,author,created_at,line,path}'

指摘された特定のファイルを読みます:

# Read the file context to understand feedback
cat <path>
# or use Read tool

フィードバックを分類します:

  • 優先度:高:セキュリティの問題、バグ、破壊的変更
  • 優先度:中:コード品質、保守性、テストカバレッジ
  • 優先度:低:スタイル、ドキュメント、あると望ましい改善

コードを変更する前に、適用可能かどうかを確認します(必須):

  • 各コメントが正確で、現在のコードに関連していることを確認します。
  • 提案が誤っている、古くなっている、またはこのコードベースに適さない場合は、実装しなかった理由を詳しく説明して返信します。
  • 時間がかかるという理由だけで変更を省略しないでください。実装するか、実施すべきでない理由を明確に説明してください。

4. 修正を実装する

レビューで指摘されたファイルを編集します:

# Use Edit tool or bash
edit <file_path> <oldString> <newString>

リポジトリの規約に従います:

  • 類似ファイルにある既存のパターンを確認します
  • AGENTS.md のガイドラインに従います
  • コードスタイルの一貫性を保ちます
  • 新しいロジックに対するテストを追加または更新します

5. 変更を検証する(重要)

返信する前に必ずテストを実行します:

# Run project tests
bun run test

# Or specific test suites
bun run test:unit
bun run test:unit:watch
bun run test:e2e

型チェックを実行します:

bun run typecheck
# or
tsc --noEmit

リンティングを実行します:

bun run lint
# or
eslint

すべて成功したことを確認します:

  • ✓ TypeScript エラーがない
  • ✓ ESLint の警告やエラーがない
  • ✓ すべてのユニットテストが成功する
  • ✓ E2E テストが成功する(該当する場合)

6. 変更をコミットしてプッシュする

変更をステージングしてコミットします:

# Check status
git status

# Stage modified files
git add <files>

# Commit with clear message
git commit -m "<type>(<scope>): <description>

# Example:
git commit -m "refactor(emails): centralize from name logic and improve sanitization

- Extract RESEND_FROM_NAME constant to lib/emails/from-address.ts
- Replace duplicated logic in lib/auth.ts and app/actions/contact.ts
- Improve formatFromAddress sanitization (RFC 5322 chars)
- Add test cases for additional sanitization patterns"

リモートにプッシュします:

git push

作業ツリーを確認します:

git status
# Should show: "nothing to commit, working tree clean"

7. レビュースレッドに返信する

修正内容を説明して返信します:

gh pr-review comments reply \
  --pr <PR_NUMBER> \
  --repo <OWNER/REPO> \
  --thread-id <THREAD_ID> \
  --body "<your explanation>"

返信のベストプラクティス:

  • フィードバックに謝意を示します
  • 変更内容を説明します
  • 該当する場合は、特定のコミットを参照します
  • 簡潔かつ明確にします
  • コードスニペットにはコードフェンスを使用します

返信例:

gh pr-review comments reply \
  --pr <PR_NUMBER> \
  --repo <OWNER/REPO> \
  --thread-id <THREAD_ID> \
  --body "$(cat <<'EOF'
@reviewer Thanks for the feedback! I've addressed your suggestions:

1. Applied the requested refactor in the relevant module
2. Removed duplicated logic in the affected call sites
3. Improved sanitization to match the project’s expectations
4. Added/updated tests for the new behavior

Changes committed in abc1234, all tests pass.
EOF
)"

注意: 複数行の本文には heredoc を使用して、シェルのエスケープに関する問題を避けてください。 注意: 変更をプッシュした後、返信は必ず @reviewer から始めてください(例:@gemini-code-assist ... や @greptile …)。レビュアーが複数いる場合があるため、どのレビュアーのコメントなのか、対象のコメントを必ず確認してください。

通常のコメントでレビューではなかった場合(手順 2 を参照)、以下を使って返信できます:

gh pr comment <PR_NUMBER> --body "$(cat <<'EOF'
@reviewer … <same as above>
EOF
)"

適切であれば、コメントにリアクションするだけでもかまいません。

まず、未解決のすべてのスレッドに返信します:

  1. 未解決のすべてのコメントに対し、実施した内容または実施しなかった理由を返信します。
  2. すべての返信を投稿してから、待機/解決の段階に進みます。

8. フォローアップを待ち、スレッドを解決する

修正を実装してコミットをプッシュし、未解決のコメントすべてに返信したら、フォローアップを最大5分間待ちます。

# Wait for a minute for reviewer response
sleep 60

# Re-check for new replies or new threads
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>

この手順を最大5回行い、最大5分間待ちます。

フォローアップのヒントがある場合は、それに対応して(手順3~7)、その後に解決します。

確認があった場合は、スレッドを解決します。

gh pr-review threads resolve \
  --pr <PR_NUMBER> \
  --repo <OWNER/REPO> \
  --thread-id <THREAD_ID>

返信:

{
  "thread_node_id": "PRRT_kwDOQkQlKs5p24lu",
  "is_resolved": true
}

複数のスレッドをまとめて解決する:

# Resolve outdated threads first
gh pr-review threads resolve --pr <PR_NUMBER> --repo <OWNER/REPO> --thread-id <THREAD_ID_OUTDATED_1>
gh pr-review threads resolve --pr <PR_NUMBER> --repo <OWNER/REPO> --thread-id <THREAD_ID_OUTDATED_2>

# Then resolve active threads after replying
gh pr-review threads resolve --pr <PR_NUMBER> --repo <OWNER/REPO> --thread-id <THREAD_ID_ACTIVE>

方針:

  1. 古くなったスレッド(isOutdated: true)を解決します。返信は不要です
  2. 対応中のスレッドに、修正内容(または変更しない理由)を説明して返信します
  3. 返信を最大5分間待ちます
  4. 確認があった場合、または返信がない場合は、対応中のスレッドを解決します

9. すべてのスレッドが解決済みであることを確認する

最終確認:

gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>

期待される出力: すべてのスレッドでisResolved: trueと表示されます


ワークフローの完全な例

# 1. Get PR context
gh pr view --json number
git remote get-url origin

# 2. List review threads
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>

# 3. Read comments and files
gh api repos/<OWNER>/<REPO>/pulls/<PR_NUMBER>/comments --jq '.[] | {id,body,path,line}'
cat path/to/file.ts

# 4. Implement fixes
edit path/to/file.ts <oldString> <newString>

# 5. Run tests
bun run test:unit -- tests/path/to/file.test.ts
bun run typecheck
bun run lint

# 6. Commit and push
git add lib/emails/from-address.ts
git commit -m "fix: address PR review feedback"
git push

# 7. Reply to threads
gh pr-review comments reply --pr <PR_NUMBER> --repo <OWNER/REPO> \
  --thread-id <THREAD_ID> --body "$(cat <<'EOF'
@reviewer Thanks for review! I've addressed all feedback:
1. Centralized logic
2. Improved sanitization
3. Added tests

Changes in abc1234.
EOF
)"

# 8. Wait then resolve threads
sleep 300
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>
gh pr-review threads resolve --pr <PR_NUMBER> --repo <OWNER/REPO> \
  --thread-id <THREAD_ID>

# 9. Verify
gh pr-review threads list --pr <PR_NUMBER> --repo <OWNER/REPO>
git status

gh-pr-review コマンドのリファレンス

コマンド目的
gh pr-review threads listすべてのレビュースレッドを一覧表示する
gh pr-review threads resolve指定したスレッドを解決する
gh pr-review threads unresolve解決済みのスレッドを再開する
gh pr-review comments replyレビュースレッドに返信する
gh pr-review review保留中のレビューを管理する

よく使うフラグ:

  • --pr <number>:プルリクエスト番号
  • -R, --repo <owner/repo>:リポジトリ識別子
  • --thread-id <id>:GraphQL スレッドノード ID

トラブルシューティング

問題解決方法
command not found: gh-pr-review拡張機能をインストールします:gh extension install agynio/gh-pr-review
must specify a pull request via --prPR ディレクトリから実行するか、--pr <number>を追加します
--repo must be owner/repo when using numeric selectors-R <owner/repo>を追加するか、認証済みのリポジトリから実行します
--bodyのシェルエスケープに関する問題ヒアドキュメントを使用します:--body "$(cat <<'EOF'\n...\nEOF)"
スレッドが見つからないthreadId が正確な GraphQL ID であり、PR 番号ではないことを確認します

ベストプラクティス

返信する前に:

  • ✓ すべてのレビューコメントを注意深く読みます
  • ✓ 意図(提案か、対応必須の指摘か)を理解します
  • ✓ 類似の問題がほかの箇所にもないか確認します

修正を実装するとき:

  • ✓ 既存のコードパターンに従います
  • ✓ 変更に合わせてテストを更新または追加します
  • ✓ テストスイート全体を実行します
  • ✓ lint エラーと型エラーを確認します

返信するとき:

  • ✓ 礼儀正しく、感謝の意を示します
  • ✓ 変更した内容を説明します
  • ✓ 該当するファイルや行を示します
  • ✓ 簡潔にまとめます

解決する前に:

  • ✓ すべての指摘に対応していることを確認します
  • ✓ テストが成功することを確認します
  • ✓ 変更をブランチにコミットします

リソース

コメント