宣伝: YouTubeで初心者向けの配信をしています。よかったら覗いていってね😉
yarn
の方が速くて簡潔です。
また必要な状況はかなり限定的ですがyarnにあってnpmにない機能も存在します。それに関する内容にこの記事で若干触れました。気になる方はご覧ください。
(比較した方法・バージョンとかは下を読んでください。誤りがあれば意見いただけると嬉しいです。)
node.js使う前提なんですが、npmは最初から入っていて、yarnは自分で入れないといけません。 yarnは独自のキャッシュサーバー持ってるらしい。 もうすでに速度あまり変わらないのでは。
おそらくこの2つが主に開発速度に影響するのではないかと思います。
npm_tmp
yarn_tmp
ディレクトリを作成し、 $ npm init -y
$ yarn init -y
でそれぞれ初期化したプロジェクトの package.json
の devDependencies
にライブラリ自体の依存関係が多い、みなさんおなじみ webpack
を加えて、インストールする速度を $ time npm install
$ time yarn install
で比較してみようと思います。
{
"name": "npm_tmp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"webpack": "4.19.0"
}
}
{
"name": "yarn_tmp",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"webpack": "4.19.0"
}
}
CPU: 2.8 GHz Intel Core i7 MEM: 16 GB 2133 MHz LPDDR3 GPU: Intel HD Graphics 630 1536 MB NETWORK: 141.8Mbps/10.3Mbps (Download/Upload)
yarn: 1.9.4 npm: 6.4.1
*ネットワーク速度はGoogleでspeed testと検索した時に一番上に出てくるもので計測。 詳細はここ
回数\速度(real : user : sys) | npm | yarn |
---|---|---|
1 | real: 15.431s<br>user: 21.068s<br>sys: 5.005s | real: 15.328s<br>user: 5.999s<br>sys: 3.006s |
2 | real: 9.252s<br>user: 15.967s<br>sys: 4.234s | real: 5.194s<br>user: 4.455s<br>sys: 2.208s |
3 | real: 8.747s<br>user: 15.527s<br>sys: 4.120s | real: 5.207s<br>user: 4.506s<br>sys: 2.225s |
4 | real: 9.396s<br>user: 16.025s<br>sys: 4.229s | real: 5.248s<br>user: 4.562s<br>sys: 2.247s |
5 | real: 9.249s<br>user: 15.898s<br>sys: 4.222s | real: 7.051s<br>user: 4.643s<br>sys: 2.294s |
average | real: 10.209s<br>user: 16.897s<br>sys: 4.362s | real: 7.606s<br>user: 4.833s<br>sys: 2.396s |
事実だけ見ると、全てにおいて yarn
の方が速いです。
両者とも、1回目のインストールにかかった実時間はこの環境ではあまり変わりませんでした。 しかし、userとsysの結果がかなり乖離しています。userに関しては約3倍以上。npmは依存関係の処理を並列化して高速化したんでしょうか。yarn側はuser+sysしても実時間と乖離があるので、なんとなくネットワークIOな気がします。サーバー側で何か(独自で依存ライブラリの解決を)やってるんでしょうか。 なのでもしかすると1CPUのPCだと、npmは論外の遅さになるかもしれません(推測なので持っている方いたら検証してみてください・とはいえ開発者は普段1CPUのPCとか使ってないから意味のない話だとは思いますが…わりとこのPCスペックがいいので比較としては面白そうだなと思いました)
大きく違うところで主にやりたいこと2つは、
だと思うのでこの2点を比較します。
$ npm install --save(-dev) xxx
$ yarn add (--dev) xxx
インストールしたライブラリ(xxx)を引数(-t yyy)付きで呼び出す時
$ npm run xxx -- -t yyy
$ yarn xxx -t yyy
$ npm run xxx
$ yarn xxx
この辺りは人によると思いますが(npmも短縮系を使えば短いとか)、yarnの方が簡潔で、実際の開発スタイルにあっていていいと思います。(例えばpackage.jsonに追加せずにinstallすることはチーム開発する上ではやってはいけないし、やらない)
これらを踏まえて、やはりyarnを使おうと思ってます。