flakyguard について
flakyguardは複数のCI実行におけるテスト結果を集計し、テストを分類して不安定率を算出し、閾値に達した場合は隔離を推奨します。CLIまたはローカルのMCPサーバーから利用でき、入力された実行データだけを分析します。
主な機能
- 01テストごとの成功・失敗・スキップ履歴
- 02証拠に基づくテスト分類
- 03不安定率の算出
- 04閾値に基づく隔離リスト
- 05入力検証と判定
活用シーン
- 01複数のCI実行におけるテスト評価
- 02結果が不安定なテストの特定
- 03隔離を検討するテストの選定
MCP 対応
MCPクライアントに`analyze_test_flakiness`ツールを公開します。CI実行結果と任意の分類・隔離閾値を受け取り、テスト履歴、隔離リスト、判定を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| runs | array | はい | 分析対象の CI 実行(1 件以上) |
| min_runs | integer | いいえ | テストを安定または不安定に分類する前に必要な最小根拠実行数(合格数 + 失敗数。任意、既定値は 2) |
| quarantine_threshold | number | いいえ | 隔離リストの不安定率しきい値(任意、既定値は 0.5) |
詳細
flakyguard
「そのテストは不安定です」というのは、たいてい感覚にすぎません。flakyguard はそれを根拠に変えます。CI の複数の実行からテストごとの結果を渡すと、各テストについて次の記録を作成します。
- テストごとの履歴 — テストが含まれていた実行回数と、成功、失敗、スキップの回数
- 根拠となる実行 — 成功と失敗。スキップも記録されますが、根拠としては数えません。テストが実行されなかった場合、どちらの結果も証明できないためです
- 分類 — 判定を得るには、テストに最低限の根拠が必要です(デフォルトでは根拠となる実行が 2 回)。その後、失敗が一度もなければ
stable_pass、成功が一度もなければstable_fail、両方あればflakyと分類され、それまではinsufficient_dataとなります - 不安定率 — 根拠となる実行のうち、少数派の結果が占める割合です。そのため、結果が均等に分かれるテストは 0.5、ほとんど安定しているテストは 0 に近い値になります
- 隔離リスト — 不安定率が隔離しきい値(デフォルトでは 0.5)以上の不安定なテストを、不安定率の高い順に並べたものです。各項目には、不安定率の根拠となる成功数と失敗数が含まれます
- 判定 — リストが空でなければ
quarantine_recommended、空であればcleanとなります
不安定率は小数点以下 4 桁に丸められます。すべての計算は、指定された実行データを使ってローカルで行われます。ネットワークも設定も不要で、呼び出し間で履歴が保持されることもありません。実行結果のない実行、passed/failed/skipped 以外のステータス、1 回の実行における同一テストの重複など、不正な入力は該当するパスを示すエラーで拒否され、部分的な分析結果は生成されません。
CLI
npx @reneturcios/flakyguard analyze --input args.json
npx @reneturcios/flakyguard --version
args.json には、引数オブジェクト全体を記述します。
{
"runs": [
{
"run_id": "run-101",
"results": [
{ "test": "checkout totals", "status": "passed" },
{ "test": "search ranking", "status": "failed" }
]
},
{
"run_id": "run-102",
"results": [
{ "test": "checkout totals", "status": "failed" },
{ "test": "search ranking", "status": "failed" }
]
}
],
"min_runs": 2,
"quarantine_threshold": 0.5
}
min_runs と quarantine_threshold は省略可能です。分析結果は JSON として出力されます。
終了コード:成功時は 0、実行時エラー(読み取れない、または無効な入力ファイルや、不正な入力を含む)の場合は 1、使用方法のエラーの場合は 2 です。
MCP サーバー
npx -y @reneturcios/flakyguard mcp
MCP クライアントの設定:
{
"mcpServers": {
"flakyguard": {
"command": "npx",
"args": ["-y", "@reneturcios/flakyguard", "mcp"]
}
}
}
ツール
-
analyze_test_flakiness— CI の実行を通じて、テストの不安定さを分析します。runs(配列、必須、1 件以上)—{run_id, results}オブジェクトとして実行を指定します。各結果は{test, status}で、statusはpassed、failed、skippedのいずれかです。1 回の実行に同じテストを重複して含めることはできませんmin_runs(整数、省略可能、>= 1、デフォルトは 2)— テストを安定または不安定と分類する前に必要な、根拠となる実行の最小数quarantine_threshold(数値、省略可能、0 から 1、デフォルトは 0.5)— 隔離リストに含める不安定率のしきい値
{run_count, test_count, tests, quarantine, summary, verdict}を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/flakyguard
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/flakyguard analyze --input /w/args.json
開発
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
ライセンス
MIT — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。