Bun完全ガイド2025 - 高速JavaScriptランタイムとパッケージマネージャーの実践活用
Bunは高速なJavaScriptランタイムとして注目されています。本記事では、Bunの基本からパフォーマンス最適化、実践的な活用方法まで、Daily Hackでも使用しているBunの魅力を徹底解説します。
Rust製の高速JavaScriptツールマネージャーVoltaを徹底解説。プロジェクト別のNode.jsバージョン管理、チーム開発での環境統一、npm/yarn/pnpmの切り替えまで、モダンな開発環境構築の全てを網羅します。
Volta は、JavaScriptツールチェーンを管理する次世代のツールマネージャーです。Rust製の高速な実装により、Node.js、npm、yarn、pnpmなどのバージョンをプロジェクト単位で自動的に切り替え、チーム全体で一貫した開発環境を実現します。
開発者間でNode.jsバージョンが異なる
プロジェクト毎にnvmで切り替える手間
新メンバーのセットアップに時間がかかる
自動バージョン管理・高速切り替え
Microsoft、Sentryなど大手企業が採用
特徴 | Volta | nvm | fnm | asdf |
---|---|---|---|---|
実装言語 | Rust | Shell | Rust | Shell |
速度 | ★★★★★ | ★★☆☆☆ | ★★★★☆ | ★★★☆☆ |
自動切り替え | ✅ | 部分的 | ✅ | ✅ |
Windows対応 | ✅ ネイティブ | ❌ WSL必須 | ✅ | ❌ |
パッケージマネージャー管理 | ✅ 完全対応 | ❌ | 部分的 | ✅ |
グローバルツール管理 | ✅ | ❌ | ❌ | ✅ |
# Voltaのインストール
curl https://get.volta.sh | bash
# シェルの再起動または
source ~/.bashrc # または ~/.zshrc
# インストール確認
volta --version
# volta 2.0.2
# Node.jsの最新安定版をインストール
volta install node
# 特定バージョンのインストール
volta install node@18.19.0
volta install npm@10.5.0
volta install yarn@1.22.21
# PowerShellを管理者権限で実行
# Voltaインストーラーをダウンロード
Invoke-WebRequest -Uri "https://github.com/volta-cli/volta/releases/download/v2.0.2/volta-2.0.2-windows.zip" -OutFile volta.zip
# 解凍してインストール
Expand-Archive volta.zip -DestinationPath C:\volta
$env:Path += ";C:\volta"
# 環境変数の設定
[Environment]::SetEnvironmentVariable("Path", $env:Path, [EnvironmentVariableTarget]::User)
# Node.jsのインストール
volta install node
# GitHub Actions
- name: Setup Volta
uses: volta-cli/action@v4
with:
node-version: 18.19.0
npm-version: 10.5.0
# GitLab CI
before_script:
- curl https://get.volta.sh | bash
- export VOLTA_HOME="$HOME/.volta"
- export PATH="$VOLTA_HOME/bin:$PATH"
- volta install node@18.19.0
チャートを読み込み中...
# プロジェクトでNode.jsバージョンを固定
cd my-project
volta pin node@18.19.0
# npmバージョンも固定
volta pin npm@10.5.0
# package.jsonに自動追加される
{
"name": "my-project",
"version": "1.0.0",
"volta": {
"node": "18.19.0",
"npm": "10.5.0"
}
}
Volta の強力な機能の 1 つは、グローバルツールもプロジェクトごとに管理できることです:
# グローバルツールのインストール
volta install typescript
volta install eslint
volta install prettier
# プロジェクト固有のグローバルツール
cd project-a
volta install typescript@4.9.5 # project-a用
cd ../project-b
volta install typescript@5.3.3 # project-b用
# どちらのプロジェクトでも正しいバージョンが使われる
tsc --version # 各プロジェクトで異なるバージョン
# npmバージョンの管理
volta install npm@10.5.0
# プロジェクトに固定
volta pin npm@10.5.0
# 異なるプロジェクトで異なるnpmバージョン
cd legacy-project
volta pin npm@8.19.4 # 古いバージョン
cd modern-project
volta pin npm@10.5.0 # 最新バージョン
# Yarn Classicのインストール
volta install yarn@1.22.21
# Yarn Berryのインストール
volta install yarn@3.8.0
# プロジェクトごとの設定
cd yarn-classic-project
volta pin yarn@1.22.21
cd yarn-berry-project
volta pin yarn@3.8.0
# pnpmのインストール
volta install pnpm
# 特定バージョン
volta install pnpm@8.15.4
# プロジェクトに固定
volta pin pnpm@8.15.4
# package.jsonに追加される
{
"volta": {
"node": "18.19.0",
"pnpm": "8.15.4"
}
}
// volta-setup.js
const { execSync } = require('child_process');
const { readFileSync } = require('fs');
function setupVolta() {
try {
// Voltaがインストールされているか確認
execSync('volta --version', { stdio: 'ignore' });
console.log('✅ Volta is installed');
} catch {
console.error('❌ Volta is not installed');
console.log('Please install Volta: https://volta.sh');
process.exit(1);
}
// package.jsonからバージョン情報を読み取り
const pkg = JSON.parse(readFileSync('package.json', 'utf8'));
if (!pkg.volta) {
console.error('❌ No volta configuration in package.json');
process.exit(1);
}
console.log('📦 Installing tools...');
execSync('volta install', { stdio: 'inherit' });
console.log('✅ All tools installed successfully');
}
setupVolta();
// package.json
{
"name": "team-project-template",
"version": "1.0.0",
"scripts": {
"setup": "node volta-setup.js && npm install",
"dev": "vite",
"build": "tsc && vite build",
"test": "jest"
},
"volta": {
"node": "18.19.0",
"npm": "10.5.0",
"yarn": "1.22.21"
},
"engines": {
"node": ">=18.0.0",
"npm": ">=10.0.0"
}
}
# ~/.bashrc または ~/.zshrc
# Voltaホームディレクトリ
export VOLTA_HOME="$HOME/.volta"
# Voltaのビンディレクトリをパスに追加
export PATH="$VOLTA_HOME/bin:$PATH"
# カスタムフック(プロジェクト切り替え時)
volta_project_hook() {
if [ -f "package.json" ] && grep -q '"volta"' package.json; then
echo "🚀 Volta project detected"
volta list
fi
}
# ディレクトリ変更時に自動実行
chpwd() {
volta_project_hook
}
// 企業プロキシ設定
process.env.HTTPS_PROXY = 'http://proxy.company.com:8080';
process.env.HTTP_PROXY = 'http://proxy.company.com:8080';
// Volta設定ファイル(~/.volta/config.json)
{
"node": {
"registry": "https://registry.company.com/",
"mirror": "https://mirror.company.com/node/"
},
"npm": {
"registry": "https://npm.company.com/"
}
}
source ~/.bashrc
を実行HTTPS_PROXY
を設定# Voltaの状態確認
volta list
# ツールチェーンの詳細表示
volta list --format=plain
# 現在のプロジェクト設定
volta pin --show
# キャッシュのクリア
volta completions --clear-cache
# 1. 現在のNode.jsバージョンを確認
nvm list
# 2. Voltaをインストール
curl https://get.volta.sh | bash
# 3. 同じバージョンをVoltaでインストール
volta install node@18.19.0
# 4. グローバルパッケージの移行
npm list -g --depth=0 > global-packages.txt
# 手動で必要なものをvolta installで再インストール
# 5. nvmの無効化(.bashrcから削除)
# export NVM_DIR="$HOME/.nvm" # この行を削除
操作 | Volta | nvm | 改善率 |
---|---|---|---|
初期起動 | 0.01秒 | 0.5秒 | 50x |
バージョン切り替え | 即時 | 2-3秒 | ∞ |
ツールインストール | 5秒 | 30秒 | 6x |
メモリ使用量 | 5MB | 50MB | 10x |
Volta を採用してから、新しい開発者のオンボーディング時間が 75%短縮されました。環境構築の問題がほぼゼロになり、開発に集中できるようになりました。
Volta は、JavaScriptツールチェーン管理の新しい標準として、以下の価値を提供します:
特に、複数プロジェクトを扱う開発者や、チーム開発での環境統一に課題を感じている場合は、Volta の導入を強く推奨します。