新しいJavaScriptパッケージマネージャー「Yarn」について調べた

Oct 24, 2016

先日、JavaScriptの新たなパッケージマネージャーYarnが公開され、フロント界隈で話題なので調べた。

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

installuninstallといったシステマティックな単語から、addremoveなどの口語的で馴染みやすい単語になっている。 また、package.jsonに変更を加えずにパッケージをインストールするオプションがない。

yarn.lock

Yarnを使って依存パッケージをインストールすると、yarn.lockファイルが同時に生成される。 これには、node_modulesにインストールされた全てのパッケージのバージョンが記載される。 git等のバージョン管理システムに含めることで、他のマシンでも全く同じバージョンの依存パッケージをインストールすることができる。


# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
package-1@^1.0.0:
  version "1.0.3"
  resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
package-2@^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"
package-3@^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"
[email protected], package-4@^4.5.0:
  version "4.6.3"
  resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"

まとめ

npmやBowerと互換性があるため、手間なく導入できるため良さそう。 また、オフラインでもキャッシュからインストールできるため、ネットがない環境やテザリングが必要な環境下でも開発ができるのが良い。 何より速度面の恩恵が受けられるのは大きいので、積極的に使っていこうと思った。あと絵文字がかわいい🐈