| name | github-fix-ci |
| description | CIのステータスを確認し、失敗を分析して自動修正するSkill。ユーザーが「CIを直して」「CIが落ちているので修正して」のように依頼したら使うこと。 |
| allowed-tools | Read, Edit, Write, Bash(git:*), Bash(gh:*), Bash(cat:*), Bash(ls:*), Bash(bat:*), Bash(eza:*), Bash(grep:*), Bash(head:*), Bash(tail:*) |
CI ステータス確認と失敗修正
GitHub操作は必ずgh CLIで行うこと。GitHub connector/pluginやMCPのGitHubツールは使用しない。
引数
PR number: 確認するPR番号(任意)
--no-commit: 修正後のコミットとプッシュをスキップ(任意)。ファイル自体は修正される(commit/pushのみスキップ)
--dry-run: 失敗分析と修正方針の提示までで終了し、ファイル編集・commit・pushを一切行わない
タスク
Phase 0: 事前チェックとモード検出
現在のブランチ、PR情報、PRタイトル、PR本文、CIステータスを確認して、動作モードを判定する。
動作モードを判定する:
- PR番号が指定されている場合: そのPRを使用するPRモード
- PR番号の指定はないが、現在のブランチにPRが紐づいている場合: そのPRを使用するPRモード
- PRが存在しない場合: リポジトリモード(最後にコミット/プッシュしない)
検出したモードを以降のPhaseで使用するために保持する。
PRモードでは gh pr view <number> --json headRefName,headRefOid で head branch と head commit SHA を取得し、以降のCI run特定で使う。
Phase 1: 言語検出(PRモードのみ)
- PRのタイトルと本文を分析して言語を検出する(例: 日本語、英語)
- 重要: すべてのコミットメッセージは検出された言語で記述すること
- 言語が曖昧な場合は英語をデフォルトとする
Phase 2: CIステータスの確認
gh pr checks ですべてのチェックステータスを取得
- すべてのチェックが成功している場合、成功を報告(PRモードでは検出された言語で)して終了
- チェックがまだ実行中の場合、ステータスを報告して終了する。待機やユーザー確認は行わない
Phase 3: 失敗したチェックの特定
- 失敗したすべてのチェックを名前付きで一覧表示し、check名と状態を保持する
- PRモードでは、PR head commit SHA に一致するworkflow runだけを対象にする:
gh run list --branch <headRefName> --commit <headRefOid> --json databaseId,name,headSha,status,conclusion,workflowName
headSha が <headRefOid> と一致しないrunは古いrunなので除外する
- 複数runが残る場合は、失敗したcheck名と
name / workflowName が対応するrunを優先する。対応が曖昧な場合は最新runだけを採用し、別runのログを根拠に修正しない
Phase 4: エラーログの取得
- 失敗した各チェックについて、詳細ログを取得:
gh run view <run-id> --log-failed
- ログを解析して以下を特定:
- エラータイプ(テスト失敗、リントエラー、ビルドエラー、型エラー等)
- 影響を受けるファイルと行番号
- エラーメッセージ
Phase 5: エラーの分析と分類
- テスト失敗: 失敗したテストケースとアサーションを特定
- リントエラー: スタイル違反とその箇所を特定
- ビルドエラー: コンパイルまたはバンドルの問題を特定
- 型エラー: 型の不一致とその箇所を特定
- その他: その他のエラータイプを分類
--dry-run が指定された場合は、ここまでの失敗分析と修正方針の提示までで終了し、ファイル編集・commit・pushを一切行わない。
Phase 6: 問題の修正
- 特定された各問題について:
- 対象ファイルに移動
- 適切な修正を適用
- 修正が他の機能を壊さないことを確認
- 修正が不明確またはリスクがある場合は、ユーザーに確認を求める
Phase 7: コミットとプッシュ(PRモードのみ、--no-commit を除く)
以下の場合はこのPhaseをスキップ:
- リポジトリモードで実行中
--no-commit フラグが指定されている
実行内容:
- すべての変更をステージング:
git add -A
- 検出された言語でコミットメッセージを記述:
- 英語:
fix: resolve CI failures - <brief description>
- 日本語:
fix: CI失敗を修正 - <簡潔な説明>
- リモートにプッシュ:
git push
Phase 8: 検証と報告
PRモード:
- 変更がプッシュされたことを報告(検出された言語で)
- CIが自動的に再実行されることを通知
- 確認のためCI完了後に再実行することを提案
リポジトリモード:
- 修正内容を報告
- 問題なければユーザーが手動でコミットとプッシュすることを案内
注意事項
- 複数のCIが失敗した場合、依存関係の順序で修正する(例: ビルド → テスト)
- フレーキーテストの疑いがある場合は、その旨を報告し再実行を提案
- 環境関連の失敗(シークレット不足、権限等)の場合は、手動対応が必要であることを報告
- 同じCIが繰り返し失敗する場合は、根本原因の調査を提案