Skip to content
⚠️ This article was written in 2018. Some content may be outdated.

npm vs yarn:2018年の選択

2016年に yarn が登場した当初、npm 3 の問題点(遅いインストール、ロックファイルなし、非決定論的な依存関係ツリー)から yarn は明らかな勝者でした。2年後、npm 5 が大幅に差を縮めました。今はどちらを選ぶべきでしょうか?

yarn が生まれた理由

npm 3 の主な問題:

  • ロックファイルなし:チームメンバーが異なる依存バージョンを取得する可能性
  • 遅い:並列ダウンロードなし、キャッシュなし
  • 非決定論的:npm install が異なる結果を生む可能性

yarn は3つすべてを一度に解決:

  • yarn.lock — 決定論的な依存関係ツリー
  • 並列ダウンロード + キャッシュ — 劇的な速度向上
  • フラットな依存関係解決

npm 5 が追いついた

npm 5(Node.js 8 時代)は package-lock.json を追加し、速度も大幅に改善されました。

2018年の比較

機能npm 5yarn
ロックファイルpackage-lock.jsonyarn.lock
インストール速度速い速い
ワークスペース✅(組み込み)
オフラインモード
出力の可読性普通より良い

コマンド構文

bash
# インストール
npm install            yarn
npm install --save     yarn add [パッケージ]
npm install --save-dev yarn add --dev [パッケージ]

# 削除
npm uninstall          yarn remove

# スクリプト実行
npm run [スクリプト]    yarn [スクリプト](run 不要)

# 更新
npm update             yarn upgrade

ワークスペース(monorepo)

yarn の組み込みワークスペースサポートは monorepo における大きな優位点です:

json
// package.json(ルート)
{
  "private": true,
  "workspaces": ["packages/*"]
}
bash
# すべてのワークスペースの依存関係をインストール
yarn install

# 特定のワークスペースでコマンドを実行
yarn workspace my-package test

ロックファイルのベストプラクティス

どちらを選択する場合でも:

  1. ロックファイルをコミットpackage-lock.json または yarn.lock
  2. 同じプロジェクトで npm と yarn を混在させない
  3. チーム全体で同じパッケージマネージャーのバージョンを使用する

おすすめ(2018年)

  • 新規プロジェクト:どちらでもよい、一貫性を保つ
  • Monorepo:yarn(ワークスペースが圧倒的に優れている)
  • シンプルなプロジェクト:npm 5 で十分

最も重要なのはチームの一貫性です。パッケージマネージャーを混在させるとロックファイルの競合と非決定論的なインストールが発生します。

MIT Licensed