JavaScript開発を始めようとした時、「npmとyarnって何が違うの?」「どっちを使えばいいの?」と迷ったことはありませんか?
どちらもJavaScriptのパッケージマネージャーで、基本的にできることは同じです。でも、それぞれに特徴があって、プロジェクトや状況によって向き不向きがあるんです。
この記事では、npmとyarnの違いを分かりやすく比較しながら、それぞれの特徴やメリット・デメリット、そしてどちらを選ぶべきかを解説していきます。実際のコマンド対応表も載せているので、すぐに実践できますよ。
npmとyarnって何?基本をおさらい

まず、それぞれの基本的な特徴を確認しましょう。
npm(Node Package Manager)
npmは、Node.jsに標準で付属しているパッケージマネージャーです。
特徴:
- Node.jsをインストールすると自動的についてくる
- 最も広く使われている(デファクトスタンダード)
- 公式のパッケージレジストリ(npmjs.com)を管理
- シンプルで分かりやすい
誕生:2010年
yarn(Yet Another Resource Negotiator)
yarnは、FacebookとGoogleが中心となって開発したパッケージマネージャーです。
特徴:
- npmの課題を解決するために開発された
- 高速で安定性が高い
- 決定論的なインストール(誰が実行しても同じ結果)
- 別途インストールが必要
誕生:2016年
どちらも同じレジストリを使う
重要なポイントとして、npmとyarnは同じパッケージレジストリ(npmjs.com)を使います。
つまり、どちらを使っても、同じパッケージにアクセスできるんです。両方を混在させて使うこともできますが、通常は1つのプロジェクトでどちらか一方に統一します。
yarnが生まれた背景:npmの課題
2016年当時、npmにはいくつかの問題がありました。
当時のnpmの問題点
速度が遅い
パッケージのインストールに時間がかかっていました。パッケージを1つずつ順番にダウンロードしていたためです。
不安定な依存関係
同じpackage.jsonでも、実行するタイミングによって異なるバージョンがインストールされることがありました。「自分の環境では動くのに、同僚の環境では動かない」という問題が起きやすかったんです。
オフライン作業ができない
一度インストールしたパッケージでも、再インストール時には必ずネットワークアクセスが必要でした。
yarnの登場
これらの問題を解決するため、Facebookが中心となってyarnを開発しました。
- 並列ダウンロードで高速化
- yarn.lockファイルで依存関係を厳密に管理
- オフラインキャッシュで再インストールが高速
yarnの登場により、npmも改善を進め、現在では両者の差は小さくなっています。
npmとyarnの違い:主要な比較ポイント
具体的な違いを見ていきましょう。
インストール方法
npm
Node.jsをインストールすれば自動的についてくる。追加のインストール不要です。
yarn
別途インストールが必要。
# npmを使ってyarnをインストール
npm install -g yarn
# Homebrewを使う場合(Mac)
brew install yarn
# Chocolateyを使う場合(Windows)
choco install yarn
ロックファイル
npmpackage-lock.jsonというファイルで、正確なバージョンを記録します。npm 5以降で導入されました。
yarnyarn.lockというファイルで管理します。最初から標準搭載されていました。
どちらも、誰が実行しても同じバージョンがインストールされることを保証する重要なファイルです。
パフォーマンス
初期の頃
yarnの方が圧倒的に速かった時代がありました。並列ダウンロードとキャッシュ機能のおかげです。
現在
npmも並列ダウンロードとキャッシュに対応し、速度差はかなり縮まりました。プロジェクトの規模や状況によって、どちらが速いかは変わります。
ベンチマークでは僅差で、実用上は大きな違いを感じないことが多いです。
ワークスペース機能
npm(7以降)workspaces機能をサポート。複数のパッケージを1つのリポジトリで管理できます。
yarn
最初からワークスペース機能を搭載していました。モノレポ(1つのリポジトリで複数プロジェクトを管理)での開発に便利です。
セキュリティ
npmnpm auditコマンドで脆弱性をチェックできます。
npm audit
npm audit fix
yarnyarn auditで同様のチェックが可能です。
yarn audit
どちらも、既知の脆弱性を持つパッケージを検出して警告してくれます。
コマンド対応表:npmとyarnの違い
よく使うコマンドの対応関係を一覧にしました。
プロジェクトの初期化
| 操作 | npm | yarn |
|---|---|---|
| 新規プロジェクト作成 | npm init | yarn init |
| デフォルト設定で作成 | npm init -y | yarn init -y |
パッケージのインストール
| 操作 | npm | yarn |
|---|---|---|
| 全パッケージをインストール | npm install | yarn または yarn install |
| パッケージを追加 | npm install パッケージ名 | yarn add パッケージ名 |
| 開発用パッケージを追加 | npm install -D パッケージ名 | yarn add -D パッケージ名 |
| グローバルインストール | npm install -g パッケージ名 | yarn global add パッケージ名 |
| 特定バージョンを指定 | npm install パッケージ名@1.2.3 | yarn add パッケージ名@1.2.3 |
パッケージの削除
| 操作 | npm | yarn |
|---|---|---|
| パッケージを削除 | npm uninstall パッケージ名 | yarn remove パッケージ名 |
| グローバルから削除 | npm uninstall -g パッケージ名 | yarn global remove パッケージ名 |
パッケージの更新
| 操作 | npm | yarn |
|---|---|---|
| 全パッケージを更新 | npm update | yarn upgrade |
| 特定パッケージを更新 | npm update パッケージ名 | yarn upgrade パッケージ名 |
| 最新版に更新 | npm install パッケージ名@latest | yarn upgrade パッケージ名@latest |
情報の確認
| 操作 | npm | yarn |
|---|---|---|
| インストール済み一覧 | npm list | yarn list |
| 古いパッケージを確認 | npm outdated | yarn outdated |
| パッケージ情報を表示 | npm info パッケージ名 | yarn info パッケージ名 |
スクリプトの実行
| 操作 | npm | yarn |
|---|---|---|
| スクリプトを実行 | npm run スクリプト名 | yarn run スクリプト名 または yarn スクリプト名 |
| start スクリプト | npm start | yarn start |
| test スクリプト | npm test | yarn test |
yarnではrunを省略できるので、少し短く書けます。
キャッシュ管理
| 操作 | npm | yarn |
|---|---|---|
| キャッシュをクリア | npm cache clean --force | yarn cache clean |
| キャッシュの場所を確認 | npm config get cache | yarn cache dir |
実際の使用例:同じことをnpmとyarnで

