この用語をシェア
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理解:新しいパッケージ管理方式の習得
- チーム統一:開発チーム全体での一貫した利用
