installaudit について
installauditは、依存ツリーのインストール時に実行されるコードを事前確認する、npmプロジェクト向けのCLIおよびMCPサーバーです。package.jsonとpackage-lock.jsonを読み取り、パッケージのインストールやスクリプトの実行なしで結果を報告します。
主な機能
- 01依存パッケージのインストールスクリプトを列挙
- 02直接依存と間接依存を区別
- 03ルートのライフサイクルスクリプトを分類
- 04重要度、件数、判定を報告
- 05決定的なJSONレポート
活用シーン
- 01npmプロジェクトのインストール前に実行コードを確認
- 02リポジトリのライフサイクルスクリプトを点検
- 03MCP経由で構造化された監査結果を取得
MCP 対応
audit_install_scriptsツールを公開します。パスを受け取り、判定、件数、検出事項を含むレポートをJSONで返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | 確認する対象パス |
詳細
installaudit
インストールとはコードの実行です。installaudit は、インストールする前にそのコードの作成者を知らせます。
npm install はファイルをダウンロードするだけではありません。ロックファイルのエントリに hasInstallScript: true があるパッケージは、インストール時にコードを実行します。また、ルートパッケージ自身の preinstall、install、postinstall、prepare スクリプトも実行されます。多くの監査では、依存関係に脆弱性があるかどうかを確認します。installaudit は、その前に「このツリーをインストールした瞬間に何が実行されるのか」という問いに答えます。
package.json と package-lock.json を読み取り、ツリー内のすべてのインストールスクリプトを一覧にし、直接依存と推移的依存を分け、ルートスクリプトを処理内容に基づいて分類して、判定結果を返します。何もインストールせず、スクリプトも実行せず、パッケージも取得しません。
インストール
npx @reneturcios/installaudit audit
または、グローバルにインストールするか、MCP サーバーとして追加します(下記参照)。
CLI
# Audit the current directory
npx @reneturcios/installaudit audit
# Audit another path
npx @reneturcios/installaudit audit ~/src/my-repo
# Machine readable output
npx @reneturcios/installaudit audit ~/src/my-repo --json
# Run as an MCP server on stdio
npx @reneturcios/installaudit mcp
# Print the version
npx @reneturcios/installaudit --version
終了コード:
- 判定結果が CLEAN の場合は
0。 - 判定結果が REVIEW の場合は
1。 package.jsonまたはpackage-lock.jsonがない場合を含む、使用方法のエラーの場合は2。- 読み取り側が出力パイプを早期に閉じた場合は
141。
MCP
MCP クライアントの設定に追加します:
{
"mcpServers": {
"installaudit": {
"command": "npx",
"args": ["-y", "@reneturcios/installaudit", "mcp"]
}
}
}
ツール:path 引数を受け取る audit_install_scripts。判定結果、件数、検出内容を含む完全なレポートを JSON で返します。
インベントリの仕組み
依存関係は package.json だけでなく、ロックファイルから取得します。実際にインストールされるツリーが解決済みの状態で記録されているのは、ロックファイルだからです。
- ロックファイルの v2 および v3 形式では、
packagesオブジェクトがnode_modules/<name>などのインストールパスをエントリに対応付けます。 hasInstallScript: trueのエントリはインストール時にコードを実行するため、検出内容になります。- パッケージ名は、パス内の最後の
node_modules/セグメントの後ろから取得します。スコープ付きの名前は 2 つのセグメントで構成されます。node_modules/@scope/nameは@scope/nameであり、node_modules/a/node_modules/@scope/nameも@scope/nameです。 - パスに
node_modulesセグメントが 1 つだけあり、その名前がルートのpackage.jsonのdependenciesまたはdevDependenciesに記載されている場合、そのパッケージは直接依存です。それ以外はすべて推移的依存です。名前が直接依存と一致する入れ子のコピーも、推移的依存に含まれます。 versionとdevフラグはロックファイルのエントリから読み取り、検出内容とともに報告します。
ルートスクリプトは package.json から取得します。インストール前後に npm が実行するスクリプトであるため、読み取るのは preinstall、install、postinstall、prepare のみです。存在するものはそれぞれ、コマンドの内容に基づいて分類され、検出内容になります。
ルール
| ルール | 重要度 | 意味 |
|---|---|---|
DEP-INSTALL-SCRIPT | medium(直接依存)、low(間接依存) | ロックファイルのエントリーに hasInstallScript: true が設定されている依存関係です。証拠は name@version です。 |
ROOT-SCRIPT-NETWORK | high | NETWORK に分類されたルートのライフサイクルスクリプトです。 |
ROOT-SCRIPT-SHELL-OUT | medium | SHELL-OUT に分類されたルートのライフサイクルスクリプトです。 |
ROOT-SCRIPT-BUILD | low | BUILD に分類されたルートのライフサイクルスクリプトです。 |
ROOT-SCRIPT-OTHER | info | OTHER に分類されたルートのライフサイクルスクリプトです。 |
ルートスクリプトの分類には、文書化された単純なパターンを使用し、次の優先順位で確認します。最初に NETWORK、次に SHELL-OUT、続いて BUILD、最後に OTHER です。
| 分類 | パターン |
|---|---|
| NETWORK | curl または wget、あるいは http:// または https:// の URL と、取得またはダウンロード用のツールを表す単語(fetch、download、curl、wget)の組み合わせです。 |
| SHELL-OUT | シェルインタープリターを表す単語(sh、bash、zsh)、node -e、またはスクリプトインタープリターを表す単語(python、python3、perl、ruby)です。 |
| BUILD | tsc、npm run build(pnpm、yarn、bun も対象)、またはビルドツール名(webpack、vite、rollup、esbuild、parcel、gulp、grunt、babel)です。 |
| OTHER | 上記以外すべてです。 |
すべてのレポートで報告される件数:
totalDeps:ロックファイルのpackagesオブジェクトにある依存関係エントリーの総数。ルートエントリーは除外します。depsWithScripts:hasInstallScript: trueが設定されたエントリー数です。directWithScripts:depsWithScriptsのうち、直接依存に該当する数です。transitiveWithScripts:depsWithScriptsのうち、間接依存に該当する数です。rootScripts:preinstall、install、postinstall、prepareのうち、存在するルートのライフサイクルスクリプト数です。findings:検出事項の総数です。
検出事項は、ルール、次に名前の順で決定的にソートされます。レポートにはタイムスタンプが含まれないため、同じツリーからは常に同じレポートが生成されます。
判定
CLEAN:ルートに NETWORK または SHELL-OUT スクリプトがなく、依存関係のインストールスクリプトもありません。ルートに BUILD または OTHER スクリプトだけがある場合も判定は CLEAN です。ただし、隠されることなく、low または info の検出事項として報告されます。REVIEW:上記以外です。このツリー内で、インストール時に実行されるコードが少なくとも1つあり、人による確認が推奨されます。
制限事項
- ロックファイルのみを対象とします。
package-lock.jsonがない場合は、空のレポートではなくエラー(終了コード 2)になります。ロックファイルがなければ、解決済みのツリーを一覧化できないためです。package.jsonがない場合も同様にエラーになります。 - 依存関係のスクリプト本体はロックファイルに含まれておらず、取得もされません。依存関係について installaudit が報告するのは、スクリプトの存在、名前、バージョン、dev フラグ、直接または間接の別です。スクリプトの内容は報告せず、意図も判定しません。インストールスクリプトがあるパッケージが完全に正当な場合もあります。ネイティブビルドがよくある例です。
- ルートスクリプトの分類はパターンに基づきます。
package.json内のコマンド文字列をそのまま読み取り、スクリプトが呼び出すファイルを追跡したり、変数を展開したり、ダウンロードしたファイルの動作を追跡したりはしません。 - 対応しているのは、
packagesオブジェクトを使用するロックファイル v2 と v3 のみです。レガシー形式のロックファイル v1 にあるdependenciesオブジェクトは読み取らないため、v1 のロックファイルは不完全な一覧ではなくエラーになります。 - 読み取るのは、インストールに関連する4つのルートスクリプトのみです。
testやstartなど、その他のスクリプトは、コマンドにリスクがありそうな場合でも対象外です。 - 直接依存とは、ルートの
package.jsonのdependenciesまたはdevDependenciesに記載されている依存関係です。このツリーを通じてのみ到達できる依存関係は、誰が管理しているかにかかわらず、ここでは定義上、間接依存です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。