JavaScriptに関するお知らせ

SINCE2019
>
【JS】yarnからnpmに戻った僕が再びyarnにした理由

【JS】yarnからnpmに戻った僕が再びyarnにした理由


こんにちは!パッケージより自分を管理したいMizutani(@sirycity)です。GW明けらへんからダラダラしたテンションを引きずっちゃうよね。

今日はパッケージマネージャーを再びnpmからyarnに変えた話です。なお、本記事ではyarnv1の話をします。

はじめに

僕のパッケージマネージャー歴についてです。読み飛ばして。

  • 2017年にフロントエンドエンジニアになり、最初は何も疑問を持たずnpmを使っていました。最初はそうだよね。
  • 2019年にパフォーマンスの良さと新しい技術に惹かれ、yarnに変えました。
  • 2020年にyarnとのパフォーマンス差が縮まってきたことに気づき、標準であるnpmに変えました。
  • そして2021年、再び僕はyarnに変えました。

npm→yarn→npm→yarn。確かに言えることは、僕は飽き性であるということです。

再びyarnに変えた理由

ちなみに前回yarnからnpmに変えた時の理由を書いた記事です↓併せてどうぞ!

【JS】yarnの長所とyarnからnpmに戻ってきた理由

パフォーマンスが良い

これが最大の理由です。というかyarnの方が遅かったら誰もyarn使わんわな。

前回の記事ではyarnの方がちょっとくらい速くてもそもそもパッケージマネージャーなんてあんま使わんみたいなことを書きました。(ちなみに他の記事で内容が取り上げられたりして僕は大喜びしました。ありがとうございます)

npmとyarnとpnpmの違い2021

しかしあれから月日が経ち少し考えは変わりました。

パッケージマネージャー、けっこう使います。使います。特にCIで使うという用途をあまり考慮していませんでした。CIはガンガン回ります。特に1日に何十コミットもするようなweb系では。そうなるとやっぱり1秒でもパイプラインを速くしたい。スピード厨の血が滾ります。実際に速くなるのは数秒とか、node_modulesはキャッシュしてあるから変わらないとか、そんなのは良いんです。少なくともyarnにして遅くなることはないでしょう。

voltaでyarnの管理が簡単になった

これも大きな理由です。というか理由はこの2つだけです。

npmの長所としてNode.jsを入れると勝手に付いてくるからセットアップが楽ってのがあります。yarnはnodeとは別にインストールしなきゃいかん。だったら別に最初からくっ付いてるnpmを使おうかってなりますよね。

ところがVoltaはNode.jsのバージョン管理ツールでありながらnpmやyarnのバージョンも管理できちゃうんです。すごい!これはnpmとかyarnのバージョンによる挙動の違いを心配しなくて良い...って主旨の機能なんですが、副作用として 「nodeに同梱されている」というnpmの長所がなくなるって側面があります。普通にnpm使うと 「nodeについて来るnpmをバージョン気にせず使う」 ことが多いですが、voltaを使うと 「nodeもnpmも設定ファイルのバージョンを使う」 or 「nodeもyarnも設定ファイルのバージョンを使う」 みたいな開発環境になります。

{
  "volta": {
    "node": "16.1.0",
    "npm": "7.12.0"
  }
}
{
  "volta": {
    "node": "16.1.0",
    "yarn": "1.22.10"
  }
}

どっちにしろ両方ともバージョンを指定することになるので、npmだろうがyarnだろうが手間は変わらんってことですね。

余談ですが、プログラミング言語をインストールするとパッケージマネージャーが同梱されているってのはよく考えてみれば不思議ですね。ユニクロで服買ったらファミチキが付いてくるようなものです。pythonでも最近のバージョンだとpipが付いてきたりするので、この形が標準になるんでしょうかね。

さいごに

前回の最後にyarnが標準になってくれればいいみたいなこと書きましたが、あれから1年、npmはMicrosoftのものになってしまいました。こんなところでもMicrosoft(npm) vs Facebook(yarn) が見られるとは胸熱ですね。

ところでvoltaはpnpmをサポートする案があるらしいです。これがリリースされたらまたpnpmに浮気しようかな。んでもっと待つとyarn2がサポートされてまたyarnに戻ったりして。パッケージマネージャーが混沌としてるのはJSの良さでもあり悪さでもありますね。以上。



PREV
2021-05-10
【CSS】Web制作でTailwindCSSを使おうとした時に起こる問題

NEXT
2021-05-16
【JS】Voltaのバージョン指定を単一のファイルに切り出す