macを買ってNode.jsを入れたのでpnpmでモジュール管理環境を構築してみた

前回は Node.js の導入までを行ったので、今回はパッケージマネージャーとして pnpm を導入し、依存管理をより安全かつ快適にするところまでまとめます。

はじめに

開発用として MacBook を購入したので、開発環境を一から見直しています。

これまでは npm を中心に使っていましたが、依存パッケージの管理を深く意識しないまま進めることも多く、プロジェクトごとの差異や再現性の低さが気になる場面がありました。

最近はソフトウェアサプライチェーン攻撃の話題も増えており、依存関係をどう管理するかは以前より重要です。

そこで今回は、Node.js のパッケージマネージャーとして pnpm を導入し、Mac 上でのモジュール管理環境を整えます。

pnpmってなに?

pnpm は Node.js 向けのパッケージマネージャーです。npm や Yarn の代替として利用でき、以下の特徴があります。
公式サイト: pnpm
  • インストールが速い
  • ディスク消費を抑えやすい
  • 依存関係を厳密に扱える
  • lockfile による再現性を確保しやすい

なぜpnpmを選ぶ?

今回 pnpm を選んだ理由は次の4つです。

  • サプライチェーン攻撃対策を取り入れやすい
  • インストールが高速
  • ディスク容量を節約できる
  • 依存関係を厳密に管理できる

サプライチェーン攻撃対策を取り入れやすい

pnpm には、公開直後のバージョンを一定時間インストール対象から外す minimum-release-age の設定があります。

たとえば 1440 分(24時間)を設定すると、公開から24時間未満のバージョンを避けられます。

この「少し待ってから取り込む」だけでも、公開直後の事故的・悪意的なバージョンを踏むリスクを下げやすくなります。

インストールが高速

pnpm は取得済みパッケージを再利用するため、同じ依存を使う複数プロジェクトで効果が出やすいです。

ディスク容量を節約できる

同一バージョンのパッケージ実体を効率よく共有できるため、プロジェクト数が増えるほど差が出ます。

依存関係を厳密に管理できる

宣言されていない依存を暗黙利用しづらく、「自分の環境だけ動く」を防ぎやすくなります。

この記事の前提

  • macOS
  • Node.js インストール済み(前回記事)
  • zsh を利用


環境構築

1. Corepack が使えるか確認

以下を実行します。

corepack --version

バージョンが表示されれば利用可能です。

Node.js 25 以降では Corepack が同梱されないため、必要に応じて別途導入が必要です。

2. Corepack を有効化

次に以下を実行します。

corepack enable

このコマンドで、pnpm や Yarn を Corepack 経由で起動できる状態にします。

3. pnpm を導入

次に以下を実行して pnpm を導入します。

corepack use pnpm@latest

導入後、バージョンを確認します。

pnpm --version

4. ~/.npmrc を作成して minimum-release-age を設定

サプライチェーン対策として、ユーザー単位の設定ファイル ~/.npmrcminimum-release-age を設定します。
cat << 'EOF' >> ~/.npmrc
minimum-release-age=1440
EOF

これで「公開から24時間未満のバージョンを避ける」設定になります。

  • 単位は分です
  • 1週間にしたい場合は 10080 を設定します
  • すぐ取り込みたい場合は 0 を設定します

5. 既存プロジェクトを pnpm 管理へ移行

npm 管理の既存プロジェクトを pnpm に移行する場合は、以下を実行します。

cd /path/to/your-project
pnpm import
pnpm install
pnpm dev
  • pnpm import は既存 lockfile から pnpm-lock.yaml への移行に使います
  • 以後は pnpm-lock.yaml をコミットして運用します

6. 初回インストール時の build script を確認

pnpm では安全機能により、依存パッケージの build script が保留されることがあります。

必要なものだけ承認します。

pnpm approve-builds

内容を確認して、必要な依存のみ許可する運用がおすすめです。

おわりに

今回は、Mac で Node.js を導入したあとに pnpm を導入し、モジュール管理環境を整える手順をまとめました。

単に速くなるだけでなく、依存管理の再現性や安全性を高めやすいのが pnpm の良いところです。

次は、プロジェクト単位での pnpm 運用ルール(lockfile運用、CI設定、更新ポリシー)までまとめると、さらに安定した開発環境になります。