Yarn を使ってみました

たまたま Yarn の記事を読みまして、気になったので使ってみました。

環境

  • npm 5.8.0
  • Yarn v1.5.1

Yarn?

Yarnはコードのためのパッケージマネージャーです。 これにより、世界中の開発者とコードの使用と共有を可能にしてくれます。 Yarnはこれを迅速且つ安全に、そして確実に行ってくれるため、心配することは何もありません。

概要 | Yarn

パッケージマネージャーだそうです。

YarnはFacebook、Google、Exponent、Tildeによって開発された新しいJavaScriptパッケージマネージャーです。公式発表に記載されているように、Yarn開発者が直面したnpmの問題解決を目的としています。

  • インストールパッケージの速度および一貫性が不十分である
  • npmではパッケージがインストール時にコードを実行することを許可しているため、セキュリティー上の問題がある

Yarnとnpmの違い:JavaScriptパッケージマネジャーを比較する - WPJ

npm の問題を解決することを目的としているようです。

インストール

WSL の Ubuntu にインストールしたかったので、 Linux の記載を探しました。

macOS の場合は Homebrew 、 Windows の場合は Windows Installer か Windows 用のパッケージマネージャである Chocolatey でインストールできるようです。

Debian/Ubuntu Linux

Debian もしくは Ubuntu Linux の場合は、私たちが用意した Debian パッケージリポジトリ経由で Yarn をインストールできます。まず最初にリポジトリの設定をする必要があります。

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

Ubuntu 16.04 以下や Debian の安定版では、 Node.js の十分な新しいバージョンを取得するために NodeSource のリポジトリを構成する必要があります。

…略…

その後はシンプルに以下を実行するだけです。

sudo apt-get update && sudo apt-get install yarn

インストール | Yarn

リポジトリの設定をする必要があるようです。 こういうの、ちょっと面倒だと思ってしまいます。

install

npm i yarn

yarn - npm

npm からでもインストールできるようです。 npm も npm のパッケージとしてグローバルにインストールしてあるし、 Yarn も npm のパッケージとしてグローバルにインストールしてみようと思います。

次のコマンドでインストールしました。

$ sudo npm i yarn -g
[sudo] password for user:
/usr/local/bin/yarnpkg -> /usr/local/lib/node_modules/yarn/bin/yarn.js
/usr/local/bin/yarn -> /usr/local/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.5.1
added 1 package in 1.269s

インストールできたみたいです。

$ npm ls yarn -g
/usr/local/lib
└── yarn@1.5.1

グローバルに Yarn がありました。

使い方

プロジェクトの新規作成

プロジェクトの新規作成

yarn init

使い方 | Yarn

npm と同じで、 init コマンドでプロジェクトの新規作成ができるみたいです。

$ yarn init
yarn init v1.5.1
question name (project):
question version (1.0.0):
question description:
question entry point (index.js):
question repository url:
question author:
question license (MIT):
question private:
success Saved package.json
Done in 11.94s.

package.json ファイルができました。

{
  "name": "project",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

デフォルトの値は省略されてしまうのでしょうか。 npm で作成したものよりシンプルでした。

依存関係の追加

依存関係の追加

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

使い方 | Yarn

add コマンドで追加できるようです。 cowsay - npm を追加してみます。

$ yarn add cowsay
yarn add v1.5.1
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 9 new dependencies.
info Direct dependencies
└─ cowsay@1.3.0
info All dependencies
├─ ansi-regex@3.0.0
├─ cowsay@1.3.0
├─ get-stdin@5.0.1
├─ is-fullwidth-code-point@2.0.0
├─ optimist@0.6.1
├─ string-width@2.1.1
├─ strip-ansi@4.0.0
├─ strip-eof@1.0.0
└─ wordwrap@0.0.3
Done in 7.26s.

追加できたようです。 小さいパッケージだからかもしれませんが、速いような気がします。

ローカルにインストールされた CLI

ローカルにインストールされた CLI

yarn <command> [<args>] を実行すると、ローカルにインストールされた CLI と一致するコマンドが実行されます。そのため、簡単なユースケースではユーザー定義スクリプトを自分でセットアップする必要はありません。

CLI の紹介 | Yarn

Yarn でもこれが使いたかったです。

cowsay を yarn <command> [<args>] で実行してみます。

$ yarn cowsay JavaScript FTW!
yarn run v1.5.1
$ /path/to/project/node_modules/.bin/cowsay JavaScript FTW!
 _________________
< JavaScript FTW! >
 -----------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Done in 1.04s.

node_modules/.bin の cowsay が実行されているようです。

依存関係の削除

一応、削除も引用しておきます。

依存関係の削除

yarn remove [package]

使い方 | Yarn

remove コマンドでパッケージを削除できるようです。

終わり

今後の展開

もしかすると、読者のみなさんはNode.jsとio.jsにまつわる経緯を知っているかもしれません。かいつまんで説明すると、ガバナンスに関する意見の不一致からNode.jsから分岐したio.jsは、一部の献身的な人たちによって開発されました。io.jsはオープンガバナンスを採用しました。しかし、1年もたたないうちに、Node.jsとio.jsのチームは合意に達し、io.jsは再びNode.jsに合併され廃止されました。それが正しいかどうかは別として、多くのすぐれた機能がio.jsからNode.jsに導入されました。

Yarnとnpmの違い:JavaScriptパッケージマネジャーを比較する - WPJ

積極的に Yarn を使うこともないかな、と思いました。

参考