PRのレビューコメントを自動的にチェックして、要求された修正を適用します。
Automatically applies requested fixes to GitHub PR review comments with thumbs-up reactions.
/plugin marketplace add Doarakko/dotfiles/plugin install doarakko-doarakko-config-claude@Doarakko/dotfilesPRのレビューコメントを自動的にチェックして、要求された修正を適用します。
/review-fix [pr番号]
PR番号が指定されない場合は、現在のブランチのPRを使用します。
重要: 修正したいレビューコメントに👍リアクションを追加してから実行してください。👍リアクションがついたコメントのみが修正対象になります。
PRの情報とレビューコメントの取得から開始します。
# GitHub CLIの認証とスコープを最初にチェック
echo "🔍 GitHub CLIの設定を確認中..."
gh auth status
# PR番号が指定されていない場合は現在のブランチのPRを取得(フォールバック処理付き)
PR_INFO=$(gh pr view --json number,reviews,url 2>/dev/null || echo "")
if [ -z "$PR_INFO" ]; then
echo "❌ PR情報を取得できません。考えられる原因:"
echo " - 現在のブランチにPRが存在しない"
echo " - GitHub CLIに追加のスコープが必要 (read:org, read:discussion)"
echo " - 認証の問題"
echo ""
echo "💡 GitHub CLIのスコープを修正するには:"
echo " 1. https://github.com/settings/tokens にアクセス"
echo " 2. トークンに'read:org'と'read:discussion'スコープを追加"
echo " 3. 実行: gh auth login --with-token < your_token_file"
echo ""
echo "🔄 代替方法: PR番号を手動で指定 /review-fix <pr番号>"
exit 1
fi
# 後続のコマンドで使用するためにPR番号を抽出
PR_NUMBER=$(echo "$PR_INFO" | jq -r '.number')
echo "📋 PR #$PR_NUMBER を発見"
# 包括的なエラーハンドリングでレビューコメントを取得
echo "📥 PR #$PR_NUMBER のレビューコメントを取得中..."
# レビューデータを取得する複数の方法を試行
REVIEWS=$(gh pr view $PR_NUMBER --json reviews 2>/dev/null || echo "")
COMMENTS=$(gh api "repos/:owner/:repo/pulls/$PR_NUMBER/comments" 2>/dev/null || echo "")
if [ -z "$REVIEWS" ] && [ -z "$COMMENTS" ]; then
echo "❌ レビューコメントを取得できません。GitHub CLIの権限を確認してください。"
echo "💡 必要なスコープ: repo, read:org, read:discussion"
exit 1
fi
# レビューサマリーを解析して表示
echo "📊 レビューサマリー:"
if [ -n "$REVIEWS" ]; then
echo "$REVIEWS" | jq -r '.reviews[] | "- \(.state) by \(.user.login): \(.body // "コメントなし")"'
fi
if [ -n "$COMMENTS" ]; then
echo "💬 行コメント:"
echo "$COMMENTS" | jq -r '.[] | "- \(.path):\(.line) - \(.body)"'
fi
# 👍リアクションがついたコメントを修正対象として特定
echo "🔍 修正対象のレビューコメントを特定中..."
# 👍リアクションがついているコメントのみを抽出
TARGET_COMMENTS=$(echo "$COMMENTS" | jq -r '.[] | select(.reactions."+1" > 0) | {path: .path, line: .line, body: .body}')
if [ -z "$TARGET_COMMENTS" ] || [ "$TARGET_COMMENTS" = "null" ]; then
echo "ℹ️ 👍リアクションがついたレビューコメントが見つかりません"
echo "💡 修正したいコメントに👍リアクションを追加してから再実行してください"
exit 0
fi
echo "📋 修正対象のコメント:"
echo "$TARGET_COMMENTS" | jq -r '"- \(.path):\(.line) - \(.body)"'
👍リアクションがついた各レビューコメントについて:
# 修正を検証するためにテストを実行(利用可能な場合)
echo "🧪 修正を検証するためにテストを実行中..."
npm test || python -m pytest || go test || cargo test || echo "テストコマンドが見つかりません"
# コードスタイルをチェックするためにリンティングを実行
echo "🔍 リンティングチェックを実行中..."
npm run lint || ruff check || golangci-lint run || echo "リントコマンドが見つかりません"
# 行われた変更を表示するためにgit statusを表示
echo "📝 行われた変更の概要:"
git status --porcelain
echo ""
echo "📋 詳細diff:"
git diff --stat
echo ""
echo "✅ レビュー修正が正常に適用されました!"
echo "💡 準備ができたら /commit-create を使用してこれらの変更をコミットしてください"
# 適用された修正のサマリーを生成
echo "🤖 レビュー修正サマリー:"
echo "- PRレビューコメントの問題を修正"
echo "- 可能な限りコードの提案を適用"
echo "- スタイル/フォーマットの問題を解決"
echo "- 要求に応じてドキュメントを更新"
echo ""
echo "📊 変更されたファイル数: $(git diff --name-only | wc -l)"
echo "📈 変更された行数: +$(git diff --numstat | awk '{add+=$1} END {print add}') -$(git diff --numstat | awk '{del+=$2} END {print del}')"
echo ""
echo "🔄 次のステップ:"
echo "1. 'git diff' で変更内容を確認"
echo "2. 必要に応じて追加のテストを実行"
echo "3. 満足したら /commit-create を使用してコミット"