🪛

パッケージマネージャー 比較 - npm, yarn, pnpm

2024/05/23に公開

パッケージマネージャーとは?

プロジェクトが依存しているパッケージを効果的にインストール、管理、更新、削除できるように支援するシステムです。
JavaScriptでプロジェクトを進めていると、そのプロジェクトに必要な様々なパッケージがあり、これらのパッケージをインストールし、また管理する必要がある場合があります。これらのパッケージを依存関係として管理するのがパッケージマネージャーです。

npm (Node Package Manager)

npmはパッケージマネージャーの始まりとも言えます。
Node.jsに内蔵されているため、追加のインストールが必要ありません。
しかし、これらのパッケージは互いに依存しているため、一つの問題が発生すると他のものも機能しなくなる可能性があります。そのため、これを管理するためにpackage.jsonを使用します。

// 初期環境設定
npm init 

npx (Node Package Runner)

npxはnpmバージョン5.2.0以上に含まれているツールで、ライブラリをPCに保存せずに直接実行できるようにします。
これは特定のバージョンのパッケージを実行したり、一時的にパッケージを使用したりする場合に便利です。

// npx使用例
npx create-react-app my-app

yarn

Yarnは、従来のnpmの欠点を補うために登場したパッケージマネージャーで、2017年にFacebookの開発者とGoogleの開発者が共同で発表したものです。
実際にはnpmと大きな違いはなく、プロセスもほぼ同じですが、大きな違いはセキュリティです。
npmはセキュリティの問題が大きな欠点でしたが、Yarnはそのnpmの脆弱性であったセキュリティ問題を解決し、より安全性を保証しているという大きな利点を持っています。

Yarnのもう一つの利点は高速性です。
複数のパッケージを順次インストールするのではなく、並行してインストールするため、速度の面でもnpmより改善されています。
このような理由から、最近ではnpmよりもYarnを多く使用する傾向があります。
特にReactプロジェクトの場合、Yarnがより多く使用されています。

add: Yarn Berryという上位バージョンを通じて多くの開発と改善が行われていますが、現在のところYarn BerryよりもYarnを多く使用しているようです。

Yarnの場合、npmとは異なり、別途インストールが必要です。そのため、まずnpmを使用してインストールする必要があります。

// globalで インストール
npm install -g yarn

pnpm

pnpmは2017年にZoltan Kochanという開発者が発表したパッケージマネージャーで、「performant npm」の略称でもあります。
効率的なnpmという意味で、その名の通り効率性が特徴であり、利点となるパッケージマネージャーです。

pnpmの場合、プロジェクトごとにnode_modulesに毎回パッケージをインストールするのではなく、グローバルストレージに一度だけパッケージを保存することで、ストレージスペースを節約できるという非常に大きな利点があります。
つまり、pnpmを使用すれば同じライブラリを重複してインストールする必要がないということです。

ただし、注意点として、特定のパッケージを一度だけインストールするため、プロジェクトごとにリンクすると互換性の問題が発生する可能性があります。そのため、プロジェクト間で互換性の問題が発生しないようにバージョン管理を必ず行う必要があります。

どのパッケージマネージャーを使用すべきか?

あくまで個人的な意見ですが、上記のパッケージは現在使用しても大きな問題がないほど安定しているため、個人の好みやプロジェクトの特性に応じて選択して使用しても大きな問題はありません。
ただし、使用の傾向を見ると、npmとYarnが最も多く使用されており、Yarnが登場した当初はセキュリティの問題からnpmの使用を避けることもありましたが、npmも継続的にセキュリティ改善を行ってきたため、npmを使用するのも良い選択と言えます。

Discussion