ServBay で pnpm を有効化し利用する方法
pnpm
は、従来型のパッケージマネージャー(npm
や yarn
)が抱えていた依存管理の課題を解決するために設計された、モダンかつ高効率な Node.js のパッケージマネージャーです。コンテンツアドレス指定のファイルシステムとハードリンク・シンボリックリンクの手法を用いることで、pnpm
はディスクスペースの使用量を大幅に削減し、パッケージインストールの速度も劇的に向上させます。ServBay で Node.js 開発を行う開発者にとって、pnpm
を使いこなすことで、プロジェクトの依存管理効率を大きくアップさせることができます。
ServBay にバンドルされた Node.js パッケージには、corepack
という Node.js 公式の実験的ツールが含まれています。これは、プロジェクトごとに特定のパッケージマネージャーバージョン(npm
、yarn
、pnpm
など)の管理や利用をサポートする仕組みです。通常、ServBay の Node.js をインストールしたあとは、corepack
コマンドを通じて pnpm
を有効化できます。
pnpm の有効化
もし pnpm
コマンドがそのままでは利用できない場合、corepack
による有効化がまだ行われていない可能性があります。次の手順で有効化してください。
ターミナルアプリを開きます。
以下のコマンドを入力して、
corepack
経由でpnpm
を有効化します:bashcorepack enable pnpm
1コマンドが正常に実行されると、特に何も表示されません。これは、
corepack
によってpnpm
コマンドがシステムにリンクされたことを意味します。pnpm
が正しく有効になり、バージョン番号が確認できるかチェックします:bashpnpm -v
1このコマンドを実行すると、例えば次のように
pnpm
のバージョン番号が表示されます。bash9.1.0
1バージョン番号が表示されれば、
pnpm
の利用準備は完了です。
corepack
のダウンロード案内について
pnpm
コマンドを使った際に、以下のようなメッセージが表示されることがあります。これは corepack
が、要求されたバージョンの pnpm
をダウンロード・更新していることを示しています。corepack
の正常な動作であり、プロジェクトで求められている、もしくは最新バージョンの pnpm
を利用できるようにするための仕組みです。
$ pnpm -v
! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-9.0.6.tgz
? Do you want to continue? [Y/n]
2
3
Y
を入力し Enter キーを押すと、corepack
にダウンロードが許可され、以降 pnpm
コマンドが実行されます。ダウンロード完了後は、バージョン番号やその他コマンドの結果が正常に表示されます。
pnpm の主な特徴と利用例
pnpm
の設計理念は、効率的な依存管理の実現です。すべてのパッケージは、グローバルなコンテンツアドレス指定ストアに保存され、各パッケージのバージョンは1度だけ格納されます。プロジェクトごとに依存関係が必要になると、pnpm
はそのパッケージをグローバルストアからハードリンクで接続し、node_modules
ディレクトリにはシンボリックリンクによるフラットな構造を作成します。これは npm
で発生するゴースト依存(意図しない依存の参照)とは異なり、pnpm
はプロジェクト内から直接参照できるモジュールを厳密に制限します。つまり、直接依存しているパッケージのみが直接アクセスできます。
この仕組みにより、以下の明確なメリットが得られます。
- ディスク容量の節約: 複数プロジェクト間で同じバージョンの依存ファイルを共有し、重複保存を防止します。
- 高速なインストール: すでにグローバルストアに存在する依存は、単にリンクを作成するだけなので、コピーや再ダウンロードに比べて圧倒的に速くなります。
- 厳密な依存構造管理: ゴースト依存の問題を防ぎ、依存関係をより明確かつコントロールしやすくします。
ServBay 環境下でよく使われる pnpm
コマンドの例をいくつかご紹介します。
プロジェクトが ServBay のウェブサイトルート配下のサブディレクトリ(例:/Applications/ServBay/www/my-servbay-app
)にあると仮定します。
プロジェクト依存のインストール
プロジェクトディレクトリに移動し、package.json
に記載されたすべての依存をインストールするには、次のコマンドを使います。
cd /Applications/ServBay/www/my-servbay-app
pnpm install
2
pnpm
はグローバルストアをチェックし、足りないパッケージをダウンロードし、プロジェクトの node_modules
にリンクを作成します。
新しい依存パッケージの追加
例えば lodash
パッケージを新たに追加したい場合:
pnpm add lodash
これはグローバルストアに存在しない場合は lodash
をダウンロードし、リンクを作成、そして自動的に package.json
と pnpm-lock.yaml
を更新します。
依存パッケージの削除
不要となった依存パッケージ(例:lodash
)を取り除くには:
pnpm remove lodash
これでプロジェクトの依存から lodash
が削除され、package.json
および pnpm-lock.yaml
も更新されます。
スクリプトの実行
pnpm
は、package.json
の scripts
フィールドに記載されたスクリプト実行にも利用できます。
pnpm run dev
# または短縮形で
pnpm dev
2
3
パッケージコマンドの実行 (pnpx)
npx
と同様に、pnpm
には pnpx
(または pnpm exec
)が用意されており、プロジェクトのローカル node_modules/.bin
ディレクトリにインストールされたコマンドをグローバルインストール不要で実行できます。
pnpm exec webpack --version
# または短縮形で
pnpx webpack --version
2
3
まとめ
corepack enable pnpm
コマンドを使うことで、ServBay の Node.js 環境下で手軽に pnpm
を有効化できます。pnpm
の高効率な依存管理機能を活用すれば、Node.js プロジェクトの依存インストール速度や開発効率が大幅に向上し、貴重なディスク容量も節約できます。より快適な開発体験を求める ServBay ユーザーには、pnpm
は非常におすすめのツールです。