Skip to content

volta run

指定されたツールバージョンでコマンドを実行します。

使用法

bash
volta run [オプション] [--node <version>] [--npm <version>] [--yarn <version>] [--pnpm <version>] [--] <コマンド> [引数...]

オプション

--node <version>

使用するNode.jsのバージョンを指定します。

--npm <version>

使用するnpmのバージョンを指定します。

--yarn <version>

使用するYarnのバージョンを指定します。

--pnpm <version>

使用するpnpmのバージョンを指定します(pnpmサポートが有効な場合)。

--verbose

詳細な出力を有効にします。

--quiet

不要な出力を抑制します。

--help

このコマンドのヘルプ情報を表示します。

--

オプションの終了を示します。これ以降はすべてコマンドと引数として扱われます。

引数

<コマンド>

実行するコマンド。

[引数...]

コマンドに渡す引数。

基本的な使用法

bash
# 特定のNodeバージョンでスクリプトを実行
volta run --node 16.14.2 node script.js

# 特定のnpmバージョンでコマンドを実行
volta run --npm 8.19.4 npm install

# 複数のツールバージョンを指定
volta run --node 18.17.0 --npm 9.8.0 npm run build

Yarnでの使用

bash
# 特定のYarnバージョンでコマンドを実行
volta run --yarn 1.22.19 yarn install

# Node.jsとYarnの両方を指定
volta run --node 16.14.2 --yarn 1.22.19 yarn build

pnpmでの使用

bash
# pnpmサポートが有効な場合
volta run --pnpm 7.33.6 pnpm install

# Node.jsとpnpmを組み合わせ
volta run --node 18.17.0 --pnpm 8.6.0 pnpm run test

複雑なコマンド

bash
# シェルスクリプトを実行
volta run --node 18.17.0 bash -c "npm install && npm run build"

# 複数の引数を持つコマンド
volta run --node 16.14.2 node -e "console.log(process.version)"

# -- を使用してオプションを分離
volta run --node 18.17.0 -- node --inspect script.js

実践的な使用例

異なる環境でのテスト

bash
# Node.js 16でテストを実行
volta run --node 16.14.2 npm test

# Node.js 18で同じテストを実行
volta run --node 18.17.0 npm test

# Node.js 20で最新のテストを実行
volta run --node 20.5.0 npm test

特定バージョンでのビルド

bash
# 本番環境と同じバージョンでビルド
volta run --node 18.17.0 --npm 9.8.0 npm run build

# レガシープロジェクトのビルド
volta run --node 14.21.3 --npm 6.14.18 npm run build:legacy

パッケージの検証

bash
# 異なるnpmバージョンでパッケージをインストール
volta run --npm 8.19.4 npm install my-package
volta run --npm 9.8.0 npm install my-package
volta run --npm 10.0.0 npm install my-package

CI/CDでの活用

GitHub Actions

yaml
name: Test Multiple Versions
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.14.2, 18.17.0, 20.5.0]
        npm-version: [8.19.4, 9.8.0]
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Install Volta
        run: |
          curl https://get.volta.sh | bash
          echo "$HOME/.volta/bin" >> $GITHUB_PATH
      
      - name: Test with specified versions
        run: |
          volta run --node ${{ matrix.node-version }} --npm ${{ matrix.npm-version }} npm ci
          volta run --node ${{ matrix.node-version }} --npm ${{ matrix.npm-version }} npm test

スクリプトでの使用

bash
#!/bin/bash
# test-all-versions.sh

# テストする組み合わせを定義
node_versions=("16.14.2" "18.17.0" "20.5.0")
npm_versions=("8.19.4" "9.8.0")

for node_version in "${node_versions[@]}"; do
  for npm_version in "${npm_versions[@]}"; do
    echo "Testing Node.js $node_version with npm $npm_version"
    
    volta run --node "$node_version" --npm "$npm_version" npm ci
    volta run --node "$node_version" --npm "$npm_version" npm test
    
    if [ $? -ne 0 ]; then
      echo "Test failed for Node.js $node_version with npm $npm_version"
      exit 1
    fi
  done
done

echo "All tests passed!"

パフォーマンステスト

ベンチマーク実行

bash
#!/bin/bash
# benchmark-versions.sh

echo "=== Node.js バージョン別ベンチマーク ==="

versions=("16.14.2" "18.17.0" "20.5.0")

