新しいJavaScriptツールマネージャである Volta は、先頃、最初の安定バージョンをリリースした。Volta は、バージョン情報をローカルに保存して、CLIツールをグローバルにインストールする。Node の nvm
と同様、Volta は、プロジェクトを切り替えるときにバージョンを切り替える心配をすることなく、同じツールの複数のバージョンをインストールできる。Volta は、速度を上げるために Rust で記述され、外部依存のないネイティブバイナリとしてリリースされる。
あるVoltaユーザは、次のように Volta が解決しようとしている問題を要約した:
これは、「自分のマシンで動作する」という昔からの問題です。これは、大企業やオープンソースなど、複数の人が1つのプロジェクトで作業している場合に頻繁に発生します。
開発者として、おそらく取り組んでいる複数のプロジェクトをあなたは持っています。それぞれが互いに異なるツールチェーンに依存しているかもしれません。これらのさまざまなツールチェーンバージョンのすべてをどのように管理しますか?
手間のかからないJavaScriptツールマネージャと自称する Volta は、JavaScriptコマンドラインツール (CLI) の管理と共有を便利で信頼できるものにするよう努めている。そのために、Volta は、適切なバージョンのツールにリンクされているグローバルインストールと Shim を使用する。Volta は、Rust で記述され、単一の高速ネイティブ実行可能ファイルとして配布され、外部依存関係はない。
グローバルインストールには開発者が好まないいくつかの落とし穴がある。グローバルインストールはマシンに対してはローカルだ。2人の開発者は同じグローバルインストールツールの異なるバージョンを使用している可能性があり、異なる動作や不整合が発生する。グローバルインストールはプロジェクトの依存関係だが、依存関係を一覧表示するための npm
パッケージマネージャが使用する package.json
ファイルの dependencies
や devDependencies
プロパティにはない。同じツールの2つのバージョンを使用する2つのプロジェクトを持つ1人の開発者は、プロジェクトを切り替えるときに、あるバージョンから別のバージョンに手動で切り替える必要があるかもしれない。
プロジェクトで使用されるツールをプロジェクトの依存関係として package.json
ファイルの scripts
プロパティを使用して宣言する — 一般的なアプローチで、前述の問題のいくつかは解決するが、固有の問題もいくつかある。Volta チームは、このアプローチについてブログ投稿で次のように述べた:
- 特定のツール (
npm test
とmocha
) のために実行するスクリプトを知るという心理的なオーバーヘッドが必要です- たとえば、テストスイートから単一のテストを実行するようにコマンドをカスタマイズするのが難しい場合があります。
- bootstrap プロジェクトに使用されるツールでは
create-react-app
などは機能しません。
CLI は、Volta によってグローバルにインストールできる (例: volta install mocha
) 。プロジェクトで使用する CLI の特定のバージョンは、pin
サブコマンドで指定できる (例: volta pin node@14
) 。固定されたバージョンは、package.json
プロジェクトファイルの volta
プロパティに保存される:
// package.json
"volta": { "node": "14.13.1" }
Volta は、開発者がプロジェクトディレクトリに移動すると、この package.json
に基づいて使用する CLI のバージョンを自動的に切り替える。必要なバージョンがまだインストールされていない場合、Volta はそれを自動的にインストールする。Jame Davenport氏は、Volta が現在のディレクトリに基づいてツールバージョンを更新する次の図を提供した:
より複雑なワークフローをサポートするために、Github Actionを利用できる。一部の Volta ユーザは、Volta を有利に使用して Node バージョンマネージャの nvm
を置き換えることを報告している。
昨年はツールとツール管理の革新のレベルが高まった。Rome は、フロントエンド開発ツールチェーンを統合し、サードパーティの依存関係とそれらに関連する互換性とバージョンの問題を排除することを目的としている。
Volta は、BSD2ライセンスの下で配布されているオープンソースソフトウェアだ。貢献は大歓迎であり、プロジェクトの貢献ガイドラインに従う必要がある。