2017/02/21更新

[NodeJS] npm install を爆速で行うyarnに入門

このエントリーをはてなブックマークに追加            

こんにちは、@yoheiMuneです。
Reactなどの案件をしているとnpm install重たいなーと思っていたら、yarnという高速なツールがあることを知りました。今日はそのyarnについてブログを書きたいと思います。
画像

目次




yarnとは

yarnとはnpmに代わる依存パッケージ管理ツールの1つで、npmに比べて非常に高速に動作します。yarnの特徴は以下の3つで表されています。
Ultra Fast
ローカルPCへのキャッシュや並行ロードなどで速い
Mega Secure
ダウンロードしたモジュールについて、checksumを確認してからコードを実行する(改ざんされていないことを確認する)
Super Reilable
yarn.lockファイルなどを用いてどこでも同じ環境を構築できる
僕の React + Babel + Webpack の環境で試してみたところ、npmだと35秒だったところ、yarnだと23秒(キャッシュありだと13秒)で依存モジュールのインストールが完了しました。速いですね〜。



yarnのインストール

インストール方法はこちら(Mac, Windows, Linux, その他)にあります。例えばMacの場合には、以下のようにHomeBrewでインストールできます。
brew update
brew install yarn
ただ、僕の場合にはbrew install yarnで以下のようなエラーが発生しました。brewでnodejsを入れていなかったのが原因のようです。
$ brew install yarn
Error: You must `brew link node` before yarn can be installed
言われた通りにbrew link nodeをすると、次はこんなエラーが・・・。
$ brew link node
Linking /usr/local/Cellar/node/7.5.0... 
Error: Could not symlink bin/node
Target /usr/local/bin/node
already exists. You may want to remove it:
  rm '/usr/local/bin/node'

To force the link and overwrite all conflicting files:
  brew link --overwrite node

To list all files that would be deleted:
  brew link --overwrite --dry-run node
なので、さらに言われた通りにコマンドを実行します。
$ rm '/usr/local/bin/node'
$ brew link --overwrite node
これで無事に入ったようで、再度以下のコマンドを行うとインストールが成功しました。
$ brew install yarn
最後に以下のコマンドが動けばOKです。
$ yarn --version



yarnプロジェクトを作成する

以下のコマンドでyarnのプロジェクトを作成することができます。
$ yarn init
何度かエンターを押すと以下のpackage.jsonが作成できます(npm initと大体一緒ですね)。
{
  "name": "tmp",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}
ここで例えばReactを追加する場合には、yarn addを使います。
$ yarn add react
devDependenciesとしてインストールする場合には--devまたは-Dオプションを使います。
$ yarn add --dev babel-core
上記の結果、ReactやBabelCoreがpackage.jsonに入りました。
{
  "name": "tmp",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "react": "^15.4.2"
  },
  "devDependencies": {
    "babel-core": "^6.23.1"
  }
}
また、以下のようなyarn.lockファイルが作成されます。これをgitなどにコミットして使うことで、チームメンバー間で同じ環境を作ることができます。
$ head -15 yarn.lock 

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1

ansi-regex@^2.0.0:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"

ansi-styles@^2.2.1:
  version "2.2.1"
  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"

asap@~2.0.3:
  version "2.0.5"
  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"



既存のpackage.jsonをyarnへ移行する

移行するといってもやることは1つだけで、以下のようにyarnコマンドを実行すればOKです。
$ yarn
これでyarn.lockファイルもできて、今後はyarnで運用することができます(速く動くので便利です)。



yarnのコマンド一覧と、npmコマンドとの比較表

yarnのコマンド一覧は以下にあります。基本的にはnpmと同じようなコマンドが用意されています。
https://yarnpkg.com/en/docs/cli/

また、npmとのコマンド比較も用意されています。
https://yarnpkg.com/en/docs/migrating-from-npm#toc-cli-commands-comparison



yarnのキャッシュの一覧と保存先

yarnのキャッシュは、以下のコマンドで確認したり削除したりすることができます。
# キャッシュ一覧を確認する
$ yarn cache ls

# キャッシュの保存先を確認する
$ yarn cache dir

# キャッシュを削除する
$ yarn cache clean



yarnのコマンドヘルプ

yarnのコマンドヘルプは、--helpオプションをつけることで確認することができます。
# yarn全体について調べる
yarn --help

# 特定のコマンドの使い方を調べる
$ yarn [command] --help

# 例:addコマンドのヘルプを表示する
$ yarn add --help



最後に

npm installなどコマンドが速くなるのは嬉しいですね。最近VagrantからDockerに切り替えた理由も処理が高速な点でしたが、そんな細かい点から開発改善できるといいなーと思う今日この頃です。

最後になりますが本ブログでは、Node.js・Python・Linux・フロントエンド・インフラ・Go言語・開発関連・Swift・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。