sc-pr-fix について
プルリクエストを作成してCIチェックを監視し、失敗の修正を対話形式で支援するスキルです。試行回数の上限と確認プロンプトで操作を制御し、ドライランや低リスク修正の自動適用にも対応します。
主な機能
- 01ブランチ、コミット、プルリクエストの作成
- 02`gh` によるCIチェックの監視
- 03一般的なCI失敗ログの解析
- 04修正適用前の確認
- 05再試行の制限と失敗の繰り返し検出
活用シーン
- 01プルリクエストを作成してCIチェックを追跡
- 02lintやテストの失敗を診断・修正
- 03ドライランでGitやプルリクエスト操作を確認
MCP 対応
複雑なCI失敗のデバッグや、修正案を適用する前のレビューにPAL MCPを使用します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ tony363/ superclaude --skill sc-pr-fixインストール後、Claude Code で/sc-pr-fixを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/check_pr_status.pyfix_orchestrator.pyparse_check_failures.py詳細
PR 修正スキル
プルリクエストを作成し、すべてのチェックが通るまで CI チェックの失敗を対話的に修正します。
クイックスタート
# Create PR from current changes
/sc:pr-fix "fix: resolve test failures" --branch fix/tests
# Dry run to preview
/sc:pr-fix "feat: new feature" --dry-run
# With custom PR details
/sc:pr-fix "chore: update deps" --title "Update dependencies" --body "Monthly update"
# Auto-fix low-risk issues
/sc:pr-fix "fix: lint errors" --auto-fix
動作フロー
- 検証 - Git の状態を確認し、変更が存在することを確認します
- ブランチ - 新しいブランチを作成してチェックアウトします
- コミット - すべての変更をステージングし、指定されたメッセージでコミットします
- プッシュ - ブランチを origin にプッシュします
- PR 作成 -
ghCLI でプルリクエストを作成します - 監視 - 設定された間隔で CI の状態をポーリングします
- 修正ループ - 失敗したチェックごとに、以下を行います。
- 失敗ログを解析します
- 修正案を提示します(複雑な問題には PAL MCP の支援を利用します)
- ユーザーに確認を求めます(対話モード)
- 修正を適用してプッシュします
- チェックを再度監視します
- 完了 - すべてのチェックに合格するか、最大試行回数に達した時点で完了します
フラグ
| フラグ | 型 | デフォルト | 説明 |
|---|---|---|---|
--branch | string | auto | 新しいブランチ名(auto の場合:pr-fix/<timestamp>) |
--base | string | main | PR の対象ブランチ |
--title | string | commit msg | PR のタイトル |
--body | string | auto | PR の説明文 |
--dry-run | bool | false | 実行せずに操作をプレビューします |
--auto-fix | bool | false | 低リスクの修正を自動適用し、高リスクの場合のみ確認を求めます |
--max-fix-attempts | int | 5 | CI 修正の最大反復回数(上限:5) |
--poll-interval | int | 30 | CI 状態を確認する間隔(秒) |
--no-push | bool | false | ブランチを作成してコミットしますが、プッシュや PR 作成は行いません |
対話モード
デフォルトでは、スキルは修正のたびに確認を求めます。
================================================================================
CI Check Failed: build (lint) Attempt 2 of 5
================================================================================
Error Summary:
- src/component.ts:42:15 - Missing semicolon (semi)
- src/utils.ts:18:1 - Unexpected console statement (no-console)
Proposed Fix:
1. Add semicolon at src/component.ts:42
2. Remove console.log at src/utils.ts:18
Risk Level: LOW (auto-fixable lint errors)
--------------------------------------------------------------------------------
[A]pply fix [S]kip this check [V]iew full log [Q]uit
>
低リスクの修正(lint、フォーマット)で確認を省略するには、--auto-fix を使用します。
高リスクの修正(テストの変更、セキュリティ、コアロジック)では、常に確認を求めます。
リスク分類
| レベル | 例 | 動作 |
|---|---|---|
| LOW | Lint エラー、フォーマット、空白 | --auto-fix の場合は自動修正 |
| MEDIUM | テストの更新、ドキュメント | 常に確認 |
| HIGH | コアロジック、セキュリティ、API の変更 | 常に確認し、PAL によるレビューを実施 |
エビデンス要件
このスキルでは、操作が成功したことを示すエビデンスが必要です。
- Git 操作が成功していること(ブランチの作成、プッシュ)
- PR の作成時に有効な PR URL が返されること
- CI の状態を
ghCLI で取得できること - 修正の試行でファイルの差分が表示されること
ツールの連携
- Bash - Git と
ghCLI の実行 - Read - 失敗ログとソースコードの分析
- Edit - ソースファイルへの修正の適用
- AskUserQuestion - 修正の確認を求める対話型プロンプト
- PAL MCP debug - 複雑な CI 失敗の診断
- PAL MCP codereview - 適用前の修正品質の検証
MCP 連携
- PAL MCP debug - CI 失敗の根本原因分析
- PAL MCP codereview - 適用前の修正案のレビュー
安全機構
- 上限:修正の反復回数は最大 5 回(変更できません)
- 停滞の検出:同じエラーが 3 回連続した場合は中止します
- 振動の検出:修正・取り消し・修正のパターンを検出した場合は中止します
- 対話的な確認:構造的な変更にはすべて承認が必要です
- チェックをスキップしない:修正するか、明示的に中止する必要があります。スキップはできません
- バックアップブランチ:開始前に
backup/<branch>-<timestamp>を作成します
CI 状態のポーリング
このスキルは、以下を使用して GitHub Actions のチェック状態をポーリングします。
gh pr checks <pr_number> --json name,state,conclusion,url
ポーリングの動作:
- 初期待機時間:プッシュ後 10 秒(CI の開始を待ちます)
- ポーリング間隔:
--poll-interval秒(デフォルト:30) - タイムアウト:チェック完了まで 10 分
- pending、queued、in_progress、completed の各状態に対応します
失敗ログの解析
対応する CI 出力形式:
- ESLint/TSLint の JSON 形式
- トレースバックを含む pytest の出力
- ruff/flake8 形式
- Jest/Vitest の出力形式
- 一般的なエラーパターン(
error:、ERROR、failed) - GitHub Actions のアノテーション
例
修正ループを含む基本的な PR 作成
/sc:pr-fix "fix: resolve ESLint errors"
出力:
Creating branch: pr-fix/20240115-143022
Committing: fix: resolve ESLint errors
Pushing to origin...
Creating PR #42: fix: resolve ESLint errors
Monitoring CI checks...
- lint: pending
- test: pending
[30s later]
- lint: failed
- test: passed
Parsing lint failures...
Found 2 errors in 1 file.
================================================================================
CI Check Failed: lint Attempt 1 of 5
================================================================================
...
[A]pply fix [S]kip [V]iew log [Q]uit
> a
Applying fix...
Pushing fix commit...
Monitoring CI checks...
- lint: passed
- test: passed
All checks passed! PR #42 is ready for review.
PR URL: https://github.com/owner/repo/pull/42
詳細情報を含む機能 PR
/sc:pr-fix "feat: add user dashboard" \
--branch feat/user-dashboard \
--title "Add User Dashboard Component" \
--body "Implements user dashboard as per spec #42"
プレビューモード
/sc:pr-fix "refactor: cleanup utils" --dry-run
出力:
[DRY RUN] Would execute:
1. git checkout -b pr-fix/20240115-143022
2. git add -A
3. git commit -m "refactor: cleanup utils"
4. git push -u origin pr-fix/20240115-143022
5. gh pr create --base main --title "refactor: cleanup utils"
6. Monitor CI and fix failures interactively
No changes made.
低リスクの問題を自動修正する
/sc:pr-fix "fix: formatting" --auto-fix
--auto-fix を指定すると、低リスクの修正(リント、フォーマット)が自動的に適用されます。
中リスクおよび高リスクの修正では、引き続き確認が求められます。
終了条件
修正ループは、次のいずれかの条件を満たすと終了します。
| 条件 | 終了ステータス | メッセージ |
|---|---|---|
| すべてのチェックに合格 | SUCCESS | "All checks passed! PR ready for review." |
| 最大試行回数(5回) | FAILED | "Max fix attempts reached. Manual intervention required." |
| 停滞(同じエラーが3回発生) | FAILED | "Same error persists after 3 attempts. Aborting." |
| ユーザーが終了 | ABORTED | "Fix loop aborted by user." |
| CI タイムアウト | TIMEOUT | "CI checks did not complete within timeout." |
コミットメッセージの形式
修正コミットには Conventional Commits を使用します。
fix(ci): resolve <check_name> failures
- <description of fix 1>
- <description of fix 2>
Automated fix by sc-pr-fix skill
スクリプト
このスキルでは、scripts/ 内の Python ヘルパースクリプトを使用します。
check_pr_status.py-gh pr checksを使用して PR のチェック状況をポーリングしますparse_check_failures.py- CI の失敗ログを解析してエラーを抽出しますfix_orchestrator.py- 安全機構を備えた修正ループを調整します
エラー処理
| シナリオ | 動作 |
|---|---|
| Git リポジトリがない | エラーメッセージを表示して終了します |
| 作業ツリーに未コミットの変更がある | スタッシュ、コミット、または中止を選択するよう求めます |
| ブランチがすでに存在する | 別の名前を指定するよう求めます |
| プッシュに失敗 | 権限を確認し、再試行を提案します |
| PR の作成に失敗 | gh CLI のエラーを表示し、手動での作成を提案します |
| CI タイムアウト | 状況を報告し、監視の継続を提案します |
| 解析に失敗 | 生ログの表示に切り替えます |
| 修正の適用に失敗 | 試行回数を増やし、ループを続けます |
| ユーザーが中止 | 状況の概要を表示して正常に終了します |
コメント
Markdown 対応