セキュリティ 注目度 59

「npm install」だけでコードが実行される時代は終焉へ:npm v12以降、自動スクリプト実行を標準で停止

※本記事の要約および解説はAIが自動生成しており、誤りが含まれる可能性があります。事実確認は元ニュースをご参照ください。

JavaScriptのパッケージ管理ツールであるnpmにおいて、依存パッケージのインストール時に自動実行されていたスクリプト機能が大幅に変更されます。これは、2026年7月リリース予定の「npm v12」以降から標準的な動作として廃止される予定です。

これまで開発者はターミナルで「npm install」を実行するだけで、必要なパッケージとその依存関係をまとめてダウンロードし、設定やビルド作業まで自動的に完了させることが可能でした。この利便性のおかげでNode.js開発は進んできましたが、問題点も指摘されてきました。それは、悪意のあるパッケージや乗っ取られたパッケージが、インストールという行為そのものを攻撃の入り口として利用できる可能性が高まったことです。

npm v12では、これまでの標準動作であった「preinstall」「install」「postinstall」といったライフサイクルスクリプト(依存パッケージに含まれる)の自動実行が原則停止されます。開発者やプロジェクトが信頼したパッケージのみに限定して実行を許可する仕組みへの移行が目的です。

さらに変更される点として、C/C++などで書かれた処理を使う際のビルドツール「node-gyp」による暗黙的な`rebuild`の実行もブロックされます。また、GitリポジトリやリモートURLを指定した依存関係の解決方法も標準で無効化され、明示的な許可(例:`--allow-git`)が必要となります。

開発者は、npm 11.16.0以降のバージョンから警告を受け取ることができ、「npm approve-scripts」コマンドを用いて信頼できるパッケージを個別に承認し、その情報を`package.json`に記録することが推奨されています。これにより、チーム全体でどのスクリプトが実行されるべきかを共有し、サプライチェーン攻撃のリスクを大幅に低減させることを目指しています。


背景

近年、ソフトウェア開発における「サプライチェーン攻撃」が増加傾向にあり、パッケージ管理ツールnpm経由での悪意あるコード実行が大きな脅威となっています。これまでのnpmの自動スクリプト実行機能は利便性が高かった反面、このセキュリティリスクを抱えていました。

重要用語解説

  • npm: Node.jsのパッケージマネージャーであり、JavaScriptライブラリやフレームワークなどの依存関係を一元管理するツールです。開発現場で最も広く利用されています。
  • サプライチェーン攻撃: ソフトウェアの開発過程(部品供給網)のどこかを狙い、悪意のあるコードを混入させるサイバー攻撃手法のことです。信頼性の高いパッケージが起点となることが多いです。
  • preinstall/postinstallスクリプト: npmパッケージに組み込まれるライフサイクルスクリプトの一種で、インストール前やインストール後に特定の処理(ビルド、設定など)を自動実行する仕組みです。

今後の影響

この変更は、開発プロセスにおけるセキュリティレベルを飛躍的に向上させます。これにより、悪意あるコードによる情報漏洩やシステム破壊のリスクが大幅に低減します。ただし、既存の多くのプロジェクトではこれまで当たり前だったビルド手順に変更が必要となり、移行期間中の互換性問題が発生する可能性があります。