npmより良さげなYarnの概略とインストール方法・簡単な使用法

JavaScript

最近、静的サイトジェネレータのGatsbyの導入・構築について調べていて、様々なサイトを見ていると、パッケージ管理ツールにnpmとyarnを使用しているパターンがあるのをちらほら見ました。

npmはNode.js標準のパッケージ管理ツールです。
対して、yarnについては、実ははあまり知りませんでした。
が、調べてみると、依存パッケージの厳密な管理、再現性の担保という面で、yarnは良さげな印象です。

概要と、インストールの仕方、ほんの触りの使い方を書こうと思います。

広告

Yarnとは

  • FacebookがExponent、Google、Tildeとコラボして開発し、2016年に公開
  • npmでのパッケージ管理の問題点を解決するものとして開発
  • npmより高速、高信頼性、セキュアなパッケージ管理を実現

英語サイトになりますが、facebook Engineeringのアナウンスのページに、この辺りの詳しい経緯が書かれています。

npmの問題点

上記のFBのアナウンスページ(Yarn: A new package manager for JavaScript)に書かれていますが、複数人で運営するプロジェクトの場合、npmだと各人の環境でnode_modulesの内容が異なってしまう、という問題があるようです。

要するに、依存パッケージの内容が厳密に再現できないようです。

1人でやる場合でも、テスト環境と本番環境が異なってしまう…のは困るので、これは確かに避けたいやつです。

Yarn使用のメリット(公式による)

npmより、

  • 高速
  • 高信頼性
  • よりセキュア

なのだそうです。
ちなみに、本家サイトでは、「Ultra Fast」、「Mega Secure」、「Super Reliable」とまで書いているので、相当売りにしている要素なのでしょう。

高速
一度ダウンロードされたパッケージはグローバルキャッシュディレクトリに入れられ、Yarnはそこを見に行くので、もし過去にダウンロードされたものがあれば、インストールが速く済みます。

・高信頼性
ロック用のファイル(yarn.lock)を使い、npmとは異なるアルゴリズムで、特定バージョンのパッケージを厳密に管理してインストールするので、どの環境でも必ず同じバージョンのパッケージがインストールされるようになるのだとか。
なので、npmの弱点が克服でき、「この環境でだけバグがでる」ことがなくなるそうです。

・よりセキュア
チェックサムでパッケージを検証するので、よりセキュア。

個人的に感じているメリット

公式ドキュメントにも記載がありますが、npmとの共存・併用が可能です。
何か問題があってもnpmに戻ればいいだけなので。

GatsbyはReactをベースにしていますが、React公式ページもGatsbyで作成されていて、実際使用しているFacebookが開発元なら、ややこしい問題も起こらないだろう(実際は未検証ですが)という期待もあります。

Yarn導入方法

環境はCentOSで、Node.jsは既に入れているものとします。

まず、リポジトリを追加。

$ curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo

そして、インストール。
これで終わり。

$ sudo yum install yarn

バージョン情報を出力して、インストールが問題なくできたかテストしましょう。

$ yarn --version

公式の通り(Installation)ですが。

Yarnの使い方

詳細は公式のCLIの紹介をご覧下さい。

主なものは、

・新しいプロジェクトを作る

$ yarn init

・パッケージを追加

$ yarn add パッケージ名

バージョンを指定する場合は以下のように。

$ yarn add パッケージ名@バージョン

・パッケージを更新
バージョンの指定はaddと同じようにします。

$ yarn upgrade パッケージ名

・パッケージの削除

$ yarn remove パッケージ名

・プロジェクトの依存関係がある全パッケージをインストール

$ yarn

もしくは

$ yarn install

詳細は、本家サイトのUsageCLI Introductionが詳しいので、そちらを当たって下さい(日本語にも翻訳可能です)。

 

以上です。

 

※アイキャッチ画像はYarnのロゴマーク

タイトルとURLをコピーしました