Skip to content

プロジェクト間の切り替え

Volta の主要な利点の一つは、異なるプロジェクトでの異なるツールバージョンをシームレスに処理することです。このページでは、プロジェクト間を移動する際に Volta がどのように自動的に JavaScript 環境を管理するかを説明します。

自動バージョン切り替え

手動でツールバージョン間を切り替える必要がある他のバージョンマネージャーとは異なり、Volta は現在のディレクトリに基づいて自動的にこれを処理します。

動作原理

  1. JavaScript コマンド(nodenpm、パッケージバイナリなど)を実行すると、Volta のシムがコマンドをインターセプト
  2. Volta は現在のディレクトリをチェックし、固定されたツールバージョンを持つプロジェクト内にいるかを確認
  3. そうである場合、Volta はそのプロジェクトの package.json 内の固定バージョンを使用
  4. 固定バージョンを持つプロジェクト内にいない場合、Volta はデフォルトツールを使用

これらはすべて透明に行われ、追加のコマンドは不要です。

ワークフロー例

異なる Node.js 要件を持つ2つのプロジェクトがあると想像してください:

プロジェクト A~/projects/project-a/package.json):

json
{
  "volta": {
    "node": "14.19.1",
    "npm": "6.14.16"
  }
}

プロジェクト B~/projects/project-b/package.json):

json
{
  "volta": {
    "node": "16.14.2",
    "npm": "8.5.0"
  }
}

ワークフローは以下のようになります:

bash
# プロジェクト A 内
cd ~/projects/project-a
node --version  # v14.19.1 を表示
npm --version   # v6.14.16 を表示

# プロジェクト B に切り替え
cd ~/projects/project-b
node --version  # 自動的に v16.14.2 を表示
npm --version   # 自動的に v8.5.0 を表示

# どのプロジェクト外でも
cd ~
node --version  # デフォルト Node バージョンを表示

ネストされたプロジェクト

ネストされたプロジェクトがある場合、Volta は volta セクションを持つ最も近い package.json からツールバージョンを使用します。

例:

/parent-project/package.json(volta セクション有り、node@14)
/parent-project/child-project/package.json(volta セクション有り、node@16)
/parent-project/other-directory/(package.json なし)

以下の場所でコマンドを実行すると:

  • /parent-project/child-project/ - Volta は Node.js 16 を使用
  • /parent-project/other-directory/ - Volta は Node.js 14 を使用
  • /parent-project/ - Volta は Node.js 14 を使用

パッケージバイナリ

Volta の自動切り替えはパッケージバイナリにも適用されます。例えば、プロジェクト固有バージョンの TypeScript があり、tsc を実行すると、Volta は正しいバージョンが使用されることを保証します。

グローバル vs. ローカルパッケージ

パッケージバイナリを実行する際:

  1. バイナリがプロジェクトの node_modules/.bin/ に存在する場合、Volta はそのバージョンを使用
  2. 存在しないが、パッケージが Volta 経由でグローバルインストールされている場合、そのバージョンを使用
  3. そうでなければ、コマンドが見つからないエラーを表示

トラブルシューティング

バージョン切り替えで問題が発生した場合:

  • プロジェクトの package.jsonvolta セクションがあることを確認
  • volta list all を実行してインストール済みツールをチェック
  • 必要なツールがプロジェクトに固定されているか、デフォルトバージョンとしてインストールされているかを確認
  • volta which node を実行して Volta がどのバージョンの Node.js を使用しているか、その理由を確認