بنقرة واحدة
fix
PRのレビューコメントを確認し、優先度に応じてコード修正を実行する。サブエージェント (general-purpose) 起動にも対応。--defer-nit / --severity-min で対応範囲を制御。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
PRのレビューコメントを確認し、優先度に応じてコード修正を実行する。サブエージェント (general-purpose) 起動にも対応。--defer-nit / --severity-min で対応範囲を制御。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
修正を複数ブランチに適用する際のブランチ戦略。featureブランチへの先行commitとcherry-pickによる短命branchへの適用手順。環境別branch(qa/staging/epsilon等)への修正適用時に参照する。
DeepWiki (Devin MCP) のドキュメント内容を対象リポジトリの Markdown ファイルとして転載する。セクション構成維持・番号付きファイル分割・GFM 準拠補正・日本語翻訳 (オプション) まで自動処理。
実装プランファイル作成・更新の手順。実装開始時およびPR作成時にissues/配下の実装プランの有無を確認し、なければ会話履歴・git log・git diffから生成する。複数ファイル変更・新規機能追加・DBマイグレーション伴う変更が対象。
調査レポート作成のルール。否定的結論のエビデンス要件、残課題の記載フォーマット、ハルシネーション防止のための裏取り原則を扱う。DB調査に限らずコードベース調査・仕様調査一般に適用。
ログを追加・修正する際のガイドライン。ログレベルの選択基準、ループ内ログの制御、エラー蓄積パターン、機密情報の扱いを扱う。言語/FW非依存の原則。
Anthropic 公式 Skill (docx/pptx/xlsx/pdf 等) が必要な作業で、未インストール時に自動でダウンロードして使用する。
| name | fix |
| description | PRのレビューコメントを確認し、優先度に応じてコード修正を実行する。サブエージェント (general-purpose) 起動にも対応。--defer-nit / --severity-min で対応範囲を制御。 |
| when_to_use | PRレビューコメント (codex/gemini/人間) の指摘を実際にコード修正で対応したいとき。review-pr-comments で分類した後の修正フェーズに使う。Triggers: 'PRコメント対応', 'PRレビュー修正', 'PR fix', 'review feedback fix', 'コメントに対応して修正' |
| argument-hint | [PR番号] [--defer-nit] [--severity-min critical|major|minor] |
| allowed-tools | ["Bash","Read","Edit","Write","Glob","Grep"] |
直前PR、または引数で指定されたPRのreview comment確認・修正対応実行。
このスキルは メインセッション直接実行 と サブエージェント (general-purpose) 起動 の両方に対応する。
長丁場のクロスレビューループ(/ndf:cross-review)からは 必ずサブエージェント経由で起動 されることを想定:
# メインからの起動例(cross-review が内部でこれを行う)
Agent(
subagent_type="general-purpose",
description="Fix PR review comments (sub-agent)",
prompt="""
/ndf:fix <PR番号> --defer-nit を実行してください。
PR: <PR番号>
リポジトリ: <owner/repo>
重要度ポリシー: critical/major/minor は修正、nit は deferred として残す
完了後の戻り値: 件数サマリ + 修正コミット SHA + 残 nit リスト
"""
)
サブエージェント側ではこの SKILL.md を読み込んで、自己完結で 修正 → コミット → push → reply → Resolve Conversation まで実行する。 メインへの戻り値は最小限のサマリのみ。
| 引数 | 意味 | 既定 |
|---|---|---|
[PR番号] | 対象 PR | 直前 PR |
--defer-nit | nit 指摘は修正せず deferred としてリスト出力 | OFF |
--severity-min LEVEL | 指定重要度未満は無視(critical / major / minor) | minor (= minor 以上を修正) |
[重要度 / カテゴリ] プレフィックス(/ndf:review 出力規約)で分類。
ただし重要度ラベルを鵜呑みにしない — 各指摘ごとにコード/仕様を独自に調査し、
本来の重要度を判定し直してから下表の動作を適用する(bot のラベリングは参考値に過ぎない)。
| 重要度 | 動作 | ユーザ問い合わせ |
|---|---|---|
critical | 必ず自動修正 | なし |
major | 必ず自動修正 | なし |
minor / nit (パフォーマンス・可読性・重複コード排除) | このPRで修正対応。特にトータル行数が減る方向の修正は積極的に実施 | なし |
minor / nit (上記カテゴリ、修正範囲が +30 行を超えそう) | ユーザ問い合わせ | あり |
minor (その他) | 自動修正(明らかな改善のみ)。判断が割れるなら nit として deferred 扱い | なし |
nit (その他) | --defer-nit 指定時は 修正せず deferred リスト に追加。最後にまとめてユーザ問い合わせ | あり(最後に1回) |
重要度の独自判定:
nit と付けていても、実体がパフォーマンス改善や重複排除なら minor/nit カテゴリ修正対象 として扱うcritical と付けていても、実害がないスタイル指摘なら nit 相当に格下げして deferred 化してよい指摘の正否判断:
自動判断できない場合の取り扱い (context 節約のため安易に user に投げない):
gh pr checks <PR> で 現時点の 失敗ジョブを検出)
critical / major → 全件修正対象minor / nit (パフォーマンス・可読性・重複排除) → 修正対象。+30行超なら deferred + ユーザ問い合わせminor (その他) → 修正対象(明らかでないものは deferred[] へ)nit (その他、--defer-nit 時) → deferred[] のみ、修正しない[deferred / nit] のラベル付き返信 を投稿(resolve はしない)resolveReviewThread mutation)
resolved_threads[] に記録deferred / rejected の thread は Resolve しない(次ラウンドで再評価するため)/tmp/fix-pr<番号>-result.json (後述「戻り値フォーマット」参照)
ci_failed_checks には gh pr checks <PR> --json name,state から state=FAILURE の name を抽出して列挙ci_status は push 時点での既知失敗のみを反映するflakyテストの扱い: PR の変更範囲外で発生している flaky テストも、見つけ次第このPRで修正する。 flaky を放置するとリポジトリ全体のコード品質が下がり、後続 PR の CI 信頼性も損なわれるため。
# PRの全チェック状態を確認(FAIL/PASS/PENDING)
gh pr checks <PR番号>
# JSON形式で詳細取得
gh pr checks <PR番号> --json name,state,link,completedAt
# 失敗ジョブのみ抽出
gh pr checks <PR番号> --json name,state | \
python3 -c "import json,sys; [print(c['name']) for c in json.load(sys.stdin) if c['state']=='FAILURE']"
# 実行中ジョブのみ抽出(状態スナップショット用。完了は待たない)
gh pr checks <PR番号> --json name,state | \
python3 -c "import json,sys; [print(c['name']) for c in json.load(sys.stdin) if c['state'] in ('PENDING','IN_PROGRESS','QUEUED')]"
このスキルでは CI 完了待ちは行わない(gh pr checks --watch 等は使わない)。
gh pr checks <PR> --json name,state での 状態スナップショット取得は実施
し、戻り値の ci_status / ci_failed_checks に反映する# ワークフロー実行ID取得
RUN_ID=$(gh run list --branch <branch-name> --limit 1 --json databaseId --jq '.[0].databaseId // empty')
[ -z "$RUN_ID" ] && { echo "No CI run found for this branch"; exit 0; }
# 失敗ステップのログだけ表示(効率的)
gh run view $RUN_ID --log-failed
# 特定ジョブのログ
gh run view $RUN_ID --job <job-id> --log
| エラー種別 | 対応方針 |
|---|---|
| lint/format | 自動修正ツール実行(ruff, prettier, eslint --fix 等)→ コミット |
| 型チェック | 型定義・アノテーションを修正。無視コメントは原則禁止(根本対応) |
| テスト失敗 | 失敗テストを読み、実装/テストどちらが正しいか判断してから修正。テスト側の問題なら仕様確認 |
| ビルドエラー | 依存関係・構文・設定ファイルを確認 |
| 依存脆弱性 | 可能ならバージョン更新、無理なら除外ルール追加(理由明記) |
| タイムアウト/flaky | retry設定、テスト分割、リトライ追加。PR範囲外の flaky も見つけ次第修正(放置でリポジトリ全体の品質劣化を招くため) |
| インフラ一時障害 | 再実行で解消することがあるため gh run rerun $RUN_ID を先に試す |
review指摘とCIエラーは同じPRで一緒に修正する:
# PRのレビューコメント一覧を取得
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments
# 特定のコメントに返信(in_reply_to にコメントIDを指定)
gh api repos/{owner}/{repo}/pulls/{pr_number}/comments \
-f body="修正しました。" \
-F in_reply_to={comment_id}
# GraphQL APIでスレッドをresolveする
gh api graphql -f query='
mutation {
resolveReviewThread(input: {threadId: "{thread_node_id}"}) {
thread { isResolved }
}
}
'
# PRのレビュースレッド一覧を取得(node_id含む)
gh api graphql -f query='
query {
repository(owner: "{owner}", name: "{repo}") {
pullRequest(number: {pr_number}) {
reviewThreads(first: 100) {
nodes {
id
isResolved
comments(first: 1) {
nodes { body }
}
}
}
}
}
}
'
方針:
サブエージェント呼び出し時の context 節約のため、実行結果は /tmp/fix-pr<番号>-result.json に書き出す:
{
"pr": 67,
"fix_commit": "abc1234",
"ci_status": "SUCCESS" | "FAILURE" | "PENDING" | "NONE",
"ci_failed_checks": [],
"ci_note": null,
"fixed_count": 5,
"by_severity": {"critical": 1, "major": 2, "minor": 2, "nit": 0},
"resolved_threads": [
{
"thread_id": "PRRT_...",
"comment_id": 3222849090,
"path": "src/foo.py",
"line": 42
}
],
"deferred": [
{
"comment_id": 3222849090,
"thread_id": "PRRT_...",
"path": "src/foo.py",
"line": 42,
"severity": "nit",
"category": "style",
"summary": "末尾セミコロンの有無",
"reason_for_deferral": "好みの範囲。プロジェクト規約と齟齬なし"
}
],
"rejected": [
{
"comment_id": 3222849090,
"summary": "heredoc を <<'JSON' にせよ",
"reason_for_rejection": "$SHA を意図的に展開する必要があり、クオート化すると逆に壊れる"
}
],
"summary_comment_url": "https://github.com/.../pull/67#issuecomment-..."
}
フィールド説明:
ci_failed_checks — ci_status = FAILURE のとき、失敗した check 名の配列。/ndf:cross-review 側で code-related (pint/larastan/test/build/lint/type) と meta-only (check_pr_requirements/assignees/reviewers/labels) を分類し、メタチェックのみ失敗ならループ継続するci_note — code-related ではない CI 失敗の補足。例: "メタチェックのみ失敗: check_pr_requirements — Assignees 未設定"resolved_threads — 手順 11 で resolveReviewThread mutation を実行したスレッド一覧。deferred / rejected の thread は Resolve しない(再評価のため)サブエージェントとして起動された場合は、この JSON をメインに返すサマリの基礎とする。
メイン or PR への報告内容(戻り値ファイルから抽出):
/tmp/fix-pr<番号>-result.jsonhttps://github.com/<owner>/<repo>/pull/<番号>)