Skip to content
Latchkey

pnpmとは? 高速でディスク効率の高いパッケージマネージャー

pnpmはNode.jsのパッケージマネージャーで、各パッケージのバージョンをディスク上に一度だけ保存し、それをプロジェクトにhard linkで結び付けることで、インストールを高速かつ省スペースにします。

pnpmは同じpackage.jsonを読む、npmやYarnより高速でディスク効率の高い代替ツールです。その決定的な仕組みはグローバルなcontent-addressableストアです。各パッケージのバージョンは一度だけダウンロードされ、コピーではなく多数のプロジェクトにリンクされるため、新規インストールはしばしばリンクを作るだけで済みます。

pnpmとは何か

pnpm(「performant npm」)はNode.jsエコシステム向けのコマンドラインパッケージマネージャーです。monorepo向けのworkspace、宣言されていない依存関係へのアクセスを防ぐ厳格なnode_modulesレイアウト、そしてユーザーが期待するのと同じlockfile駆動の再現性をサポートします。

ストアの仕組み

pnpmがパッケージをインストールすると、ファイルをマシン上のグローバルストアに置き、それをプロジェクトのnode_modulesにhard linkします。同じディスク上で同じバージョンを必要とする2つのプロジェクトはバイトを共有します。これがpnpmのインストールが高速で、コピーの場合のわずかなディスク量しか使わない理由であり、特にmonorepoで顕著です。

使用例

pnpmはnpmのコマンドを忠実に模倣しているため、導入はほとんど体に染みついた操作で済みます。

Common pnpm commands
# install from the lockfile (use in CI)
pnpm install --frozen-lockfile

# add a dependency
pnpm add lodash

# run a workspace package script
pnpm --filter web build

CI/CDでの役割

CIでは「pnpm install --frozen-lockfile」が再現可能なインストールを提供し、lockfileが古い場合には失敗します。pnpmのストアを実行間でcacheすることは、ストアが共有されコンテンツで指定されるため非常に効果的です。大規模なmonorepoでは、pnpmのインストール時間とディスク節約は意味のあるCIコスト削減になります。Latchkeyのようなマネージドrunnerでは、温まったpnpmストアのcacheに加え、一時的なレジストリの不調時の自動リトライにより、これらのインストールを高速かつ確実に保ちます。

代替ツール

npmはデフォルトでインストール不要ですが、大きなツリーでは遅くなります。Yarn(特にBerry)はPlug and Playとzero-installsを提供します。pnpmはインストール速度、ディスク使用量、厳格な依存関係の分離が最も重要な場面で優位に立ちます。

重要なポイント

  • pnpmはパッケージをコピーする代わりに、共有のcontent-addressableストアからリンクします。
  • これによりインストールが高速になり、monorepoでのディスク使用量が劇的に削減されます。
  • CIでは「pnpm install --frozen-lockfile」を使い、グローバルストアをcacheしましょう。

関連ガイド