この用語をシェア
Yarnとは
Yarn(Yet Another Resource Negotiator)は、Facebook(現Meta)が開発したJavaScriptパッケージマネージャーです。npmの代替として作られ、高速性、セキュリティ、信頼性を重視し、yarn.lockファイルによる確実な依存関係管理と並列インストールにより、効率的な開発環境を提供します。
Yarnの主要特徴
高速パフォーマンス
- 並列インストール:複数パッケージの同時ダウンロード
- キャッシュシステム:一度ダウンロードしたパッケージの再利用
- ネットワーク最適化:効率的なレジストリアクセス
- オフライン機能:キャッシュされたパッケージのオフライン利用
確実な依存関係管理
- yarn.lock:厳密なバージョン固定ファイル
- 決定論的インストール:環境間での一貫した結果
- バージョン解決:複雑な依存関係の自動解決
- 整合性チェック:パッケージの完全性検証
主要なYarnコマンド
プロジェクト管理
yarn init
- 新しいプロジェクトの初期化yarn install
- 依存関係のインストールyarn add <package>
- パッケージの追加yarn remove <package>
- パッケージの削除yarn upgrade
- パッケージの更新
実行コマンド
yarn start
- アプリケーションの開始yarn test
- テストの実行yarn build
- プロダクションビルドyarn run <script>
- カスタムスクリプト実行
yarn.lockファイル
yarn.lockの重要性:
- バージョン固定:すべての依存関係の正確なバージョンを記録
- 再現性:チームメンバー間での同じ環境構築
- CI/CD対応:本番環境での一貫したビルド
- セキュリティ:予期しないパッケージ更新の防止
Yarnワークスペース
モノレポ管理
複数のパッケージを1つのリポジトリで管理する機能
package.jsonの設定例:
{ "name": "my-monorepo", "private": true, "workspaces": [ "packages/*", "apps/*" ], "devDependencies": { "lerna": "^6.0.0" } }
ワークスペースの利点
- 依存関係の共有:共通パッケージの重複排除
- 一括管理:すべてのパッケージの同時更新
- クロスリンク:ワークスペース間の相互参照
- 効率的ビルド:変更されたパッケージのみ再ビルド
Plug'n'Play(PnP)
革新的な依存関係解決
node_modulesを使わない新しいパッケージ管理方式
PnPの利点
- 高速起動:node_modules作成の省略
- ディスク効率:重複ファイルの削除
- 厳密性:宣言されていない依存関係へのアクセス禁止
- 即座のインストール:ファイルコピー不要
npmとの比較
主な違い:
機能 | Yarn | npm |
---|---|---|
インストール速度 | 高速(並列処理) | 標準 |
ロックファイル | yarn.lock(自動生成) | package-lock.json |
ワークスペース | ネイティブサポート | v7以降サポート |
Plug'n'Play | あり | なし |
Yarn 2(Berry)の新機能
次世代Yarn
- Zero-Installs:インストール不要の即座の利用
- Constraints:プロジェクト間の制約管理
- プラグインシステム:機能の柔軟な拡張
- TypeScript統合:型定義の自動管理
セキュリティ機能
パッケージセキュリティ
- チェックサム検証:パッケージの完全性確認
- yarn audit:脆弱性スキャン
- レジストリ検証:信頼できるソースの確認
- ライセンス管理:依存関係のライセンス確認
実際の運用例
React プロジェクトでの活用
開発フロー:
- プロジェクト初期化:
yarn create react-app my-app
- 依存関係追加:
yarn add react-router-dom
- 開発ツール追加:
yarn add -D prettier eslint
- 開発サーバー起動:
yarn start
- 本番ビルド:
yarn build
メリット
- 高速性:npmより大幅に高速なインストール
- 信頼性:yarn.lockによる確実な再現性
- セキュリティ:パッケージ検証とライセンス管理
- ワークスペース:モノレポ開発の効率化
- オフライン対応:ネットワーク障害時の継続作業
学習・導入のポイント
- npmからの移行:既存プロジェクトの段階的移行
- yarn.lock管理:バージョン管理での適切な取り扱い
- ワークスペース活用:モノレポ構成での効率的開発
- PnP理解:新しいパッケージ管理方式の習得
- チーム統一:開発チーム全体での一貫した利用