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は他のパッケージマネージャーよりも高速です:
パッケージマネージャー | インストール時間 | ディスク使用量 |
---|---|---|
npm | 100% | 100% |
yarn | 80% | 95% |
pnpm | 60% | 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サポートには以下の制限があります:
- 実験的機能:pnpmサポートはまだ実験的で、将来の変更がある可能性があります
- 一部のpnpm機能:すべてのpnpm固有の機能がVoltaで完全にテストされているわけではありません
- 環境変数の要求:明示的に有効化する必要があります
ベストプラクティス
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"
}
}