最近、静的サイトジェネレータの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
詳細は、本家サイトのUsage、CLI Introductionが詳しいので、そちらを当たって下さい(日本語にも翻訳可能です)。
以上です。
※アイキャッチ画像はYarnのロゴマーク