具体的なプロジェクト作業を、両方のツールで見比べてみましょう。
新規プロジェクトの立ち上げ
npmの場合:
# プロジェクトフォルダを作成
mkdir my-project
cd my-project
# package.jsonを作成
npm init -y
# Reactをインストール
npm install react react-dom
# 開発用ツールをインストール
npm install -D webpack webpack-cli
# スクリプトを実行
npm start
yarnの場合:
# プロジェクトフォルダを作成
mkdir my-project
cd my-project
# package.jsonを作成
yarn init -y
# Reactをインストール
yarn add react react-dom
# 開発用ツールをインストール
yarn add -D webpack webpack-cli
# スクリプトを実行
yarn start
ほとんど同じですが、コマンド名が少し違いますね。
yarn 2/3(Yarn Berry):新世代のyarn
2020年以降、yarnには大きな変化がありました。
Yarn Classicとyarn Berry
yarn Classic(1.x系)
元々の yarn。現在もメンテナンスされていますが、新機能の追加は停止しています。
yarn Berry(2.x/3.x/4.x系)
完全に作り直された新しいyarn。まったく異なる設計思想を持っています。
yarn Berryの特徴
Plug’n’Play(PnP)node_modulesフォルダを作らずに、パッケージ情報をZIPファイルとマップで管理します。
- インストールが超高速
- ディスク使用量が大幅削減
- しかし、一部のツールとの互換性問題がある
Zero-Installsnode_modulesの代わりに.yarn/cacheフォルダをGitにコミットすることで、yarn installなしで開発開始できます。
モダンなプラグインシステム
機能を拡張しやすい設計になっています。
どっちのyarnを使うべき?
yarn Classic(1.x)を推奨する場合:
- 既存プロジェクトとの互換性を重視
- 安定性を最優先
- npmからの移行が簡単
yarn Berry(3.x/4.x)を推奨する場合:
- 新規プロジェクト
- 最新機能を試したい
- モノレポ構成を活用したい
多くのプロジェクトでは、まだyarn Classicが使われています。
それぞれのメリット・デメリット
実際に選ぶ時の判断材料になるよう、整理してみます。
npmのメリット
標準で付属
Node.jsと一緒にインストールされるので、追加の手間が不要です。
シンプル
基本機能に集中していて、分かりやすい設計です。
公式サポート
Node.js公式のツールなので、長期的な安定性が期待できます。
豊富な情報
最も使われているため、トラブル時に情報を見つけやすいです。
npmのデメリット
機能面でやや遅れ
新機能の導入が、yarnより少し遅い傾向があります。
歴史的な互換性負担
古いバージョンとの互換性を保つため、時々不便な部分があります。
yarnのメリット
高速で効率的
並列処理とキャッシュが優秀で、特に大規模プロジェクトで速さを発揮します。
決定論的
誰が実行しても必ず同じ結果になる設計。チーム開発で安心です。
ワークスペース機能
モノレポ構成での開発に最初から対応していて、使いやすいです。
ユーザー体験
エラーメッセージが分かりやすく、進捗表示も見やすいです。
yarnのデメリット
別途インストールが必要
最初に追加のセットアップが必要です。
yarn Berryの互換性
最新のyarn 2以降は、既存のツールとの互換性問題があることがあります。
学習コスト
npmとコマンドが微妙に違うので、覚え直す必要があります。
どちらを選ぶべき?シチュエーション別ガイド
実際の選択基準を示します。
npmを選ぶべき場合
初心者・個人開発者
Node.jsに付属しているので、すぐに始められます。情報も豊富で学習しやすいです。
小規模プロジェクト
シンプルなプロジェクトなら、標準のnpmで十分です。
互換性を重視
すべてのNode.jsツールが確実に動作します。
CI/CD環境がシンプル
追加のインストール手順が不要なので、セットアップが楽です。
yarnを選ぶべき場合
チーム開発
決定論的なインストールで、環境の差異を減らせます。
大規模プロジェクト
並列処理とキャッシュで、インストール時間を短縮できます。
モノレポ構成
ワークスペース機能が最初から充実しています。
パフォーマンス重視
少しでも速い環境を求める場合。
実際のところ
正直なところ、どちらを選んでも大きな問題はありません。
重要なのは:
- チーム内で統一すること
- 途中で変更しないこと
- ロックファイルをGitにコミットすること
混在させる場合の注意点
1つのプロジェクトでnpmとyarnを混ぜて使うのは避けましょう。
問題が起きる理由
ロックファイルの不一致package-lock.jsonとyarn.lockで、微妙に異なるバージョンが記録されることがあります。
キャッシュの二重管理
両方のツールが別々にキャッシュを持つので、ディスク容量の無駄です。
チームの混乱
「あれ、このコマンドってnpm?それともyarn?」と迷ってしまいます。
統一する方法
.gitignore設定
# npmを使う場合
yarn.lock
# yarnを使う場合
package-lock.json
READMEに明記
プロジェクトのREADMEに、使用するツールを明記しておきましょう。
package.jsonにエンジン指定
{
"engines": {
"npm": "使用しないでください。yarnを使ってください"
}
}
pnpm:第三の選択肢
最近注目されている、もう1つのパッケージマネージャーも紹介します。
pnpmとは?
pnpm(performant npm)は、ディスク容量を節約できる高速なパッケージマネージャーです。
特徴:
- パッケージを共有ストレージに1回だけ保存
- シンボリックリンクで参照
- npmやyarnより高速で、ディスク使用量が少ない
コマンド例
# インストール
npm install -g pnpm
# パッケージを追加
pnpm add react
# 全パッケージをインストール
pnpm install
基本的にnpmと同じコマンド体系なので、学習コストが低いです。
いつ使う?
- 複数のプロジェクトを同時に扱う開発者
- ディスク容量が限られている環境
- CI/CD環境での高速化
まだnpmやyarnほど普及していませんが、将来有望な選択肢です。
移行する場合のステップ
npmからyarn、またはその逆に移行する手順を紹介します。
npmからyarnへの移行
1. yarnをインストール
npm install -g yarn
2. package-lock.jsonを削除
rm package-lock.json
3. node_modulesを削除(オプション)
rm -rf node_modules
4. yarnでインストール
yarn install
5. .gitignoreを更新
package-lock.json
yarnからnpmへの移行
1. yarn.lockを削除
rm yarn.lock
2. node_modulesを削除(オプション)
rm -rf node_modules
3. npmでインストール
npm install
4. .gitignoreを更新
yarn.lock
注意点
移行後は、チーム全体に周知して、全員が同じツールを使うようにしましょう。
まとめ:結局どっちを選ぶ?
npmとyarnは、どちらも優れたJavaScriptパッケージマネージャーです。
この記事のポイント:
- npmはNode.js標準、yarnは高速で安定性重視
- 両者の機能差は年々小さくなっている
- どちらも同じnpmレジストリを使う
- コマンドは似ているが微妙に違う
- 1つのプロジェクトでは必ずどちらかに統一する
- 初心者や小規模プロジェクトならnpmが無難
- チーム開発や大規模プロジェクトならyarnも良い選択
- pnpmという第三の選択肢も登場している
- 最も重要なのは、チーム内で統一すること


コメント