npm・Yarn・pnpmの違い — 既存プロジェクトでまず見る3つのファイル
プロジェクトの「案内・道具・記録」を読む
既存プロジェクトなら、まず手順を見る
新しく参加したプロジェクトで、いきなり好みの道具へ切り替える必要はありません。まずREADME、package.json、ロックファイルを見て、チームとCIが使う手順に合わせます。
| ファイル | 何を読む? |
|---|---|
| README | 導入・起動・ビルドのコマンド |
| package.json | 依存関係、scripts、packageManagerやenginesの指定 |
| ロックファイル | 解決された依存関係や整合性の情報 |
通常、npmならpackage-lock.json、Yarnならyarn.lock、pnpmならpnpm-lock.yamlが目印です。複数あるときは、どれが有効かを管理者やCI設定で確認します。ロックだけでOS・Node.js・ツールの版やすべての実行結果が一致するわけではありません。
新しい練習なら、npmで小さく確認
Node.jsとnpmのある環境で、新しい空の練習用フォルダーを作って実行します。色付き文字を扱うpicocolorsを例に、依存関係を追加する流れを見ます。
npm init -y
npm install picocolors
npm ls picocolors --depth=0
package.jsonに依存が追加され、package-lock.jsonに解決した情報が残ります。その後npm ciを実行すると、ロックに基づいてクリーンインストールします。既存のnode_modulesは取り除かれるので、練習用で試しましょう。package.jsonとロックが食い違うと、更新せずに失敗します。
npm ci
これで「追加する操作」と「記録した依存をそろえる操作」を区別できます。実際のプロジェクトでは、必要な設定・Node.js・npmの版もCIと合わせます。
3つの違いは、配置と運用の条件から見る
| 項目 | npm | Yarn | pnpm |
|---|---|---|---|
| 導入 | 通常Node.jsに付属 | 指定版を入れる | 指定版を入れる |
| 配置 | node_modules | 既定はPnP。方式を選べる | ストアとリンク |
| 記録 | package-lock.json | yarn.lock | pnpm-lock.yaml |
| 確認 | 版・設定・CI | 版・設定・CI | 版・設定・CI |
表のYarnは現行版です。Classicと区別し、PnP以外の配置方式や、pnpmのストア・ホイスト設定もプロジェクトに合わせて確認します。
現行YarnのPnPはローダーファイルで依存へアクセスし、通常node_modulesを作りません。pnpmの通常構成では共有ストアを使い、リンクで依存を組み立てます。設定やファイルシステムで変わるので、必ずPC全体に1コピーだけという保証ではありません。
未宣言の依存が偶然使える状態は避けたいものです。PnPやpnpmの通常構成は検出や削減に役立ちますが、設定と互換性も確認します。速度もキャッシュ・回線・依存の数などで変わるため、一律に順位を決めません。
切り替えるなら、ロックとCIまで一緒に
Corepackは使う道具の版を管理する選択肢で、Node.js 25以降には同梱されません。導入状況を確認し、packageManagerには具体的な版を指定します。
npmからpnpmへ移す場合は、既存ロックを保存した作業ブランチでpnpm importを使う方法があります。ワークスペースは先にpnpm-workspace.yamlへ宣言します。新しいロックでテスト・ビルドを確認し、CIと開発環境もそろえてから切り替えます。
最初の動く画面はJavaScript入門、ツールを含む型チェックの練習はTypeScript入門へ。
参考資料
- npm — ci — ロックとクリーンインストール
- Corepack — 同梱範囲と版指定
- Yarn — Install modes — PnPと配置方式
- pnpm — Structure — ストアとリンク
- pnpm — import — ロックの移行