| npm | |
|---|---|
| 原作者 | アイザック・Z・シュルーター |
| 開発者 | npm, Inc. ( GitHubの子会社、[ 1 ] Microsoftの子会社) |
| 初回リリース | 2010年1月12日[ 2 ] (2010年1月12日) |
| 安定版リリース | 11.7.0 [ 3 ] |
| リポジトリ | |
| 書かれた | JavaScript |
| プラットフォーム | クロスプラットフォーム |
| タイプ | パッケージマネージャー |
| ライセンス | 芸術的ライセンス2.0 |
| Webサイト | www.npmjs.com |
npmは、 GitHubの子会社であるnpm, Inc.が管理するJavaScriptプログラミング言語のパッケージマネージャーです。npmはJavaScriptランタイム環境Node.jsのデフォルトのパッケージマネージャーであり、Node.jsインストーラーの推奨機能として含まれています。[ 4 ]
npmは、コマンドラインクライアント(npmとも呼ばれる)と、公開パッケージおよび有料プライベートパッケージのオンラインデータベース(npmレジストリ)で構成されています。レジストリにはクライアントからアクセスでき、利用可能なパッケージはnpmのウェブサイトから閲覧・検索できます。パッケージマネージャーとレジストリはnpm, Inc.によって管理されています。
「npm」は一般的に「Node Package Manager」の略語であると理解されていますが、正式には「npmは頭字語ではない」という意味の再帰的な頭字語の略語です。 [ 5 ]
npm は、特定のプロジェクトのローカル依存関係であるパッケージだけでなく、グローバルにインストールされた JavaScript ツールも管理できます。[ 6 ]ローカルプロジェクトの依存関係マネージャーとして使用すると、npm は 1 つのコマンドで、ファイルを通じてプロジェクトのすべての依存関係をインストールできますpackage.json。[ 7 ]ファイルでは、各依存関係でセマンティックバージョニングスキームを使用して有効なバージョンpackage.jsonの範囲を指定できるため、開発者はパッケージを自動更新しながら、望ましくない互換性のない変更を回避できます。[ 8 ] npm では、開発者がパッケージを特定のバージョンでタグ付けするためのバージョンバンピングツールも提供されています。[ 9 ] npm では、 [ 10 ]ファイルも提供されており、これには、でセマンティックバージョニングを評価した後にプロジェクトで使用される正確なバージョンのエントリが含まれています。 package-lock.jsonpackage.json
npxコマンドはNode Package eXecuterの略で[11]、パッケージをインストールせずに実行します。[ 12 ]:22
npmのコマンドラインインターフェースクライアントを使用すると、ユーザーはレジストリで利用可能なJavaScriptモジュールを使用および配布できます。[ 13 ] npmバージョン6では、開発者がインストール済みパッケージのセキュリティ上の脆弱性を特定して修正するのに役立つ監査機能が導入されました。[ 14 ]セキュリティ上の脆弱性の情報源は、Node Security Platform(NSP)で見つかったレポートから取得され、npmによるNSPの買収以来、npmに統合されています。[ 15 ]
レジストリ内のパッケージはECMAScriptモジュール(ESM)またはCommonJS形式で、 JSON形式のメタデータファイルが含まれています。[ 16 ] npmのメインレジストリでは310万以上のパッケージが利用可能です。[ 17 ]レジストリには提出のための審査プロセスがないため、そこに見つかったパッケージは潜在的に低品質、安全でない、または悪意のあるものである可能性があります。[ 16 ]代わりに、npmはユーザーからの報告に基づいて、低品質、安全でない、または悪意のあるポリシー違反のパッケージを削除します。[ 18 ] npmはダウンロード数や依存パッケージ数などの統計情報を公開し、開発者がパッケージの品質を判断できるようにしています。[ 19 ] npmは内部的にNoSQL Couch DBを利用して公開データを管理しています。[ 20 ]
npm(元々はNode Package Managerの略)は、2010年にIsaac Z. Schlueterによって作成されました。これは、JavaScriptエコシステムにおける既存のモジュールパッケージングシステムが不十分であると考えたためです。Schlueterは、 PHPのPEARやPerlのCPANといった既存のツールの影響を受け、 Node.jsランタイム向けに設計された軽量でコミュニティ指向のパッケージマネージャーの開発を目指しました。[ 21 ]
npmは、Node.jsパッケージの管理機能が限られていた以前のシェルスクリプトベースのツールpmのより優れた代替として導入されました。[ 22 ] npmの最初のバージョンは2010年1月12日にリリースされました。[ 23 ]
時が経つにつれ、npmはNode.js開発者コミュニティでますます採用されるようになりました。その使いやすさ、スピード、そして再利用可能なコードを配布できる能力は、パッケージマネージャーとしての広範な利用に貢献しました。効率的な依存関係管理とオープンソースライブラリの共有を可能にすることで、JavaScriptエコシステムの発展に重要な役割を果たしました。
2014年、シュルーターとローリー・ヴォスによってカリフォルニア州オークランドにnpm, Inc.が設立され、npmレジストリの保守と関連サービスの提供を監督しました。[ 24 ]
2018年7月、ブライアン・ボーゲンスバーガー氏がnpm社のCEOに就任した。在任中、同社はレジストリのパフォーマンスや組織の透明性に関する懸念など、技術面とコミュニティ面の両方の課題に直面した。[ 25 ]ヴォス氏は2019年7月に退社し、ボーゲンスバーガー氏も同年9月に退社した。[ 26 ]
2020年3月、npm, Inc.はMicrosoftの子会社であるGitHubに買収されました。この買収は、npmレジストリのインフラストラクチャの改善とGitHubの開発者ツールとの統合強化に向けた一歩として発表されました。[ 27 ]
買収後、GitHubはパブリックnpmレジストリを開発者コミュニティに無料で公開し続けることを約束しました。また、セキュリティ機能の強化、コマンドラインツールの改善、GitHub Actionsによる公開サポートなどの機能強化も発表しました。
2025年現在、npmは最も広く利用されているソフトウェアパッケージレジストリの一つであり、膨大な数のオープンソースパッケージをホストし、定期的に数十億件のダウンロードを提供しています。JavaScriptとWeb開発ワークフローの中心的なインフラストラクチャコンポーネントとして、引き続き機能しています。
left-pad2016年3月、個人のソフトウェアエンジニアであるAzer Koçulu氏とKikleft-padとの間で命名紛争が起きた結果、というパッケージが非公開になった。[ 28 ] [ 29 ]このパッケージはプラットフォーム上で非常に人気があり、何千ものプロジェクトに依存し、削除されるまでに1500万回ダウンロードされていた。[ 28 ] [ 30 ] BabelやWebpackなど、JavaScriptエコシステムに不可欠ないくつかのプロジェクトがこれに依存していたため、使用できなくなった。[ 31 ]このパッケージは3時間後に再公開されたが、[ 32 ]広範囲にわたる混乱を引き起こしたため、npmは非公開に関するポリシーを変更し、今後同様の事態が起きないようにした。[ 33 ]left-pad
flatmap-stream2018年11月、人気パッケージのバージョン3.3.6に、依存関係として悪意のあるパッケージが追加されていたことが発覚しましたevent-stream。[ 34 ]この悪意のあるパッケージは、特定のアプリケーションからビットコインをflatmap-stream盗む暗号化されたペイロードを含んでいました。[ 35 ]
pac-resolver2021年5月、pac-resolver週300万回以上ダウンロードされているnpmパッケージに、リモートコード実行の脆弱性があることが発見されました。[ 36 ]この脆弱性はパッケージが設定ファイルを処理する方法に起因しており、バージョン5以降で修正されました。[ 37 ]
colorsそしてfaker2022年1月、人気パッケージのメンテナーがcolors変更をプッシュしたところ、無限ループでゴミテキストが出力された。[ 30 ]メンテナーはまた、別の人気パッケージであるのリポジトリとそのnpm上のパッケージをクリアし、「アーロン・シュワルツに一体何が起こったのか?」fakerと書かれたREADMEに置き換えた。[ 38 ]
node-ipcそしてpeacenotwar2022年3月、パッケージのメンテナーである開発者Brandon Nozaki Miller は、パッケージに依存関係としてnode-ipcを追加しました。は、ベラルーシまたはロシアのIPアドレスを持つマシンのハードドライブの内容を再帰的にハートの絵文字で上書きします。また、このパッケージは、ロシアのウクライナ侵攻に抗議するメッセージを含むテキストファイルをマシンに残します。依存関係として使用するVue.jsは、その依存関係を安全なバージョンに固定しなかったため、Vue.jsの一部のユーザーは、 最新バージョンを使用していればこのパッケージを入手できました。[ 39 ] [ 40 ]このパッケージは、 Unity Hubのバージョン3.1にも依存関係として一時的に存在していました。ただし、同日に修正プログラムがリリースされ、依存関係が削除されました。[ 41 ]peacenotwarpeacenotwarnode-ipcpeacenotwar
bignum2023年5月、複数のnpmパッケージが悪用され、影響を受けたマシンからユーザーの認証情報や情報が盗まれたことが判明しました。研究者らは、これらのパッケージがAmazon S3バケットとコマンドラインツールbignumを悪用したエクスプロイトによって侵害されたことを発見しました。 [ 42 ]node-gyp
2025年9月、サプライチェーン攻撃の一環として、最大18個の人気npmパッケージがマルウェアに感染しました。パッケージは、パッケージメンテナーに対するフィッシング攻撃によって侵害されました。アカウントが侵害された後、攻撃者はマルウェアを仕込んだパッケージを公開し始めました。マルウェアはブラウザ内で暗号通貨の取引を傍受し、攻撃者のアカウントにリダイレクトしました。[ 43 ] [ 44 ]
2025年9月には、「Shai-Hulud」というニックネームの自己複製型ワームが登場しました。このワームは、感染したシステムからGitHub開発者の認証情報を盗み出し、他のプロジェクトに拡散します。9月16日時点で、このワームは187以上のパッケージに影響を与えています。[ 45 ]
2025年11月、Amazon Web Servicesの研究者は、npmでホストされている15万以上のパッケージがTeaブロックチェーントークンファーミングキャンペーンに関連していることを発見しました。[ 46 ] [ 47 ]
モジュラーJavaScriptをインストールするためのnpmの代替として、 pnpm、Yarn、[ 48 ] 、 Bun、Denoなど、オープンソースの選択肢は数多くあります。DenoとBunもJavaScriptランタイムを提供していますが、Denoだけがnpmレジストリやその他の集中型リポジトリから独立して動作し、[ 49 ]、npmレジストリのサポートは2024年1月現在も進行中の作業対象となっています。[ 50 ]これらはすべてパブリックnpmレジストリと互換性があり、デフォルトでそれを使用しますが、クライアント側のエクスペリエンスが異なり、通常はnpmクライアントと比較してパフォーマンスと決定論性を向上させることに重点が置かれています。[ 51 ]
{{citation}}: CS1 maint: ISBNによる作業パラメータ(リンク)