Rollupとは何か?JavaScriptモジュールバンドラーを解説
Rollupは、小さくクリーンでtree-shakingされた出力の生成に優れたJavaScriptバンドラーであり、ライブラリで好んで使われ、Viteのプロダクションbuildを支える基盤となっています。
Rollupは、ESモジュールの静的解析を活用することで、使われないコードを削ぎ落とすtree-shakingを広めました。複数のフォーマットで無駄のないbundleを生成するため、ライブラリを公開する際に最適なバンドラーであり、Vite内部のプロダクションバンドラーでもあります。
Rollupとは
Rollupは、ESモジュールを受け取り、それらを単一のファイルまたは少数のファイルにまとめるJavaScript向けのモジュールバンドラーです。複数のフォーマット(ESM、CommonJS、UMD)で出力するため、ライブラリを多くの利用者向けに配布でき、絞り込まれたプラグインAPIを通じて拡張されます。
Tree-shakingとクリーンな出力
ESモジュールは静的に解析可能なため、Rollupは実際に使われているexportを判別して残りを除外でき、より小さなbundleを生成します。また、より重いバンドラーが付加するラッパーのボイラープレートなしに、フラットで読みやすい出力を生成する傾向があります。これは、他者が中身を確認するライブラリを配布する際に重要です。
configの例
ライブラリ向けのconfigは、単一のinputから複数のフォーマットを出力します。
export default {
input: "src/index.js",
output: [
{ file: "dist/lib.cjs", format: "cjs" },
{ file: "dist/lib.mjs", format: "es" }
]
};CI/CDでの役割
CIでは、Rollupは公開前にライブラリの配布用artifactをbuildするか、アプリ向けにViteのプロダクションバンドラーとして動作します。buildステップはリリースpipelineの一部であり、多くの場合npmへのpublishが続きます。node_modulesをcacheし、可能な場合はbuild出力を再利用することで、これらのステップを高速に保てます。
代替ツール
Webpackは複雑なアプリ向けに機能が豊富ですが、より重量級です。esbuildはより高速ですが、ライブラリ公開向けには最適化の度合いが低い出力を生成します。tsupは、シンプルなライブラリbuild向けにesbuildをラップします。Rollupは、ライブラリ配布のように出力品質とtree-shakingが重要な場合に、依然として好まれる選択肢です。
重要なポイント
- Rollupは、複数のフォーマットで小さくクリーンでtree-shakingされたbundleを生成します。
- ライブラリ公開の標準であり、Viteのプロダクションbuildを支えています。
- CIではリリース用のartifactをbuildし、多くの場合npmへの公開直前に実行されます。