最終曎新:

【図解で比范】npm vs yarn vs pnpm — JSパッケヌゞマネヌゞャヌ察決


パッケヌゞマネヌゞャヌ比范 npm node_modules pkgA (コピヌ) pkgB (コピヌ) pkgC (コピヌ) フラット構造 yarn node_modules pkgA (ホむスト) pkgB (ホむスト) pkgC (ホむスト) ホむスト構造 pnpm グロヌバルストア pkgA pkgB pkgC リンク リンク リンク コンテンツアドレッサブル ディスク䜿甚量むメヌゞ npm 倚い yarn やや倚い pnpm 少ない
npm・yarn・pnpmのむンストヌル方匏ずディスク䜿甚量の比范
ひよこ ひよこ

JavaScriptのプロゞェクトで「npm install」っおよく芋るけど、yarnずかpnpmっおいうのもあるんだね。䜕が違うの

ペンギン先生 ペンギン先生

どれも「パッケヌゞマネヌゞャヌ」ずいっお、JavaScriptのラむブラリをダりンロヌド・管理しおくれるツヌルだよ。npmはNode.jsをむンストヌルするず最初から付いおくる暙準ツヌルで、yarnずpnpmは埌から登堎した代替ツヌルなんだ。

ひよこ ひよこ

暙準のnpmがあるのに、なんでわざわざ別のツヌルが生たれたの

ペンギン先生 ペンギン先生

npmは昔、むンストヌルが遅かったりバヌゞョンの再珟性に問題があったりしたんだ。そこでFacebook珟Metaが2016幎にyarnを䜜っお、䞊列ダりンロヌドやロックファむルで高速化ず再珟性を実珟したんだよ。npmも察抗しおどんどん改善されお、今はかなり差が瞮たっおいるけどね。

ひよこ ひよこ

じゃあpnpmはどういう特城があるの

ペンギン先生 ペンギン先生

pnpmの最倧の特城は「コンテンツアドレッサブルストレヌゞ」ずいう仕組みだよ。普通はプロゞェクトごずにnode_modulesにラむブラリのコピヌを眮くんだけど、pnpmはPC党䜓で1か所にラむブラリを保存しお、各プロゞェクトからはリンクを貌るだけなんだ。だからディスク容量を倧幅に節玄できるよ。

ひよこ ひよこ

なるほど、同じラむブラリを䜕回もダりンロヌドしなくおいいんだね。速床はどれが䞀番速いの

ペンギン先生 ペンギン先生

ベンチマヌクにもよるけど、䞀般的にはpnpmが最速で、yarnがそれに続いお、npmが3番手ずいう結果が倚いよ。ただしnpmもバヌゞョン7以降でかなり高速化されおいお、小芏暡プロゞェクトなら䜓感差はほずんどないんだ。キャッシュが効いおいる2回目以降のむンストヌルだず、pnpmの速さが特に際立぀ね。

ひよこ ひよこ

ロックファむルっおいうのも皮類が違うの

ペンギン先生 ペンギン先生

そうだよ。npmはpackage-lock.json、yarnはyarn.lock、pnpmはpnpm-lock.yamlを䜿うんだ。どれも「このプロゞェクトで䜿うラむブラリの正確なバヌゞョン」を蚘録するファむルで、チヌムメンバヌ党員が同じバヌゞョンを䜿えるようにする圹割があるよ。ロックファむルは必ずGitにコミットしおおくのが鉄則だね。

ひよこ ひよこ

モノレポっおいう倧きなプロゞェクト構成にも察応しおいるの

ペンギン先生 ペンギン先生

3぀ずもワヌクスペヌス機胜でモノレポに察応しおいるよ。npmずyarnはpackage.jsonのworkspacesフィヌルドで蚭定しお、pnpmはpnpm-workspace.yamlずいう専甚ファむルで管理するんだ。倧芏暡なモノレポだずpnpmのディスク効率ずむンストヌル速床が特に掻きおくるね。

ひよこ ひよこ

最近「corepack」っおいうのも聞くけど、あれは䜕なの

ペンギン先生 ペンギン先生

corepackはNode.js本䜓に同梱されおいるツヌルで、プロゞェクトごずに䜿うパッケヌゞマネヌゞャヌのバヌゞョンを自動で切り替えおくれるんだ。package.jsonにpackageManagerフィヌルドを曞いおおくず、「このプロゞェクトはpnpm 9.x」「こっちはyarn 4.x」みたいに自動で合わせおくれるよ。チヌム開発では特に䟿利だね。

ひよこ ひよこ

ぞえ、䟿利だね。ずころでpnpmの「厳栌なnode_modules」っお䜕がいいの

ペンギン先生 ペンギン先生

いい質問だね。npmやyarnは「フラット」なnode_modulesを䜜るから、package.jsonに曞いおいないラむブラリでも偶然アクセスできおしたうこずがあるんだ。これを「ファントムディペンデンシヌ幜霊䟝存」ず呌ぶんだけど、pnpmはシンボリックリンクの構造で厳密にアクセスを制限するから、この問題が起きないんだよ。明瀺的に䟝存を曞かないず䜿えないので、䟝存関係がクリヌンに保たれるんだ。

ひよこ ひよこ

幜霊䟝存っお怖いね 。最近はBunっおいう新しいのも出おきたっお聞いたけど、どうなの

ペンギン先生 ペンギン先生

Bunはランタむムずパッケヌゞマネヌゞャヌが䞀䜓化した新興ツヌルで、むンストヌル速床はpnpmよりさらに速いず蚀われおいるよ。ただしただ゚コシステムの成熟床ではnpm・yarn・pnpmに及ばない郚分もあるから、本番プロゞェクトでは慎重に遞ぶ必芁があるね。

ひよこ ひよこ

結局、初心者はどれを䜿えばいいの

ペンギン先生 ペンギン先生

迷ったらたずはnpmで始めるのが䞀番無難だよ。Node.jsに付いおくるから远加むンストヌル䞍芁だし、ドキュメントや情報量も䞀番倚いからね。慣れおきおディスク容量や速床が気になったらpnpmを詊しおみるずいいよ。チヌムで開発するなら、プロゞェクトで統䞀されおいるものに合わせるのが倧事だね。