💫

Vite 8の新バンドラーRolldownはどれくらい速い?中規模OSSプロジェクトで実測してみた

に公開

はじめに

2026年3月12日、Vite 8がリリースされた。最大の変更点は、本番ビルドのバンドラーがRollup(JavaScript製)からRolldown(Rust製)に置き換わったこと。

公式ブログは「10〜30倍の高速化」を謳っていて、Linearでは本番ビルドが46秒から6秒になったらしい。

本当にそんなに速いのか?手元で実測してみた。

https://main.vite.dev/blog/announcing-vite8

Vite 8で何が変わったのか

Vite 7までは、開発と本番で別々のバンドラーを使っていた。

Vite 7以前:
  開発 → esbuild(Rust製、速い)
  本番 → Rollup(JS製、柔軟だけど遅い)

この二重構成は速度以外にもいくつかの問題を抱えていた。

開発では動くのに本番で壊れる。 開発時、esbuildはモジュールをバンドルせずに個別のままブラウザに渡す。一方、本番ではRollupがすべてをまとめてバンドルする。この違いにより、モジュールの解決順序や副作用の実行タイミングが変わり、本番ビルドでだけ発生するバグが生まれることがあった。開発環境で再現しないバグのデバッグほど厄介なものはない。

プラグインの二重管理。 esbuildとRollupはプラグインAPIが別物だ。Viteチームはこの2つを繋ぐグルーコードを維持し続けなければならず、エッジケースは増える一方だった。プラグイン作者も「開発時とビルド時で挙動が異なる」問題に悩まされていた。

開発時のリクエスト爆発。 esbuildはモジュールをバンドルしないため、大規模プロジェクトでは開発サーバーへのHTTPリクエストが数百〜数千に膨れ上がり、ページの初期表示が重くなる問題があった。

Vite 8では、これらの問題を解決するために両方をRolldown(Rust製)に統一した。

Vite 8:
  開発 → Rolldown(Rust製)
  本番 → Rolldown(Rust製)

バンドラーが1つになったことで、開発と本番の挙動が一致し、プラグインAPIも統一された。さらに開発時もバンドルして配信するfull bundle modeが使えるようになり、リクエスト爆発の問題も解消された。もちろん、Rust製なので本番ビルドも大幅に速い。

計測方法

計測環境

  • MacBook Air(Apple M4、16GB RAM)
  • Node.js v20.19.6
  • pnpm v10.28.0

計測対象

OSSの中規模プロジェクト react-antd-admin を使った。React + Ant Design + TypeScriptの管理画面テンプレートで、規模はこんな感じ。

  • TSX/TSファイル: 238個
  • ビルド時のモジュール数: 5,619

やったこと

同一プロジェクトで、Viteのバージョンだけを差し替えてビルド時間を比較した。

# Vite 7でビルド
pnpm add vite@^7.0.0
time npx vite build

# Vite 8でビルド
pnpm add vite@^8.0.0
time npx vite build

公平を期すため、manualChunks の設定は無効化して統一した(理由は後述)。

今回は各バージョン1回ずつの計測なので、厳密なベンチマークというよりは体感の裏付けくらいのつもりで見てほしい。

結果

Vite 7.3.1 (Rollup) Vite 8.0.0 (Rolldown)
ビルド時間 6.52s 1.82s

約3.6倍の高速化。

Viteが出力する built in X.XXs の値で比較している。1回の計測ではあるが、3倍以上の差は誤差では片付かない。

他の事例との比較

プロジェクト 規模 改善幅 ソース
公式ベンチ(19,000モジュール) 25倍 Vite公式ブログ
Linear 約8倍 Vite公式ブログ
Peterbe.com(個人SPA) 5倍 個人ブログ
今回の計測 3.6倍 本記事

プロジェクトが大きいほど効果が出る傾向は一貫している。

移行時のハマりポイント

manualChunksのオブジェクト形式が使えない

Vite 7まで普通に使えていたこの書き方が、Vite 8(Rolldown)ではエラーになる。

// ❌ Vite 8ではエラー
rollupOptions: {
  output: {
    manualChunks: {
      react: ["react", "react-dom"],
      antd: ["antd"],
    },
  },
}

Rolldownはオブジェクト形式をサポートしていないため、関数形式に書き換えるか、削除する必要がある。

// ✅ 関数形式ならOK
rollupOptions: {
  output: {
    manualChunks(id) {
      if (id.includes("node_modules/react")) return "react";
      if (id.includes("node_modules/antd")) return "antd";
    },
  },
}

Node.jsのバージョン要件

Vite 8はNode.js 20.19以上、または22.12以上が必要。

まとめ

中規模のOSSプロジェクトで実測して、Vite 8のRolldown移行は本番ビルドの速度改善として確実に効いていることが確認できた。今回は3.6倍だったが、プロジェクトの規模が大きくなるほど効果は大きくなる傾向がある。

移行自体は pnpm add vite@^8.0.0 だけで済むケースも多い。ただ manualChunks のオブジェクト形式が通らないなど、細かい非互換はあるので、まずは手元でビルドを通してみるのが一番確実だと思う。

個人的には、速度よりも「開発と本番で挙動が違う」問題が構造的に解消された点が大きいと思っている。頻繁に遭遇する問題ではなかったが、踏んだときのデバッグが厄介なので、そもそも起きなくなるのは安心感がある。

Vite 8と同時期にVite+(統合ツールチェーン)もAlpha公開されていて、Viteエコシステム全体が大きく動いている。Vite+については別の記事で試しているので、興味があればこちらもどうぞ。

https://zenn.dev/ashunar0/articles/26d33059997e38

Discussion