PR Green スキル
PR の CI チェック失敗と紐づく Issue を解消し、PR をマージ可能な状態にする。
動作モード
| モード | 起動方法 | 振る舞い |
|---|---|---|
| 対話モード | /pr-green or 「CI を直して」 | 状況報告→ユーザー確認→修正→確認→プッシュ |
| ループモード | /loop 5 /pr-green | 自律的に監視・修正・コミット・プッシュ。問題なければ即終了 |
/loop 経由で呼ばれた場合はループモードとして動作する。判断がつかない場合は対話モードとする。
モード別の振る舞いの違い
| 判断ポイント | 対話モード | ループモード |
|---|---|---|
| 状況サマリー | 詳細に表示し確認を取る | 問題がある場合のみ簡潔に表示 |
| 修正前の確認 | ユーザーに方針確認 | 確認なしで修正を開始 |
| コミット・プッシュ | ユーザー確認後 | 自動 |
| Issue クローズ | 一覧提示→承認後クローズ | 自動クローズ(コメント付き) |
| 問題なしの場合 | 「すべてグリーンです」と報告 | 何も出力せず即終了 |
| 結果報告 | 詳細な修正レポート | 修正した場合のみ簡潔に報告 |
| 判断困難な問題 | ユーザーに相談 | スキップして報告 |
ワークフロー
ステップ 0: PR の特定
引数で PR 番号が指定されていればそれを使う。指定がなければ現在のブランチから自動検出する。
gh pr view --json number,title,state,statusCheckRollup,url,headRefName
PR が見つからない場合は報告して終了する。
ステップ 1: 状況の把握
1a. CI チェックの状態確認
gh pr checks <number> # 失敗した CI の詳細ログ(run-id は checks 結果から特定) gh run view <run-id> --log-failed
1b. PR に紐づく Issue の確認
PR レビューコメント(CodeRabbit 等のボットレビュー含む):
gh api repos/{owner}/{repo}/pulls/<number>/reviews --jq '.[] | select(.state != "APPROVED") | {user: .user.login, state: .state, body: .body}'
gh api repos/{owner}/{repo}/pulls/<number>/comments --jq '.[] | {user: .user.login, body: .body, path: .path, line: .line, created_at: .created_at}'
PR にリンクされた Issue:
gh pr view <number> --json closingIssuesReferences --jq '.closingIssuesReferences[] | {number, title}'
1c. 早期終了判定(ループモード)
以下の条件をすべて満たす場合は何もせず即終了する:
- •CI チェックがすべて成功(PASS)または実行中(PENDING)
- •未対応のレビューコメントがない
- •リンクされた Issue がすべてクローズ済み
CI が実行中(PENDING)の場合も即終了 — 次のループ周回で結果を確認する。
1d. 状況サマリー(対話モードのみ)
対話モードでは状況サマリーを表示し、対応方針の確認を取る。
ステップ 2: CI エラーの解消
CI エラーを分類し、優先度順に対応する。
| 優先度 | エラー種別 | 再現コマンド |
|---|---|---|
| 1 | コンパイルエラー | エラーメッセージから直接特定 |
| 2 | lint / fmt | ./scripts/ci-check.sh ai lint, ./scripts/ci-check.sh ai dylint |
| 3 | テスト失敗 | ./scripts/ci-check.sh ai unit-test, ./scripts/ci-check.sh ai integration-test |
| 4 | clippy | ./scripts/ci-check.sh ai clippy |
| 5 | doc テスト | ./scripts/ci-check.sh ai doc |
各エラーに対して:再現→分析→修正→同じコマンドで検証。
ステップ 3: PR の Issue 解消
3a. レビューコメントへの対応
指摘箇所のコードを読み、指摘に沿って修正する。
3b. リンクされた Issue への対応
Issue 本文から対象コード・問題・期待動作を抽出し、修正・検証する。
3c. 解消済み Issue のクローズ
gh issue close <number> --comment "$(cat <<'EOF' ## 解決確認 - PR: #<pr-number> - 修正内容: <具体的な修正の説明> - 確認方法: <テスト結果やコード確認の根拠> 本 PR の修正により解消されたためクローズします。 EOF )"
対話モードではクローズ前にユーザー承認を取る。ループモードでは自動クローズする。
ステップ 4: コミット・ローカル検証・プッシュ
修正した箇所に関連するチェックのみローカルで再実行する。 フルチェックはローカルでは実行しない — CI に任せる。
対話モードではコミット・プッシュ前にユーザー確認を取る。ループモードでは自動で行う。
プッシュ後の CI 結果は、次のループ周回(ループモード)または gh pr checks --watch(対話モード)で確認する。
ステップ 5: 結果報告
対話モード: 修正内容・Issue 対応・残存事項の詳細レポート。
ループモード: 修正があった場合のみ簡潔に1行報告。修正なし(早期終了)の場合は出力なし。
完了条件
- •CIエラーがないこと
- •PRについたコメント/issueが解決できていること
- •ボーイスカウトルールを適用すること