そろそろYarnを使ってもいいんじゃない?
Yarnのいいところは?
ウルトラでメガでスーパーなパッケージ管理ができるのがYarnだそうです。
が、今回は実際に使ってみて感じたメリットについて書きます。
package.jsonを使える(npm互換)
「今までずっとnpmでやってきたプロジェクトだし、わざわざyarnに乗り換えるの面倒臭いよね…」と目をそむけてきましたが、全然面倒臭くありませんでした。yarnをグローバルインストールしてしまえば、あとはnpmと同様にpackage.json
を元にパッケージ管理ができます。導入まで1ステップというお手軽さでした。
$ npm install -g yarn
yarnのインストールはnpmから。なんか変な話ですね。
node_modulesの容量が減った
モジュール管理方法が、npmは階層化されているのに対し、yarnはフラットです。読み込んだモジュールが更にモジュールを読み込んでいて…とネストしていくものを全部フラットでインストールするため重複がありません。その分軽くなります。
ダウンロードが速い
過去に1度ダウンロードしたものをローカルにキャッシュしておいてくれるので、npm install
をし直すような場面で特に高速化の威力を発揮します。ローカルキャッシュということはオフラインにも対応しているということですね(まだオフラインの恩恵を受けたことはありませんが)。
$ yarn
# もしくは
$ yarn install
バージョン固定がしやすい
Yarnでは読み込むモジュールのバージョンをお手軽に固定することができます(一応npmでもできるんですよ、npm shrinkwrap
という機能を使うと)。これにより「誰のどの環境にも同じモジュールがある」状態を維持できます。
ロゴがかわいい
ニャーン。ヤーン。
Yarnの導入をしよう
インストール
$ npm install -g yarn
プロジェクトの準備
$ yarn init
モジュールの追加&削除
$ yarn add [package] # npm install --save に相当
$ yarn add --dev [package] # npm install --save-dev に相当
$ yarn add [package]@[version]
$ yarn remove [package]
その他コマンドのnpm / yarn比較は公式に一覧化されています。
Yarnのパッケージインストールの仕組み
何か問題が起きたときに、内部の動きを知っていると意外と役立ったりしますよね。ということで軽く触れておきます。
1. モジュール間の依存解決
モジュール間の依存関係を再帰的に解決する。
2. Fetch & Cache
ダウンロード対象の各パッケージがグローバルキャッシュ(~/.yarn-cache
)に存在しているかを確認し、もしなければtarballを取得しキャッシュする。
3. 対象プロジェクトのnode_modulesへコピー
グローバルキャッシュから対象のモジュールをnode_modules以下へコピーする。
まとめ
- package.jsonを使えるのでnpm互換
- モジュールのダウンロードが速い
- モジュールの容量削減
- バージョン固定
大きなデメリットもなく手間もなく、あっという間にnpmからyarnへと移行しちゃいました。皆様もぜひ。