| 原作者 | アイザック・Z・シュルーター |
|---|---|
| 開発者 | npm, Inc. ( GitHubの子会社、[1] Microsoftの子会社) |
| 初回リリース | 2010年1月12日[2] |
| 安定リリース | 10.8.3 [3]
/ 2024年8月28日 |
| リポジトリ |
|
| 書かれた | JavaScript |
| プラットフォーム | クロスプラットフォーム |
| タイプ | パッケージマネージャー |
| ライセンス | 芸術的ライセンス 2.0 |
| Webサイト | ホームページ |
npmは、 GitHubの子会社であるnpm, Inc.が管理するJavaScriptプログラミング言語のパッケージマネージャーです。npmはJavaScriptランタイム環境Node.jsのデフォルトのパッケージマネージャーであり、Node.jsインストーラーの推奨機能として含まれています。[4]
これは、npm とも呼ばれるコマンドライン クライアントと、 npm レジストリと呼ばれるパブリック パッケージと有料プライベート パッケージのオンライン データベースで構成されています。レジストリにはクライアントからアクセスし、利用可能なパッケージは npm Web サイトから参照および検索できます。パッケージ マネージャーとレジストリは npm, Inc. によって管理されています。
「npm」は一般的に「Node Package Manager」の略語であると理解されていますが、正式には「npmは頭字語ではありません」という意味の再帰的な バックロニムです。 [5]
歴史
npm は、Isaac Z. Schlueter によって、「モジュールのパッケージ化がひどく行われているのを見た」ことと、PEAR ( PHP ) やCPAN ( Perl ) などの他の同様のプロジェクトからインスピレーションを得て開発されました。[6] npm は、シェル スクリプトであるpm の JavaScript 代替品です。[7]
npm, Inc.は2014年に米国カリフォルニア州オークランドで設立され、ローリー・ヴォスが共同設立者となった。ブライアン・ボーゲンスバーガーは2018年7月にCEOとして同社に入社し、2019年9月に辞任した。[8]ボーゲンスバーガーの辞任に先立ち、ローリー・ヴォスは2019年7月に辞任した。[9]
2020年3月、npmはマイクロソフトの子会社であるGitHubに買収されました。
使用法
npm は、特定のプロジェクトのローカル依存関係であるパッケージだけでなく、グローバルにインストールされた JavaScript ツールも管理できます。[10]ローカル プロジェクトの依存関係マネージャーとして使用すると、npm は 1 つのコマンドで、ファイルを通じてプロジェクトのすべての依存関係をインストールできますpackage.json。[11]ファイルでは、各依存関係はセマンティック バージョニング スキームを使用して有効なバージョンpackage.jsonの範囲を指定できるため、開発者はパッケージを自動更新しながら、望ましくない互換性を破る変更を回避できます。[12] npm は、開発者がパッケージを特定のバージョンでタグ付けするためのバージョン バンピング ツールも提供しています。[13] npm は、でセマンティック バージョニングを評価した後、プロジェクトで使用される正確なバージョンのエントリを含む[14]ファイルも提供しています。
package-lock.jsonpackage.json
クライアント
npmのコマンドラインインターフェースクライアントを使用すると、ユーザーはレジストリで利用可能なJavaScriptモジュールを使用および配布できます。[15]
2018年2月、バージョン5.7.0でsudo npmLinuxシステム上で実行するとシステムファイルの所有権が変更され、オペレーティングシステムが永久に破壊されるという問題が発見されました。[16]
npmバージョン6では、開発者がインストール済みパッケージのセキュリティ上の脆弱性を特定して修正するのに役立つ監査機能が導入されました。[17]セキュリティ上の脆弱性のソースは、Node Security Platform (NSP)で見つかったレポートから取得され、npmによるNSPの買収以来npmに統合されています。[18]
レジストリ
レジストリ内のパッケージはECMAScriptモジュール(ESM)またはCommonJS形式であり、 JSON形式のメタデータファイルが含まれています。[19]
メインのnpmレジストリでは310万以上のパッケージが利用可能です。[20]
レジストリには提出のための審査プロセスがないため、そこに見つかったパッケージは潜在的に低品質、安全でない、または悪意のあるものである可能性があります。[19]代わりに、npmはユーザーからの報告に基づいて、ポリシーに違反している低品質、安全でない、または悪意のあるパッケージを削除します。[21] npmはダウンロード数や依存パッケージの数などの統計情報を公開し、開発者がパッケージの品質を判断できるようにしています。[22]
npmは内部的にNoSQL Couch DBを利用して公開データを管理しています。[23]
セキュリティと混乱
左パッド
2016年3月、ソフトウェアエンジニアのAzer Koçulu氏とKikとleft-padの間で命名をめぐる争いの結果、というパッケージが非公開になりました。[24] [25]このパッケージはプラットフォーム上で非常に人気があり、何千ものプロジェクトが依存しており、削除されるまでに1500万回ダウンロードされていました。[24] [26] BabelやWebpackなど、JavaScriptエコシステムに不可欠ないくつかのプロジェクトが依存していたため、使用できなくなりました。[27]このパッケージは3時間後に再公開されましたが、[28]広範囲にわたる混乱を引き起こしたため、npmは今後同様の事態を防ぐために非公開に関するポリシーを変更しました。[29]left-pad
平和ではなく戦争
2022年3月、パッケージのメンテナーである開発者ブランドン・ノザキ・ミラーはnode-ipc、peacenotwarパッケージに依存関係として、ベラルーシまたはロシアのIPアドレスを持つpeacenotwarマシンのハードドライブの内容をハートの絵文字で再帰的に上書きするを追加しました。また、このパッケージは、ロシアのウクライナ侵攻に抗議するメッセージを含むテキストファイルをマシン上に残します。依存関係として使用するVue.jsは、依存関係を安全なバージョンに固定しなかったため、依存関係が最新パッケージとして取得された場合、Vue.jsの一部のユーザーが悪意のあるパッケージの影響を受けることになります。 [30] [31]影響を受ける依存関係は、 Unity Hubのバージョン3.1にも一時的に存在していましたが、同日に修正プログラムがリリースされ、問題が解消されました。[32]node-ipc
その他の注目すべき事件
2018年11月、人気パッケージのバージョン3.3.6に依存関係として悪意のあるパッケージが追加されていたことが発覚しましたevent-stream。[33]と呼ばれるこの悪意のあるパッケージには、特定のアプリケーションからビットコインをflatmap-stream盗む暗号化されたペイロードが含まれていました。[34]
2021年5月、pac-resolver週に300万回以上ダウンロードされているnpmパッケージに、リモートコード実行の脆弱性があることが発見されました。[35]この脆弱性は、パッケージが設定ファイルを渡す方法に起因しており、バージョン5以降で修正されました。[36]
2022年1月、人気パッケージのメンテナーがcolors変更をプッシュしたところ、無限ループでゴミテキストが出力された。[26]メンテナーはまた、別の人気パッケージであるのリポジトリとそのnpm上のパッケージをクリアし、「アーロン・シュワルツに一体何が起こったのか?」fakerというREADMEに置き換えた。[37]
2023年5月、npmパッケージがいくつか悪用され、影響を受けたマシンからユーザーの認証情報や情報が盗まれたことが判明しました。研究者らは、これらのパッケージがAmazon S3バケットとコマンドラインツールbignumに関連するエクスプロイトによって侵害されたことを発見しました。 [38]node-gyp
代替案
モジュラーJavaScriptをインストールするためのnpmの代替となるオープンソースのものは、Yarn、[39]、 Bun、Denoなど多数あります。DenoとBunもJavaScriptランタイムを提供しますが、NPMレジストリまたは中央リポジトリから独立して動作するのはDenoのみであり[40]、NPMレジストリのサポートは2024年1月現在も進行中の作業です。[41]これらはすべてパブリックnpmレジストリと互換性があり、デフォルトでそれを使用しますが、クライアント側のエクスペリエンスが異なり、通常はnpmクライアントと比較してパフォーマンスと決定論性の向上に重点が置かれています。[42]
参照
参考文献
- ^ 「Microsoft所有のGitHubがJavaScriptパッケージマネージャーNpmを買収」GeekWire 2020年3月17日。
- ^ 「npm の最も初期のリリース」。GitHub。2019年1 月 5 日閲覧。
- ^ 「リリース 10.8.3」。2024年8月28日。 2024年9月22日閲覧。
- ^ Dierx, Peter (2016 年 3 月 30 日). 「npm – the Node Package Manager の初心者向けガイド」. sitepoint . 2016 年7 月 22 日閲覧。
- ^ “npm”. npm . 2024年5月15日. 2024年5月14日時点のオリジナルよりアーカイブ。
- ^ Schlueter, Isaac Z. (2013 年 3 月 25 日). 「CommonJS は忘れてください。もう死んでいます。**私たちはサーバーサイド JavaScript です。**」. GitHub .
- ^ 「NPM/Cli」。GitHub。
- ^ チャン、ロザリー。「JavaScriptパッケージスタートアップNPMのCEO、ブライアン・ボーゲンスバーガーが辞任」。Business Insider。Business Insider 。 2021年6月30日閲覧。
- ^ チャン、ロザリー。「NPMの共同設立者兼最高データ責任者ローリー・ヴォスが辞任」。Business Insider。Business Insider 。 2021年6月30日閲覧。
- ^ Ellingwood, Justin. 「npm を使用して Linux サーバー上の Node.js パッケージを管理する方法」。DigitalOcean。2016年10月 22 日閲覧。
- ^ "npm-install". docs.npmjs . 2016年10月22日閲覧。
- ^ "semver". docs.npmjs . 2016年12月3日時点のオリジナルよりアーカイブ。2016年10月22日閲覧。
- ^ "npm-version". docs.npm . 2016年10月29日閲覧。
- ^ Koirala、Shivprasad (2017 年 8 月 21 日)。「Node で package-lock.json が必要な理由は何ですか?」codeproject。
- ^ Ampersand.js. 「Ampersand.js – 学ぶ」. ampersandjs.com . 2016 年7 月 22 日閲覧。
- ^ 「最新バージョンでは重要な Linux ファイルシステムの権限が変更されています」。GitHub。2018年2 月 25 日閲覧。
- ^ npm. 「'npm Audit': 安全でない依存関係を特定して修正する」npm ブログ. 2018 年8 月 14 日閲覧。
- ^ npm. 「Node Security Platform サービスは 9/30 に終了します」。npm ブログ。2018 年8 月 14 日閲覧。
- ^ ab Ojamaa, Andres; Duuna, Karl (2012)。「Node.js プラットフォーム のセキュリティの評価」。2012国際インターネット技術およびセキュアトランザクション会議。IEEE。ISBN 978-1-4673-5325-0. 2016年7月22日閲覧。
- ^ “npm | ホーム”. npmjs.com . 2024年6月27日閲覧。
- ^ 「npm 行動規範: 許容されるパッケージコンテンツ」 。2017年5 月 9 日閲覧。
- ^ Vorbach, Paul. 「npm-stat: NPM パッケージのダウンロード統計」npm-stat.com。 2016 年 8 月 11 日時点のオリジナルよりアーカイブ。2016 年8 月 9 日閲覧。
- ^ 「registry | npm Docs」. docs.npmjs.com . 2021年5月10日閲覧。
- ^ ab Williams, Chris. 「1 人の開発者が 11 行の JavaScript で Node、Babel、および何千ものプロジェクトを破壊した方法」The Register 。2016年4 月 17 日閲覧。
- ^ コリンズ、キース(2016年3月27日)。「一人のプログラマーが小さなコードを削除してインターネットを破壊した方法」Quartz 。 2020年12月23日閲覧。
- ^ ab Sharma, Ax (2022年7月27日). 「プロテストウェアの増加:開発者が自分のコードを妨害する理由」TechCrunch . 2024年5月11日閲覧。
- ^ 「17行のコードがいかにしてシリコンバレーの注目のスタートアップを倒したか」HuffPost 2016年3月24日2024年5月11日閲覧。
- ^ 「kik、left-pad、npm」 。 2017年5月9日閲覧。
- ^ 「非公開ポリシーの変更」 npm Blog (アーカイブ) . 2022年1月23日閲覧。
- ^ 「大規模な妨害行為:有名なnpmパッケージがウクライナ戦争に抗議してファイルを削除」Bleeping Computer . 2022年3月17日閲覧。
- ^ Juha Saarinen (2022年3月17日). 「『Protestware』npmパッケージの依存関係がサプライチェーン攻撃と判定される」. ITニュース. nextmedia .
- ^ Proven, Liam (2022年3月18日). 「JavaScriptライブラリが更新され、ロシアのコンピューターからファイルを消去」。The Register。Situation Publishing。2022年3月18日時点のオリジナルよりアーカイブ。 2022年3月18日閲覧。
- ^ Goodin, Dan (2018年11月26日). 「広く使われているオープンソースソフトウェアにビットコインを盗むバックドアが含まれていた」Ars Technica . 2024年5月11日閲覧。
- ^ Claburn, Thomas. 「リポジトリを確認してください... 暗号通貨を盗むコードがかなり人気のNPMライブラリに潜入(週200万ダウンロード)". www.theregister.com . 2024年5月11日閲覧。
- ^ Sharma, Ax (2021年9月2日). 「毎週300万回ダウンロードされるNPMパッケージに深刻な脆弱性が存在」Ars Technica . 2024年5月11日閲覧。
- ^ Claburn, Thomas. 「週に300万回ダウンロードされるJavaScriptライブラリは、悪質なプロキシ設定によるハイジャックの危険にアプリをさらします」。www.theregister.com 。2024年5月11日閲覧。
- ^ 「Dev が NPM ライブラリの「colors」と「faker」を破損し、数千のアプリが動作しなくなる」Bleeping Computer . 2022 年1 月 9 日閲覧。
- ^ Burt, Jeff. 「npm パッケージへの攻撃で使用されたハイジャックされた S3 バケット」。www.theregister.com。2024年5 月 11 日閲覧。
- ^ 「Hello, Yarn!」npm ブログ2016 年 10 月 11 日。 2016 年12 月 17 日閲覧。
- ^ 「依存関係の管理」。Deno Docs 。 2024年1月6日閲覧。
- ^ 「Node および npm モジュール | Deno Docs」。docs.deno.com 。 2024 年1 月 16 日閲覧。
- ^ Katz, Yehuda (2016年10月11日). 「なぜ私はYarnに取り組んでいるのか」。2016年12月17日閲覧。
外部リンク
- 公式サイト
