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