packcompare について
packcompareは、呼び出し側が渡した2つのパッケージスナップショットを比較し、ファイル、依存関係、エクスポート、合計サイズを確認できます。リリースレビュー向けで、実際のパッケージを読み取らず、ネットワークも使わずにローカルで計算します。
主な機能
- 01追加・削除・サイズ変更ファイルの比較
- 02依存関係の名前とバージョンの差分
- 03エクスポートを集合として比較
- 04合計サイズとファイル数の計算
- 05削除されたエクスポートを破壊的変更として判定
- 06CLIとMCPサーバーの提供
活用シーン
- 01リリース間のパッケージ変更レビュー
- 02依存関係の更新と削除の確認
- 03公開エクスポートの削除検出
MCP 対応
MCPサーバーは `compare_packages` を公開します。`before` と `after` のパッケージスナップショットを受け取り、ファイル、依存関係、エクスポート、サイズ、破壊的変更の差分を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| after | object | はい | 新しいパッケージスナップショット:{version, files, dependencies, exports} |
| after.files | array | はい | このスナップショット内のファイル(空でも可) |
| after.exports | array | はい | このスナップショット内のエクスポートパス(空でも可) |
| after.version | string | はい | パッケージのバージョン文字列 |
| after.dependencies | object | はい | 依存関係名からバージョン文字列へのマップ |
| before | object | はい | 古いパッケージスナップショット:{version, files, dependencies, exports} |
| before.files | array | はい | このスナップショット内のファイル(空でも可) |
| before.exports | array | はい | このスナップショット内のエクスポートパス(空でも可) |
| before.version | string | はい | パッケージのバージョン文字列 |
| before.dependencies | object | はい | 依存関係名からバージョン文字列へのマップ |
詳細
packcompare
2 つのバージョン間で、パッケージは目立った変更がひとつもなくても大きく変わることがあります。ファイルがいつの間にか大きくなったり、依存関係が入れ替わったり、エクスポートパスがなくなったりします。packcompare は両方のスナップショットを並べて、変更全体をまとめて報告するため、リリースレビューを勘ではなく差分から始められます。
同じパッケージの 2 つのスナップショット、つまり before と after を指定します。それぞれはディスク上にある実際のパッケージではなく、単純な説明データです。version 文字列、{path, size} エントリーの files リスト、名前からバージョン文字列への dependencies マップ、文字列の exports リストで構成されます。
ファイルレポートは、ソートされた 3 つのリストに分かれます。after にのみ存在するパスは追加、before にのみ存在するパスは削除、両方に存在してサイズが異なるパスは変更済みとして扱われ、それぞれ size_before と size_after を持ちます。ファイルパスはスナップショット内で一意である必要があります。サイズには 0 を指定できます。空のファイルもファイルです。依存関係も同様に名前順でソートされます。追加・削除されたエントリーは、存在する側のバージョンを持ちます。両方に存在してバージョン文字列が異なる名前は変更済みとして扱われ、{name, from, to} の形式で報告されます。
エクスポートはセットとして比較されるため、ひとつのスナップショット内で同じエクスポートを複数回指定しても結果は変わりません。概要の数値は、各スナップショットのファイルサイズ合計、その差 size_delta(パッケージが小さくなった場合は負の値になります)、および各側のファイル数です。
破壊的変更の判定は意図的に限定されており、条件も明確です。エクスポートが 1 つ以上削除された場合に限り、破壊的変更と判定されます。breaking_reasons には、削除リストのソート順に、それぞれ removed export: <name> として理由が記載されます。ファイルの追加、サイズ変更、依存関係の更新は、どれほど大きな変更でも、それだけでは破壊的変更になりません。
不正な入力は、該当するパス(パスにはスナップショット名も含まれます)を示す検証エラーになります。たとえば、ファイルパスの重複は before.files[1].path is a duplicate として報告されます。部分的な差分は生成されません。未定義の追加フィールドは無視されます。計算は純粋かつローカルで行われ、ネットワークや設定は不要で、実際のパッケージが読み込まれることもありません。
CLI
npx @reneturcios/packcompare compare --input args.json
npx @reneturcios/packcompare --version
args.json には、引数オブジェクト全体を記述します。
{
"before": {
"version": "1.0.0",
"files": [{ "path": "index.js", "size": 1200 }],
"dependencies": { "left-pad": "1.3.0" },
"exports": ["./index.js"]
},
"after": {
"version": "1.1.0",
"files": [{ "path": "index.js", "size": 1400 }],
"dependencies": { "left-pad": "1.3.0" },
"exports": ["./index.js"]
}
}
結果は JSON として出力されます。
{
"version_before": "1.0.0",
"version_after": "1.1.0",
"files": {
"added": [],
"removed": [],
"changed": [{ "path": "index.js", "size_before": 1200, "size_after": 1400 }]
},
"dependencies": { "added": [], "removed": [], "changed": [] },
"exports": { "added": [], "removed": [] },
"size_before": 1200,
"size_after": 1400,
"size_delta": 200,
"file_count_before": 1,
"file_count_after": 1,
"breaking": false,
"breaking_reasons": []
}
終了コード:成功時は 0、実行時エラー(読み取り不能または無効な入力ファイル、無効な入力を含む)時は 1、使用方法エラー時は 2 です。
MCP サーバー
npx -y @reneturcios/packcompare mcp
MCP クライアントの設定:
{
"mcpServers": {
"packcompare": {
"command": "npx",
"args": ["-y", "@reneturcios/packcompare", "mcp"]
}
}
}
ツール
-
compare_packages— パッケージの 2 つのバージョンの差分を比較します。before(object、必須)— 以前のパッケージのスナップショット:{version, files, dependencies, exports}。versionは空でない文字列、filesは空でない一意のパスと 0 以上の整数サイズを持つ{path, size}エントリーのリスト、dependenciesは依存関係名から空でないバージョン文字列へのマップ、exportsは空でない文字列のリストです。after(object、必須)— 後のパッケージのスナップショット。beforeと同じ形式です。
{version_before, version_after, files, dependencies, exports, size_before, size_after, size_delta, file_count_before, file_count_after, breaking, breaking_reasons}を返します。
Docker
docker run -i ghcr.io/cloudcorprecords/packcompare
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/packcompare compare --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 つのサーバーを複数のクライアントで再利用できます。