Closed16

Vite にたどり着くまで(Webpack 以降のモジュールバンドラー振り返り)

ishiyamaishiyama

初めて spa フレームワークを導入したとき、webpack の設定にとても苦労した記憶がある。
だが、そんな webpack の地位を脅かす次世代のビルドツールが Vite(らしい)
はっきり言って、ビルド周りは情報収集サボっていたので、この機会に知識をアップデートしたい。

ishiyamaishiyama

Vite(フランス語で「素早い」という意味の単語。ヴィートと発音)

Vite を調べる前に見ぬふりをしてきたここあたりは押さえておいた方が良さそう。

  • Parcel
  • Rollup
  • esbuild
ishiyamaishiyama

Parcel
https://ja.parceljs.org/

Webpack は設定の記述に学習コストがかかるが、Parcel はそれが不要。
プロジェクトの規模感が見えていて、手軽にバンドルしたいなら Parcel を選択しても良さそう。
逆に細かい制御を入れたい場合は選択しないほうが良い。

ishiyamaishiyama

Rollup
https://rollupjs.org/

Webpack は CommonJS(require/module.exports) をベースにバンドルを行うが Rollup は ES Modules(import/export) の仕組みを活かしてバンドルを行う。
ES Modules のほうがツリーシェイキングがやりやすくバンドル効率が高いらしい。

また、多くの記事で「アプリケーションには Webpack」「ライブラリには Rollup」を選択することを勧めている。
これは以下の理由が大きいと思われる。

全てのコードを同じ場所に置いて、一括で評価を行います。そのため、コードが簡潔でシンプルになり、起動速度が向上します。
一方で短所もあります。コード分割は厄介な問題を引き起こす可能性があり、Rollupの記述時にはサポートされません。

https://postd.cc/webpack-and-rollup-the-same-but-different/

現在はコード分割にも対応しているようで、アプリケーションでも高い効果を発揮するかもしれない。
(※ 有識者コメント求む)

React.js 公式 にも Rollup も Webpack と同じ記述でコード分割ができると書かれている。

const OtherComponent = React.lazy(() => import('./OtherComponent'));
ishiyamaishiyama

esbuild
https://esbuild.github.io/

Webpack よりも10倍~100倍高速らしい。

ほとんどのビルドツールは js で書かれているが、esbuild は go で書かれているので速い。
ネイティブコードに変換したり、並列処理でゴリゴリに処理を回してるらしい。

DXが向上したなど、ポジティブな内容の記事が多く、期待値の高さが窺える。
まだメジャーバージョンはリリースされておらず、production ビルドとして使用するには少し不安が残る。

ishiyamaishiyama

Percel、Rollup、esbuild の良いとこどりしたツールという印象。
公式は以下(日本語訳があるのが嬉しい)
https://ja.vitejs.dev/
作者は Evan You さんなので Vue.js とは相性が良さそう。
会社の Vue で作ってるプロジェクトを 3系にアップデートするとき提案してみようかな…

ishiyamaishiyama

React.js と Vite
create-react-app で作成した雛形に手を入れることで問題なく使用できそうだ。
開発環境の立ち上げが爆速で開発体験が上がったという記事をよく見かけた。

https://buildersbox.corp-sansan.com/entry/2022/03/24/110000

ishiyamaishiyama

Vue.js と Vite

Vite は Vue に対して最高のサポートをします。

とのこと。
Vue.js と製作者も一緒だしシナジーも効きそう。
https://ja.vitejs.dev/guide/features.html#vue

React.js と同様に cli から雛形が作成できる。

npm create vite@latest

または

npm create vite@latest my-vue-app -- --template vue
ishiyamaishiyama

コミュニティテンプレート

cli で作成される雛形はフレームワークの基礎的な部分しか含まれておらず、Vite をテストしたかったり、スモールスタートしたい場合は適切だが、最初から機能が盛り込まれたテンプレートも下記のようなサイトで管理されており、degit などでスキャフォールディングすることができる。

https://github.com/vitejs/awesome-vite#templates

ishiyamaishiyama

今回発表されたTurbopackは、代表的なバンドルツールの1つであるWebpackの開発者Tobias Koppers氏らがVercelに参加して開発したものです。同社はWebpackの後継がTurbopackであると説明しています。

大規模なアプリケーションでは、TurbopackはViteよりも10倍速く、Webpackの700倍も高速です。

https://www.publickey1.jp/blog/22/webpackturbopackrustwebpack700nextjs_conf_2022.html

Rust製の次世代バンドルツール…本命間ある、、

ishiyamaishiyama

遅れてきた主人公の感じある「Turbopack」の登場でバンドルツール市場はさらにカオスな状態に。
特段こだわりがなければwebアプリに関してはwebpackで静観し、NEXT王道が見えてきたらそれに乗り換える感じが良さそう。

ishiyamaishiyama

Rolldown

ネイティブレベルのパフォーマンス、パース / シリアライズのオーバーヘッドを回避する組み込みのトランスフォーム、Rollup との互換性を持つプラグインインターフェース、大規模アプリケーションに適した高度なビルド出力制御を提供する単一のバンドラを目指しています。

https://zenn.dev/kazukix/articles/rolldown-js-bundler

このスクラップは2022/11/17にクローズされました