SJ blog
frontend
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

Vite 8がRolldownを採用——Rustビルダーで本番ビルドが最大25倍高速化

2026年3月リリースのVite 8はesbuild+RollupのデュアルバンドラーをRust製Rolldownに統合。25倍のビルド高速化と移行の破壊的変更を整理する。

一言結論

Vite 8はRust製Rolldownへの移行で本番ビルドを最大25倍高速化したが、manualChunksの廃止・CJSインターオペラビリティの変更など破壊的変更があるため、既存プロジェクトは移行ガイドに従った対応が必要だ。

Vite のアーキテクチャ問題と Rolldown の登場

Vite はこれまで dev と prod で異なるバンドラー を使う設計だった。

Vite 7 以前のアーキテクチャ:
  開発サーバー (dev):   esbuild(Golang製、高速)
  本番ビルド (build):   Rollup(JavaScript製、成熟・柔軟)

  問題点:
    - dev と build で挙動が微妙に違う
    - Rollup は JS 製なので大規模プロジェクトでビルドが遅い
    - プラグインが二重管理になりやすい
    - esbuild の設定と Rollup の設定が別々

この「デュアルバンドラー問題」を根本解決するために生まれたのが Rolldown だ。VoidZero チームが1年以上かけて開発した Rust 製バンドラーで、Rollup 互換の Plugin API を持ちながら esbuild レベルの速度を実現する。

Vite 8.0(2026年3月12日リリース)でRolldownが正式なデフォルトバンドラーとなり、dev/build 両方を単一エンジンで処理するようになった。

パフォーマンス改善の実数

ベンチマーク(19,000 モジュール)

バンドル速度の比較:
  Rollup(旧):     40.10s
  Rolldown(新):    1.61s  ← 25倍高速

  3x dev サーバー起動
  40% 速い full リロード
  10x 少ないネットワークリクエスト(dev 時)

実プロジェクトでの報告

Linear(タスク管理 SaaS):
  本番ビルド: 46s → 6s  (87% 削減)

その他採用例(コミュニティ報告):
  中規模 React アプリ(~3,000 モジュール): 38〜64% 短縮

Vite 7 → 8 への移行手順

基本的な移行は簡単

# package.json の vite を更新するだけ
npm install vite@^8
# → ほとんどのプロジェクトはこれだけで動く

# 動作確認
npm run dev
npm run build

ただし以下の破壊的変更を確認する必要がある。

主要な破壊的変更

1. manualChunks が廃止

// ❌ Vite 7 以前
export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
          utils: ['lodash', 'date-fns'],
        },
      },
    },
  },
})

// ✅ Vite 8: codeSplitting を使う
export default defineConfig({
  build: {
    rolldownOptions: {
      output: {
        // Rolldown の codeSplitting API(より細かい制御が可能)
        advancedChunks: {
          groups: [
            { name: 'vendor', test: /node_modules/ },
          ],
        },
      },
    },
  },
})

2. CJS インターオペラビリティの変更

CommonJS の require() 呼び出しを含むコードは Rolldown の厳格なモジュール処理で壊れることがある。

// 一時的な回避策(移行期間中)
export default defineConfig({
  build: {
    rolldownOptions: {
      // ❌ require() が混在するレガシーコードへの一時対応
      // 根本解決は ESM への移行推奨
    },
  },
  legacy: {
    inconsistentCjsInterop: true, // CJS 互換フラグ(非推奨)
  },
})

3. esbuild 依存のプラグインが変わる

// ❌ Vite 7: esbuild の変換関数を直接使うプラグイン
import { transformWithEsbuild } from 'vite'

// ✅ Vite 8: OXC(Rust 製コンパイラ)の変換関数に移行
import { transformWithOxc } from 'vite'

// esbuild はオプションのピア依存になった(自動インストールされない)

Node.js バージョン要件の変更

