github-pr-review-workflow について
GitHub のプルリクエストレビューを処理する開発者向けのワークフロースキルです。gh-pr-review 拡張機能を使い、指摘の検証、修正とテスト、スレッドへの返信・解決までを扱います。
主な機能
- 01PR 情報の取得とレビュー一覧表示
- 02レビュー指摘の分析と妥当性確認
- 03修正の実装とチェックの実行
- 04返信、待機、スレッドの解決
活用シーン
- 01PR の未対応コメントを処理
- 02修正後のテスト、型、lint の確認
- 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 ノード IDisResolved:現在のステータス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
)"
適切であれば、コメントにリアクションするだけでもかまいません。
まず、未解決のすべてのスレッドに返信します:
- 未解決のすべてのコメントに対し、実施した内容または実施しなかった理由を返信します。
- すべての返信を投稿してから、待機/解決の段階に進みます。
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>
方針:
- 古くなったスレッド(isOutdated: true)を解決します。返信は不要です
- 対応中のスレッドに、修正内容(または変更しない理由)を説明して返信します
- 返信を最大5分間待ちます
- 確認があった場合、または返信がない場合は、対応中のスレッドを解決します
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 --pr | PR ディレクトリから実行するか、--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 エラーと型エラーを確認します
返信するとき:
- ✓ 礼儀正しく、感謝の意を示します
- ✓ 変更した内容を説明します
- ✓ 該当するファイルや行を示します
- ✓ 簡潔にまとめます
解決する前に:
- ✓ すべての指摘に対応していることを確認します
- ✓ テストが成功することを確認します
- ✓ 変更をブランチにコミットします