
JavaScriptパッケージマネージャ「Yarn」には、大きく分けて「クラシック版(v1)」と「Berry(v2以降)」があります。特にYarn v1からv2以降に移行する場合は、多くの仕様変更があり、注意が必要です。本記事では、両者の主な違いや導入時の注意点を解説します。
目次
目次
Yarn Classic(v1)の特徴
Yarnのクラシック版(v1系)は、npmよりも高速かつ安定したパッケージ管理を目指して登場しました。
主な特徴は以下の通りです:
node_modules
フォルダを使用.yarnrc
による設定- ワークスペース機能のサポート
yarn.lock
による依存関係のロック
導入方法:
npm install -g yarn
またはプロジェクトディレクトリで:
yarn init
Yarn Berry(v2以降)の特徴
Yarn v2以降は「Berry」とも呼ばれ、根本的なアーキテクチャの見直しが行われています。
大きな変更点:
node_modules
を使用しない(Plug’n’Play=PnP がデフォルト)- 設定ファイルが
.yarnrc.yml
に変更 - Yarn自身もリポジトリ内で管理される(Zero-Install推奨)
- プラグインシステムの導入
- より高速な依存解決
初期化コマンド(クラシック→Berryへ移行):
yarn set version berry
その後、.yarn/releases/yarn-berry.cjs
や .yarnrc.yml
が生成されます。
両者の違いの比較表
項目 | Yarn Classic (v1) | Yarn Berry (v2〜) |
---|---|---|
node_modules | 使用する | 使用しない(PnP) |
設定ファイル | .yarnrc | .yarnrc.yml |
Yarn本体の管理 | グローバル | プロジェクト内 |
プラグイン機構 | なし | あり |
キャッシュ | グローバル | プロジェクト内 .yarn/cache/ |
注意点と落とし穴
1. node_modules
前提のツールが動かないことがある
Yarn BerryのPnPでは node_modules
が存在しないため、ツールによってはパス解決に失敗することがあります。
対策:
必要であれば nodeLinker: node-modules
を .yarnrc.yml
に追加することで対応可能。
nodeLinker: node-modules
2. プラグインの導入が必要なケースがある
Yarn Berryでは多くの機能がプラグインに分割されています。たとえば workspace-tools
や interactive-tools
などを必要に応じて追加する必要があります。
yarn plugin import workspace-tools
3. CI環境ではZero-Install構成が推奨される
Yarn v2以降では .yarn/cache/
に全依存パッケージを保管する方式(Zero-Install)が推奨され、yarn install
をCIで実行しなくても済む構成が可能になります。
4. .pnp.js
の仕組みに慣れる必要がある
PnPではモジュール解決のロジックが .pnp.cjs
に記録され、Node.js にパッチを当てて解決します。初見では戸惑うかもしれませんが、公式ドキュメントが充実しています。
まとめ:Yarnのバージョンはプロジェクトの性質で選ぼう
Yarn v1は依然として多くの現場で使われており、互換性を重視するならクラシック版が無難です。一方、パフォーマンスやCI/CDの最適化を狙うならYarn Berryが強力な選択肢になります。
結論として:
- 既存のプロジェクトやレガシー環境:Yarn v1(Classic)を継続
- モノレポ・CI高速化・最新構成:Yarn Berry(v2以降)を選択
それぞれの特性を理解し、目的に応じて適切なバージョンを選びましょう。