新しいJavaScriptパッケージマネージャー「Yarn」について調べた
先日、JavaScriptの新たなパッケージマネージャーYarnが公開され、フロント界隈で話題なので調べた。
Yarnとは
Yarnは、FacebookがGoogle等の開発者と協力して開発したJavaScriptのパッケージマネージャーである。 npmとBowerのレジストリを使用するため、既にnpmやBowerで依存関係を管理している場合、導入のコストはかなり低い。 また、一度インストールしたパッケージはキャッシュされるため、オフラインでもインストールが可能である点は嬉しい。
以下、公式ドキュメントより引用。
Fast
Yarn caches every package it downloads so it never needs to download the same package again. It also parallelizes operations to maximize resource utilization so install times are faster than ever.
Yarnは一度ダウンロードしたパッケージをキャッシュするため、再度同じパッケージをダウンロードする必要がない。また、リソースを最大限活用するために実行を並列化しているので、従来よりも高速である。
Reliable
Using a detailed, but concise, lockfile format, and a deterministic algorithm for installs, Yarn is able to guarantee that an install that worked on one system will work exactly the same way on any other system.
詳細であるが簡潔なlockfileのフォーマットと、ある決定的なアルゴリズムを用いて、他の環境においても、全く同じインストール結果を保証できる。
Secure
Yarn uses checksums to verify the integrity of every installed package before its code is executed.
Yarnは、チェックサム(誤り検出符号)を使用し、コードが実行される前に各パッケージが改ざんされていないか確認する。
インストール
macであればhomebrewでインストールできる。nodeが入ってなければnodeもインストールしてくれる。
$ brew install yarn
またはnpmで。
$ npm install -g yarn
Yarnの使い方
すでにnpmでパッケージを管理をしていたら、Yarnへは簡単に移行することができる。 npmと同じpackage.json
フォーマットが使用でき、npmレジストリからインストールすることができるため、 既にnpmでパッケージ管理をしている場合、Yarnへの移行は簡単にできる。
既存のnpmプロジェクトで依存をインストールするには以下のコマンドを実行。
$ yarn
これにより、お馴染みのnode_modules
フォルダー配下に依存パッケージがインストールされる。 npmのv3同様にフラットな階層構造で依存パッケージがインストールされ、重複している依存は整理して展開してくれるみたい。
npmとのCLI比較
主要なものを抜粋。
npm | Yarn |
---|---|
npm install | yarn install |
npm install [package] | (N/A) |
npm install [package] --save | yarn add [package] |
npm install [package] --save-dev | yarn add [package] --dev |
npm install --global [package] | yarn global add [package] |
npm uninstall [package] | (N/A) |
npm uninstall [package] --save | yarn remove [package] |
npm uninstall [package] --save-dev | yarn remove [package] |
rm -rf node_modules && npm install | yarn upgrade |
install
やuninstall
といったシステマティックな単語から、add
やremove
などの口語的で馴染みやすい単語になっている。 また、package.json
に変更を加えずにパッケージをインストールするオプションがない。
yarn.lock
Yarnを使って依存パッケージをインストールすると、yarn.lock
ファイルが同時に生成される。 これには、node_modules
にインストールされた全てのパッケージのバージョンが記載される。 git等のバージョン管理システムに含めることで、他のマシンでも全く同じバージョンの依存パッケージをインストールすることができる。
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
[email protected]^1.0.0:
version "1.0.3"
resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
[email protected]^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
dependencies:
package-4 "^4.0.0"
[email protected]^3.0.0:
version "3.1.9"
resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
dependencies:
package-4 "^4.5.0"
package-4^@4.0.0, [email protected]^4.5.0:
version "4.6.3"
resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
まとめ
npmやBowerと互換性があるため、手間なく導入できるため良さそう。 また、オフラインでもキャッシュからインストールできるため、ネットがない環境やテザリングが必要な環境下でも開発ができるのが良い。 何より速度面の恩恵が受けられるのは大きいので、積極的に使っていこうと思った。あと絵文字がかわいい🐈