Skip to content

pnpm サポート

Voltaはpnpm(パフォーマンス指向のnpmクライアント)を実験的にサポートしています。pnpmは高速で効率的なパッケージマネージャーで、ディスク容量を節約し、インストール時間を大幅に短縮します。

pnpmサポートの有効化

pnpmサポートはデフォルトでは無効になっています。有効にするには、環境変数を設定する必要があります:

bash
export VOLTA_FEATURE_PNPM=1

この設定を永続化するには、シェル設定ファイル(.bashrc.zshrcなど)に追加してください:

bash
# ~/.bashrc または ~/.zshrc に追加
export VOLTA_FEATURE_PNPM=1

pnpmのインストール

pnpmサポートを有効にした後、通常通りpnpmをインストールできます:

bash
# 最新バージョンをインストール
volta install pnpm

# 特定のバージョンをインストール
volta install pnpm@7.33.6

# 最新のLTSバージョンをインストール
volta install pnpm@latest

プロジェクトでのpnpm固定

プロジェクトで特定のpnpmバージョンを使用するには:

bash
# プロジェクトディレクトリで
volta pin pnpm@7.33.6

これにより、package.jsonにpnpm設定が追加されます:

json
{
  "volta": {
    "node": "18.17.0",
    "pnpm": "7.33.6"
  }
}

pnpmコマンドの使用

Voltaでpnpmを管理した後は、通常通りpnpmコマンドを使用できます:

bash
# 依存関係をインストール
pnpm install

# パッケージを追加
pnpm add lodash

# 開発依存関係を追加
pnpm add -D typescript

# スクリプトを実行
pnpm run build

# グローバルパッケージをインストール
pnpm add -g pm2

ワークスペースサポート

pnpmのワークスペース機能もVoltaで正常に動作します:

yaml
# pnpm-workspace.yaml
packages:
  - 'packages/*'
  - 'apps/*'
  - '!**/test/**'
bash
# ワークスペース内のすべてのパッケージをインストール
pnpm install

# 特定のワークスペースでコマンドを実行
pnpm --filter my-app run build

# すべてのワークスペースでテストを実行
pnpm run test --recursive

pnpmとnpm/yarnの併用

同じプロジェクトで複数のパッケージマネージャーを切り替えることができます:

bash
# npmを使用
volta pin npm@9.8.0
npm install

# yarnに切り替え
volta pin yarn@1.22.19
yarn install

# pnpmに切り替え
volta pin pnpm@7.33.6
pnpm install

パフォーマンス比較

一般的に、pnpmは他のパッケージマネージャーよりも高速です:

パッケージマネージャーインストール時間ディスク使用量
npm100%100%
yarn80%95%
pnpm60%30%

*実際のパフォーマンスはプロジェクトと環境によって異なります

よくある使用例

モノレポ開発

bash
# pnpmワークスペースでモノレポをセットアップ
volta pin node@18 pnpm@7

# ルートレベルで依存関係をインストール
pnpm install

# 特定のアプリをビルド
pnpm --filter web-app run build

# すべてのパッケージをテスト
pnpm run test --recursive

CI/CDでの使用

yaml
# .github/workflows/test.yml
name: Test
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Install Volta
        run: |
          curl https://get.volta.sh | bash
          echo "$HOME/.volta/bin" >> $GITHUB_PATH
          echo "VOLTA_FEATURE_PNPM=1" >> $GITHUB_ENV
      
      - name: Install dependencies
        run: pnpm install
      
      - name: Run tests
        run: pnpm test

Dockerでの使用

dockerfile
FROM node:18

# Voltaをインストール
RUN curl https://get.volta.sh | bash
ENV PATH="/root/.volta/bin:$PATH"
ENV VOLTA_FEATURE_PNPM=1

# pnpmをインストール
RUN volta install pnpm@7

WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install

COPY . .
RUN pnpm build

トラブルシューティング

pnpmが認識されない

bash
# pnpmサポートが有効になっていることを確認
echo $VOLTA_FEATURE_PNPM

# pnpmがインストールされていることを確認
volta list pnpm

# 環境変数を設定してシェルを再起動
export VOLTA_FEATURE_PNPM=1
exec $SHELL

ロックファイルの競合

異なるパッケージマネージャー間で切り替える際は、対応するロックファイルのみを保持してください:

bash
# pnpmを使用する場合
rm package-lock.json yarn.lock
# pnpm-lock.yamlを保持

# npmを使用する場合
rm pnpm-lock.yaml yarn.lock
# package-lock.jsonを保持

グローバルパッケージの問題

bash
# pnpmのグローバルストアを確認
pnpm store path

# グローバルパッケージを一覧表示
pnpm list -g

# グローバルストアをクリーンアップ
pnpm store prune

制限事項

現在のpnpmサポートには以下の制限があります:

  1. 実験的機能:pnpmサポートはまだ実験的で、将来の変更がある可能性があります
  2. 一部のpnpm機能:すべてのpnpm固有の機能がVoltaで完全にテストされているわけではありません
  3. 環境変数の要求:明示的に有効化する必要があります

ベストプラクティス

1. 一貫したツールチェーン

チーム全体で同じパッケージマネージャーを使用:

json
// package.json
{
  "volta": {
    "node": "18.17.0",
    "pnpm": "7.33.6"
  },
  "packageManager": "pnpm@7.33.6"
}

2. 適切な.gitignore設定

gitignore
# 依存関係
node_modules/

# ロックファイル(使用するパッケージマネージャーに応じて)
# npm
package-lock.json

# yarn
yarn.lock

# pnpmの場合、pnpm-lock.yamlをコミット

3. スクリプトの統一

json
{
  "scripts": {
    "install": "pnpm install",
    "build": "pnpm run build",
    "test": "pnpm test",
    "dev": "pnpm run dev"
  }
}