はじめに
皆さん馴染みの深いnpm
とyarn
について、違いを意識して使い分けしていますか?
両者ともNode.jsで動作するパッケージマネージャという理解はありましたが、双方の違いについて
あまり意識してませんでした。
ふと気になったので、今回はnpm
とyarn
の概要と違いについてまとめていこうと思います
パッケージマネージャーとは
パッケージマネージャとはその名の通り、パッケージを管理するソフトウェアやシステムのことを指します。
主にシステムのインストールやアンインストール、必要な外部のソフトウェアの自動取得(依存関係の解決)などを行ないます。
大まかに2種類に分けられOSレベルの機能やソフトウェアパッケージを管理するもの
とプログラミング言語
向けもの`があります。
npmとは
npmとはNode Package Manager
の略称で2010年1月にリリースされたJavaScript公式の
パッケージマネージャーのことです。
yarnとは
yarnとはYet Another Resource Negotiator
の略称で、2016年10月にFacebookによってリリースされた「npm」の代替手段です。
当時のnpmはインストールは時間がかかりセキュリティに関してもパフォーマンスに関して
問題が山積みでした。
それらを解決したのが、当時のyarn
になります。
セキュリティにおいての改善点ですが、インストール時にパッケージが不正に変更されていないかなどをチェックサムを用いて検証することができ、安全なパッケージのインストールを可能にしました。
また、パッケージ管理においてはyarn.lock
というファイルが作成され、それにはインストールしたプログラムが使用している依存プログラム/パッケージのバージョンが明確に書き込まれます。
これにより、依存プログラム/パッケージを再インストールした際も整合性が保たれるので、デプロイ時にバージョンが違って動かなるといったことは無くなりました。
結論どっちが良いの?
現在はどちらでも良いと言うのが結論です。
昔はnpmのインストールが遅い、yarn独自の機能がある等ありましたが現在では
lock
ファイル等のyarnの機能もnpmに搭載されてパフォーマンスにほぼ差異はなくなっております。
ただ、個人的にはパッケージをインストールする際にyarn
と打っただけでインストールできるのでyarn
の方が好みです。
因みに速度については npm v7 (2020-10-13) でかなり改善されて同等のものになりました。
リリースノート等あるので、気になる方は下記を見てください!
参考記事
パッケージマネージャーとは?わかりやすい仕組みの解説~直接使っていないOSSとは~
パッケージ管理システム
node_modulesの問題点とその歴史 npm, yarnとpnpm
npmとは yarnとは
【JS】yarnの長所とyarnからnpmに戻ってきた理由