for version in "${versions[@]}"; do
  echo "--- Node.js $version ---"
  
  # 起動時間を測定
  start_time=$(date +%s.%N)
  volta run --node "$version" node -e "console.log('Hello')" > /dev/null
  end_time=$(date +%s.%N)
  
  duration=$(echo "$end_time - $start_time" | bc)
  echo "起動時間: ${duration}秒"
  
  # メモリ使用量を測定
  volta run --node "$version" node -e "
    const used = process.memoryUsage();
    console.log('メモリ使用量:', Math.round(used.rss / 1024 / 1024), 'MB');
  "
  
  echo
done

デバッグでの使用

詳細ログ出力

bash
# 詳細な情報を表示してコマンドを実行
volta run --verbose --node 18.17.0 npm install

# 静音モードで実行
volta run --quiet --node 18.17.0 npm install

環境確認

bash
# 使用されているツールのバージョンを確認
volta run --node 18.17.0 node --version
volta run --npm 9.8.0 npm --version

# プロセス情報を確認
volta run --node 18.17.0 node -e "
  console.log('Node.js version:', process.version);
  console.log('npm version:', process.env.npm_version);
  console.log('Platform:', process.platform);
  console.log('Architecture:', process.arch);
"

エラーハンドリング

バージョンが見つからない場合

bash
volta run --node 99.99.99 node --version
# Error: Node version 99.99.99 is not installed

# 自動インストール付きのスクリプト
#!/bin/bash
node_version="18.17.0"

if ! volta list node | grep -q "$node_version"; then
  echo "Node.js $node_version をインストール中..."
  volta install "node@$node_version"
fi

volta run --node "$node_version" node script.js

コマンド失敗時の処理

bash
#!/bin/bash
# エラーハンドリング付きのスクリプト

set -e  # エラー時に停止

trap 'echo "Error: Command failed with exit code $?"' ERR

echo "テストを実行中..."
volta run --node 18.17.0 --npm 9.8.0 npm test

echo "ビルドを実行中..."
volta run --node 18.17.0 --npm 9.8.0 npm run build

echo "すべて完了!"

高度な使用例

条件付き実行

bash
#!/bin/bash
# conditional-run.sh

# プロジェクトの設定を確認
if [ -f package.json ]; then
  # package.jsonから必要なバージョンを取得
  node_version=$(jq -r '.volta.node // "18.17.0"' package.json)
  npm_version=$(jq -r '.volta.npm // "9.8.0"' package.json)
  
  echo "プロジェクト設定: Node.js $node_version, npm $npm_version"
  volta run --node "$node_version" --npm "$npm_version" "$@"
else
  echo "package.jsonが見つかりません。デフォルトバージョンを使用します。"
  volta run --node latest --npm latest "$@"
fi

並列実行

bash
#!/bin/bash
# parallel-run.sh

# 複数のNode.jsバージョンで並列テスト
versions=("16.14.2" "18.17.0" "20.5.0")

for version in "${versions[@]}"; do
  {
    echo "Starting tests on Node.js $version"
    volta run --node "$version" npm test
    echo "Completed tests on Node.js $version"
  } &
done

# すべてのバックグラウンドジョブの完了を待機
wait
echo "All tests completed!"

関連コマンド

  • volta install - ツールのインストール
  • volta pin - プロジェクトのツールバージョンを固定
  • volta which - 現在使用されているツールのパスを確認
  • volta list - インストール済みツールの確認

ベストプラクティス

1. スクリプトでの使用

bash
# 再利用可能なラッパー関数
run_with_volta() {
  local node_version="$1"
  local npm_version="$2"
  shift 2
  
  volta run --node "$node_version" --npm "$npm_version" "$@"
}

# 使用例
run_with_volta 18.17.0 9.8.0 npm install
run_with_volta 18.17.0 9.8.0 npm test

2. 設定ファイルの活用

json
// scripts/volta-config.json
{
  "environments": {
    "development": {
      "node": "18.17.0",
      "npm": "9.8.0"
    },
    "production": {
      "node": "18.17.0",
      "npm": "9.8.0"
    },
    "legacy": {
      "node": "16.14.2",
      "npm": "8.19.4"
    }
  }
}

3. ログ記録

bash
# 実行ログを記録
log_volta_run() {
  local logfile="volta-run.log"
  echo "[$(date)] $*" >> "$logfile"
  volta run "$@"
  echo "[$(date)] Exit code: $?" >> "$logfile"
}

# 使用例
log_volta_run --node 18.17.0 npm test