この記事は、ラクスパートナーズ AdventCalendar 2025の21日目の記事です。
(個人で25日連続投稿にチャレンジ中のカレンダーになります)
今回は、人気なJavaScriptパッケージマネージャーであるnpm、yarn、pnpmについて特徴をまとめていこうと思います。
(各々のコマンドには触れず、概要だけまとめたいと思います)
そもそもパッケージマネージャーとは
パッケージマネージャーとはその名のとおりパッケージを管理するソフトウェアやシステムのことです。一言でパッケージマネージャーと言っても色々ありますが、大まかには以下の二種類に分けられます。
- OSレベルの機能やソフトウェアパッケージを管理するもの
- ソフトウェア開発時に使用する機能部品や実行部品を管理するもの
引用元:https://www.hitachi-solutions.co.jp/sbom/blog/2023033101/
今回ご紹介するnpm、yarn、pnpmの場合は、後者の 「ソフトウェア開発時に使用する機能部品や実行部品を管理するもの」 にあたります。
「Node Package Manager」という名前にもある通り、いずれもJavaScriptのパッケージマネージャーです。
なぜパッケージマネージャーが必要なのか
パッケージ同士で発生する依存関係を管理するために、パッケージマネージャーは必要となります。
パッケージとは、特定の機能を持つコードのまとまりのことです(ライブラリやフレームワークなど)。
パッケージをインストールすることで、自分で一からコーディングしなくても、複雑な機能を実装したり、効率的に開発を進めることができます。
しかし、パッケージをインストールすると、
「パッケージAを動かすにはパッケージBが必要になる」
「さらにパッケージBを動かすには、パッケージCが必要になる」
といった依存関係も発生します。
便利だからといって多くのパッケージをインストールすると、その分だけ依存関係も複雑になり、時にはプロジェクトが動かなくなる可能性も出てきます。
こういったパッケージの管理を楽にし、依存関係を解消するのがnpm、yarn、pnpmの役割となります。
npm
npmは、3つの中で最も古い歴史を持つ、世界最大級のパッケージマネージャーです。
Node.js公式のパッケージマネージャーであり、Node.jsをインストールするとnpmもセットでインストールされます。
ドキュメントによると、npmは以下3つの要素で成り立っています。
ウェブサイト
npmのウェブサイトでは、JavaScriptのパッケージを検索して、パッケージに関する情報を確認することができます。
CLI(Command Line Interface)
私たち開発者がいつも使っているCLI(コマンドプロンプトやターミナルなど)からnpmのコマンドを実行することで、パッケージのインストールなどの操作を行います。
レジストリ
npmが管理しているJavaScriptのパッケージは、npmレジストリというところに保存されています。
パッケージをこのnpmレジストリに公開することで、他の開発者も同じパッケージをnpmレジストリからインストールできるようになります。
yarn
FaceBookが2016年に公開したJavaScriptのパッケージマネージャーです。
Node.js非公式のパッケージマネージャーなので、自分でインストールする必要があります。
以下のような特徴があります。
- 複数のパッケージを並行してインストールするため、npmよりもインストール速度が速い
- npmよりセキュリティ面で優れている
- npmと互換性がある(同じプロジェクトで併用できる)
(個人的には一つのプロジェクトにnpmとyarnを併用するのは避けたほうが安全だと思いますが、一応共存可能のようです)
pnpm
pnpmは2016年に公開されました。
「performant npm(効率的なnpm)の略です。
以下の特徴があります。
- npmよりも高速(最大2倍)
- ディスク容量の効率化
最大の特徴がこのディスク容量の効率化です。
具体的には、以下のような仕組みになっています。
- パッケージをインストールするとき、グローバルストレージに一度だけ保存する
- 保存されたパッケージのファイルは1箇所からハードリンクされる(一つのファイルに複数のファイル名が作成されること)
- 複数のプロジェクトが一つのファイルを参照するので、追加のディスク領域が発生しない
npmやyarnの場合は、パッケージをインストールすると各プロジェクトのnode_modulesに保存されます。そのため、全く同じライブラリを使っていても、各プロジェクトでインストールする必要があります。もちろん、インストールした分だけディスク領域がかさみます。
しかし、pnpmの場合はグローバルストレージに保存されたものを共有すれば良いだけのため、複数のプロジェクトで同じバージョンのパッケージを使うことができます。
これが、pnpmがnpmやyarnよりもディスク容量の効率化に優れていると言われている理由です。
以上となります。
調べてみると、yarnやpnpmの方が多くのメリットがあり、npmの上位互換のような印象を感じました。
普段はnpmで開発することが多いのですが、新規プロジェクトの開発があればぜひyarnやpnpmの導入も検討していきたいと思います。
ここまで読んでいただき、ありがとうございました。
参考
以下参考文献です。
ありがとうございました🙇♂️