pnpmまとめ
1. pnpmとは?
pnpm(Performant npm) は、Node.jsのパッケージマネージャーの一つです。
npmやyarnと同じ「依存関係管理ツール」ですが、圧倒的に速く、ディスク使用量が少ないのが特徴です。
- ディスクの無駄を極限まで減らす設計
- 特にモノレポ(複数パッケージ管理)で真価を発揮!
公式サイト: https://pnpm.io/
2. npm/yarnとの違い
npm | yarn | pnpm | |
---|---|---|---|
ファイル構造 | フラット (node_modulesに全コピー) | フラット | ハードリンク(参照だけ作成) |
速度 | 普通 | 速い | 超速い |
ディスク容量 | 大きくなりがち | 中くらい | 圧倒的に少ない |
モノレポ対応 | 手動で設定 | yarn workspaces | pnpm workspaces標準 |
キャッシュ | 少なめ | 多い | 極限まで効率化 |
特に注目なのが、pnpmのハードリンク構造です。
これにより、同じライブラリを何回インストールしても、実際にはディスクに1回しか保存されないため、ディスク使用量が爆減します。
3. 基本的な使い方
インストール
まずpnpm自体をインストールします。
npm install -g pnpm
(またはcorepack
を使う場合 → Node.js 16.13以降推奨)
corepack enable
corepack prepare pnpm@latest --activate
プロジェクト作成・依存追加
pnpm init
pnpm add react react-dom
開発依存を追加
pnpm add -D typescript
スクリプト実行
npmと同じく、package.json
のscripts
を叩けます。
pnpm run build
4. よく使うコマンドまとめ
操作 | コマンド |
---|---|
依存インストール | pnpm install |
パッケージ追加 | pnpm add パッケージ名 |
開発用パッケージ | pnpm add -D パッケージ名 |
パッケージ削除 | pnpm remove パッケージ名 |
全削除(初期化) | pnpm install --force |
5. 【発展】pnpm workspace活用術
pnpmの真骨頂はモノレポ対応です。
例えば、以下のような構成を簡単に管理できます。
my-monorepo/
├── apps/
│ ├── app1/
│ └── app2/
└── packages/
├── ui/
└── utils/
設定ファイル例:pnpm-workspace.yaml
packages:
- 'apps/*'
- 'packages/*'
これで、複数プロジェクトをまとめて管理・ビルド・依存共有できます。
ワークスペース内リンクも自動で作ってくれるため、開発スピードが爆速に!
6. 【発展】pnpm hooksによる自動化
pnpmにはインストール時に自動処理できるhooks機能があります。
たとえば、パッケージインストール直後に特定のスクリプトを走らせるなどが可能。
例:pnpmfile.cjs
に定義
module.exports = {
hooks: {
readPackage(packageJson) {
if (packageJson.name === "some-package") {
packageJson.dependencies["lodash"] = "^4.17.21"
}
return packageJson
}
}
}
これでインストール時に自動で依存を追加したり、バージョン調整を強制できます。
大規模開発では超便利!
7. まとめ
- pnpmは速い・軽い・賢いパッケージマネージャー
- npm/yarnとほぼ互換だけど、構造が違う
- 特にモノレポ・大規模開発に強い
- workspaceとhooksを使いこなすとさらに便利