matrixshrink について
matrixshrinkは、実行結果とカバレッジ履歴を基に、CIマトリックスから安全に削除できる組み合わせを特定します。CIマトリックスを管理するチーム向けで、決定的なローカル分析を行います。
主な機能
- 01冗長な組み合わせの特定
- 02失敗実績のある組み合わせの保持
- 03実行履歴のない組み合わせの表示
- 04カバレッジ項目と合計の報告
- 05入力検証とエラー箇所の報告
- 06CLIまたはMCPでのローカル分析
活用シーン
- 01大規模なCIマトリックスの縮小
- 02組み合わせ削除前のカバレッジ確認
- 03失敗に関係する組み合わせの保持
- 04実行履歴の不足状況の確認
MCP 対応
組み合わせと実行記録を受け取り、冗長、保持、失敗、実行履歴なしの各グループと合計を返すMCPツール `find_redundant_combos` を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| runs | array | はい | 記録された CI の実行(1 件以上) |
| combos | array | はい | CI マトリックス内の組み合わせ(1 件以上) |
詳細
matrixshrink
CI マトリックスは、組み合わせが一つずつ増えていきます。新しいオペレーティングシステムが加わり、新しいランタイムバージョンが加わりますが、どれを安全に削除できるか誰にも分からないため、削除されるものはありません。matrixshrink は、根拠に基づいてそれを判断します。マトリックス内の組み合わせと、記録された実行履歴(各実行でテストされた組み合わせ、成功か失敗か、テストされたカバレッジキー(テストファイル、機能 ID など、追跡しているもの))を入力すると、削除できる組み合わせを報告します。
- 冗長 — ある組み合わせのすべての実行が成功し、そのカバレッジが、残す組み合わせによってすべてカバーされている場合、その組み合わせは冗長です。スキャンは貪欲かつ決定的に行われます。対象となる組み合わせを ID の昇順で調べ、一度対象としてマークされた組み合わせは、それ以降に調べる組み合わせのカバレッジとして数えません。そのため、カバレッジが同一の組み合わせが二つある場合、アルファベット順で先のものが対象となり、後のものが残ります。カバレッジを維持するには、どちらか一方を残す必要があります。カバレッジをまったくテストしなかったものの、常に成功する組み合わせは冗長です。空集合は、何もない場合を含め、どの集合によってもカバーされるためです。
- 失敗あり — 実行に一度でも失敗があった組み合わせは、冗長とはなりません。失敗は、その組み合わせが何かを検出するという根拠なので、常に残され、
failingに列挙されます。また、そのカバレッジは他の組み合わせをカバーするものとして引き続き数えられます。 - 実行なし — 記録された実行がない組み合わせは
no_runsに列挙され、対象となることはありません。根拠がないため、matrixshrink は推測しません。
レポートには、冗長な各組み合わせ、その完全なカバレッジ(実行全体の和集合をソートしたもの)、残された ID、失敗した ID、実行のない ID、入力された組み合わせと実行の合計数が含まれます。
検証は厳格です。組み合わせ ID の欠落や重複、指定されていない組み合わせを示す実行、"pass" または "fail" 以外の結果、文字列以外のディメンション値やカバレッジキー、その他の不正なフィールドはすべて、問題のあるパス(例:runs[2].combo references unknown combination "node22-linux")を示すエラーになり、部分的なレポートは生成されません。計算は純粋かつローカルで行われます。ネットワークや設定は不要で、渡された入力以外のファイルを読み込むこともありません。
CLI
npx @reneturcios/matrixshrink analyze --input args.json
npx @reneturcios/matrixshrink --version
args.json には引数オブジェクト全体が含まれます。
{
"combos": [
{ "id": "linux-node20", "dimensions": { "os": "linux", "node": "20" } },
{ "id": "linux-node18", "dimensions": { "os": "linux", "node": "18" } },
{ "id": "mac-node20", "dimensions": { "os": "macos", "node": "20" } }
],
"runs": [
{ "combo": "linux-node20", "outcome": "pass", "covered": ["unit", "integration", "e2e"] },
{ "combo": "linux-node18", "outcome": "pass", "covered": ["unit"] },
{ "combo": "mac-node20", "outcome": "fail", "covered": ["unit", "integration"] }
]
}
各組み合わせの dimensions は省略可能(デフォルト {})で、各実行の covered も省略可能(デフォルト [])です。レポートは JSON として出力されます。
{
"redundant": [{ "id": "linux-node18", "covered": ["unit"] }],
"kept": ["linux-node20", "mac-node20"],
"failing": ["mac-node20"],
"no_runs": [],
"total_combos": 3,
"total_runs": 3
}
終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、無効な入力を含む)では 1、使用方法のエラーでは 2 です。
MCP サーバー
npx -y @reneturcios/matrixshrink mcp
MCP クライアントの設定:
{
"mcpServers": {
"matrixshrink": {
"command": "npx",
"args": ["-y", "@reneturcios/matrixshrink", "mcp"]
}
}
}
ツール
find_redundant_combos— 実行履歴とカバレッジの重複に基づいて、冗長な CI マトリックスの組み合わせを見つけます。combos(配列、必須、1 件以上)—{id, dimensions?}オブジェクトとして指定する組み合わせ。idは集合内で一意であり、各dimensionsの値は文字列です。runs(配列、必須、1 件以上)—{combo, outcome, covered?}オブジェクトとして指定する記録済みの実行。comboは指定済みの組み合わせを示し、outcomeは"pass"または"fail"です。
{redundant, kept, failing, no_runs, total_combos, total_runs} を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/matrixshrink
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/matrixshrink 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 つのサーバーを複数のクライアントで再利用できます。