parallelmap について
parallelmapは、ジョブやテストの依存グラフを分析するローカルMCPサーバー兼コマンドラインツールです。並列実行のレベル、所要時間、クリティカルパス、任意のワーカー割り当て、循環依存を示します。
主な機能
- 01依存関係ごとのジョブ分類
- 02逐次時間と並列時間の比較
- 03決定的なクリティカルパスの特定
- 04ワーカー数に応じたジョブ割り当て
- 05依存サイクルの報告
- 06グラフ入力の検証
活用シーン
- 01テストスイートの並列実行時間の見積もり
- 02固定ワーカープールでのジョブパイプライン計画
- 03スケジュールを妨げる依存サイクルの特定
MCP 対応
MCPクライアントに`map_parallelization`ツールを提供します。ジョブの所要時間と依存関係を受け取り、任意でワーカー数に応じたスケジュールを生成します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| jobs | array | はい | ワークロード内のジョブまたはテスト(1 つ以上) |
| workers | integer | いいえ | 貪欲法によるスケジュールで使用する並列ワーカー数(任意。省略した場合、スケジュールは空になり、全体の所要時間は上限のない並列実行時間になります) |
詳細
parallelmap
テストスイートやジョブパイプラインの所要時間は、実行にかかる時間そのものです — ただし、一部を並行して実行できる場合は別です。parallelmap は ワークロードグラフ — 各ジョブの名前、所要時間、 開始前に完了していなければならないジョブの名前 — を受け取り、安全に並列化できる部分を示します。
- レベル — 深さごとにまとめたジョブです。レベル 0 には 依存関係のないジョブが入り、それ以外のジョブは最も深い依存先の 1 つ上のレベルに配置されます。下位のレベルが 完了すれば、同じレベルのすべてのジョブを同時に実行できます。
- 逐次実行時間と並列実行時間 — すべての所要時間の合計と、 無制限のワーカーを使った場合のメイクスパン(最も遅い最早終了時刻)、 およびその間のスピードアップです。報告される秒数はすべて小数点以下 3 桁に丸められ、スピードアップは丸め後の値から計算されます。
- クリティカルパス — 並列実行時間を決めるチェーンを、 実行順に示します。終了ジョブとチェーンをさかのぼる各ステップで 同順位の場合は、ジョブ名が最も小さいものを選ぶため、 パスは完全に決定論的です。
- ワーカースケジュール — ワーカー数を指定すると、貪欲な リストスケジューリングにより、(レベル、名前)の優先順位でジョブを割り当てます。 各ジョブは、最も早く空くワーカー(同順位の場合はインデックスが最小のワーカー)に割り当てられ、 そのスケジュールで依存先が完了する時刻より前には開始しません。 スケジュールには各ジョブのワーカー、開始時刻、終了時刻が (開始時刻、ワーカー、ジョブ)の順に並べて報告され、 結果のメイクスパンも含まれます。 ワーカー数が指定されていない場合、スケジュールはなく、 メイクスパンは無制限のワーカーでの並列実行時間になります。
- サイクル検出 — ジョブをスケジュールできない場合、parallelmap は
エラーを返したり推測したりしません。
ok: falseと正確なサイクルを報告します。 名前と依存先を昇順にたどる深さ優先探索によって、最初に見つかったサイクルが そのサイクルを構成するジョブのリストとして返されます(ジョブが自分自身に依存している場合は、 そのジョブ名だけのサイクルとして報告されます)。時間フィールドは null になります。
グラフは閉じている必要があります。指定されていないジョブ名を参照する
depends_on エントリは検証エラーになります。また、ジョブ名の欠落または重複、
所要時間の欠落、負数または有限値でない値、1 以上の整数ではないワーカー数もエラーになります。
エラーには問題のあるパスが示され(例:jobs[1].depends_on[0] references unknown job "build")、部分的なマップは生成されません。計算は純粋かつローカルで行われます。
ネットワークや設定は不要で、渡された入力以外のファイルを読み込むこともありません。
CLI
npx @reneturcios/parallelmap map --input args.json
npx @reneturcios/parallelmap --version
args.json には引数オブジェクト全体を指定します。
{
"jobs": [
{ "name": "compile", "duration_seconds": 30 },
{ "name": "unit", "duration_seconds": 45, "depends_on": ["compile"] },
{ "name": "lint", "duration_seconds": 10, "depends_on": ["compile"] },
{ "name": "package", "duration_seconds": 5, "depends_on": ["unit", "lint"] }
],
"workers": 2
}
ジョブごとの depends_on のデフォルト値は [] で、全体の workers は省略できます。
マップは JSON として出力されます。
{
"ok": true,
"levels": [["compile"], ["lint", "unit"], ["package"]],
"sequential_seconds": 90,
"parallel_seconds": 80,
"speedup": 1.125,
"critical_path": ["compile", "unit", "package"],
"cycle": [],
"schedule": [
{ "job": "compile", "worker": 0, "start": 0, "finish": 30 },
{ "job": "unit", "worker": 0, "start": 30, "finish": 75 },
{ "job": "lint", "worker": 1, "start": 30, "finish": 40 },
{ "job": "package", "worker": 1, "start": 75, "finish": 80 }
],
"makespan_seconds": 80
}
終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、
無効な入力を含む)時は 1、使用方法のエラー時は 2 です。
MCP サーバー
npx -y @reneturcios/parallelmap mcp
MCP クライアントの設定:
{
"mcpServers": {
"parallelmap": {
"command": "npx",
"args": ["-y", "@reneturcios/parallelmap", "mcp"]
}
}
}
ツール
-
map_parallelization— どのジョブやテストを安全に 並行実行できるかをマッピングします。jobs(配列、必須、1 件以上)—{name, duration_seconds, depends_on?}オブジェクトとして 指定するジョブです。nameはセット内で一意であり、各depends_onエントリには、指定された別のジョブ名を記述します。workers(整数、省略可能、1 以上)— 指定すると、その数のワーカーに対する 貪欲なスケジュールが含まれます。
{ok, levels, sequential_seconds, parallel_seconds, speedup, critical_path, cycle, schedule, makespan_seconds}を返します — サイクルがある場合は、{ok: false, cycle, levels: [], sequential_seconds, parallel_seconds: null, speedup: null, critical_path: [], schedule: [], makespan_seconds: null}を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/parallelmap
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/parallelmap map --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 つのサーバーを複数のクライアントで再利用できます。