publishorder について
publishorder は、依存関係グラフから monorepo のパッケージ公開順を計画するローカルのコマンドラインツール兼 MCP サーバーです。階層や変更パッケージに基づく計画に対応し、順序を決定的に算出して循環も報告します。
主な機能
- 01決定的な公開順の算出
- 02依存階層ごとのパッケージ分類
- 03変更パッケージと依存先の計画
- 04依存関係の循環を報告
- 05グラフ入力の検証
活用シーン
- 01monorepo の公開順を計画
- 02変更パッケージと依存先のみを公開
- 03公開計画を妨げる循環を特定
MCP 対応
`plan_publish_order` MCP ツールを公開します。クライアントがパッケージ依存関係と任意の変更セットを渡すと、順序、階層、循環、対象・除外パッケージを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| changed | array | いいえ | 変更されたパッケージ名。指定すると、これらのパッケージと、それらに推移的に依存するすべてのパッケージが計画の対象になります(任意) |
| packages | array | はい | モノレポ内のパッケージ(1 つ以上) |
詳細
publishorder
モノレポのリリースを公開する際は、パッケージを正しい順序で公開する必要があります。依存先のパッケージより先に公開することはできません。publishorder はパッケージグラフ(各パッケージの名前と、そのパッケージより先に公開する必要があるパッケージの名前)を受け取り、公開計画を作成します。
- 公開順序 — Kahn のアルゴリズムで計算した、対象パッケージのトポロジカル順序です。公開可能なパッケージが複数ある場合は、アルファベット順で最も先のパッケージを最初に選ぶため、同じグラフからは常にまったく同じ順序が得られます。
- レベル — 深さごとにグループ化したパッケージです。レベル 0 には対象となる依存パッケージがないパッケージが含まれます。それ以外のパッケージは、対象となる最も深い依存パッケージより 1 つ上のレベルに配置されます。下位のレベルの公開が完了すれば、同じレベルのパッケージはまとめて公開できます。
- 変更パッケージの計画 — 変更されたパッケージの名前を渡すと、計画の対象には、それらのパッケージと、それらに直接または推移的に依存するすべてのパッケージが含まれます。残りのパッケージは
excludedとして報告され、それらを指す依存関係は順序を制約しません。すでに公開済みだからです。 - 循環の検出 — 対象パッケージを並べ替えられない場合、publishorder はエラーを返したり、推測で順序を決めたりしません。正確な循環とともに
ok: falseを報告します。名前と依存関係を昇順にたどる深さ優先探索で最初に見つかった循環が、その循環を構成するパッケージのリストとして返されます(自身に依存するパッケージは、名前 1 つの循環として報告されます)。excludedのパッケージ内だけで発生する循環は、変更パッケージの計画を妨げません。
グラフは閉じている必要があります。指定されていないパッケージを依存関係や変更対象として指定すると、検証エラーになります。また、パッケージ名の欠落や重複、不正な型のフィールドも検証エラーです。エラーには問題のあるパスが示されます(たとえば packages[1].dependencies[0] references unknown package "core")。部分的な計画は作成されません。処理は純粋かつローカルに行われ、ネットワークや設定は使用せず、渡された入力以外のファイルも読み込みません。
CLI
npx @reneturcios/publishorder plan --input args.json
npx @reneturcios/publishorder --version
args.json には、引数オブジェクト全体を指定します。
{
"packages": [
{ "name": "core", "version": "1.4.1" },
{ "name": "lib", "dependencies": ["core"] },
{ "name": "app", "dependencies": ["lib"] }
],
"changed": ["core"]
}
dependencies はパッケージごとに [] がデフォルト値です。version は省略可能で、順序に影響を与えずに引き継がれます。changed は全体で省略可能です。計画は JSON として出力されます。
{
"ok": true,
"order": ["core", "lib", "app"],
"levels": [["core"], ["lib"], ["app"]],
"cycle": [],
"included": ["app", "core", "lib"],
"excluded": []
}
終了コード:成功時は 0、実行時エラー時(入力ファイルを読み取れない場合や入力ファイルが無効な場合、不正な入力を含む)は 1、使用方法のエラー時は 2 です。
MCP サーバー
npx -y @reneturcios/publishorder mcp
MCP クライアントの設定:
{
"mcpServers": {
"publishorder": {
"command": "npx",
"args": ["-y", "@reneturcios/publishorder", "mcp"]
}
}
}
ツール
plan_publish_order— 依存関係グラフから、モノレポの公開順序を計画します。packages(配列、必須、1 件以上)—{name, dependencies?, version?}オブジェクトとして指定するパッケージです。nameはセット内で一意である必要があり、各dependenciesの項目には、指定された別のパッケージの名前を指定します。changed(文字列の配列、省略可能)— 指定すると、これらのパッケージと、それらに推移的に依存するすべてのパッケージが計画の対象になります。
{ok, order, levels, cycle, included, excluded} を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/publishorder
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/publishorder plan --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 — 著作権 (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。