Vite 8 の最低要件:
  Node.js 20.19+  または
  Node.js 22.12+

  Node.js 18 は EOL により Vite 8 でサポート外
  → Node 18 を使っているプロジェクトは先に Node 20/22 に上げる

Vite + Rolldown + OXC の新ツールチェーン

Vite 8 は単体のツールではなく、三つの協調するチームによる End-to-End ツールチェーン の入口になった。

VoidZero ツールチェーン(2026年):
  Vite 8    → ビルドツール・開発サーバー
  Rolldown  → バンドラー(Rust、Rollup 互換 API)
  OXC       → パーサー・コンパイラ・Linter(Rust)

  特徴:
    一貫した動作保証(dev と build で挙動が一致)
    全レイヤーが Rust 製 → ネイティブ速度
    プラグイン API の統一(Rollup 互換)

新 DevTools(Rolldown 使用時のみ)

Vite 8 の DevTools(ビルド分析・デバッグ):
  - バンドルの依存グラフを可視化
  - チャンク分割のウォーターフォールを表示
  - モジュールサイズとツリーシェイクの効果を確認
  → vite build --debug で起動

既存プラグインとの互換性

互換性の現実(2026年4月時点):
  ✅ ほぼすべての既存 Vite プラグインは動作する
     → Rolldown は Rollup Plugin API に準拠

  ⚠️ 要確認のプラグイン:
     - esbuild を直接使うプラグイン(transformWithEsbuild)
     - CommonJS 変換に強く依存するプラグイン
     - Rollup 内部 API を叩いているプラグイン

  🔍 確認方法:
     npm run build 2>&1 | grep -i "warning\|deprecated"

Wasm SSR サポート(ボーナス機能)

// Vite 8 では SSR 環境で WebAssembly モジュールがネイティブサポート
// Node.js の実験的 --experimental-wasm-modules フラグ不要

// vite.config.ts
export default defineConfig({
  ssr: {
    // wasm は自動的に処理される(追加設定不要)
  },
})

// サーバーサイドのコード
import wasmModule from './heavy-computation.wasm?init'
const instance = await wasmModule()
const result = instance.exports.compute(42)

移行チェックリスト

移行前の確認:
  □ Node.js バージョンが 20.19+ または 22.12+ か
  □ manualChunks を使っていないか(→ codeSplitting に移行)
  □ CJS の require() を使うレガシーコードがないか
  □ transformWithEsbuild を使うプラグインがないか

移行手順:
  1. npm install vite@^8
  2. npm run build → エラーがなければ完了
  3. エラーがある場合:
     - CJS エラー: legacy.inconsistentCjsInterop: true で一時対応
     - manualChunks エラー: rolldownOptions.output.advancedChunks に移行
     - プラグインエラー: プラグインの最新バージョンを確認

移行後の確認:
  □ dev サーバーの起動が速くなったか(3x 期待値)
  □ 本番ビルドが短縮されたか(プロジェクトサイズで 38〜87% 期待)
  □ チャンクの分割結果が同等か(バンドルサイズを比較)

注意点

  • Rolldown の minification 機能は 2026年4月時点でまだアルファ段階。デフォルトでは有効だが、出力サイズが Rollup 比でわずかに異なる可能性がある
  • Rolldown プロジェクト自体はリリース候補(RC)ステータスのため、エッジケースでの挙動変化に注意
  • ブラウザターゲットのデフォルトが変わった('modules''baseline-widely-available')ため、古いブラウザをサポートする場合は build.target を明示的に設定すること

まとめ

Vite 8 への移行は「バンドラーの交換」ではなく「フロントエンドツールチェーンのアーキテクチャシフト」だ。esbuild/Rollup のデュアル構成が解消され、dev と build の挙動が統一されたことで「開発中は動くが本番で壊れる」問題が構造的に減る。移行コストは小さいプロジェクトではほぼゼロで、大規模プロジェクトでも移行ガイドに従えば対処可能な範囲に収まっている。

参考リンク