Skip to content
Latchkey

tsup vs Rollup: TypeScript ライブラリのバンドル

esbuild を用いた、高速でほぼゼロ設定の TypeScript ライブラリ build が欲しいなら tsup を選び、公開するパッケージの出力、プラグイン、tree-shaking を精密に制御したいなら Rollup を選びましょう。

tsup と Rollup はどちらも TypeScript/JavaScript ライブラリをバンドルしますが、抽象化のレベルが異なります。tsup は esbuild を包む薄く意見の強いラッパー (.d.ts 生成には rollup ベース) で、最小限の設定で ESM/CJS バンドルを生成します。Rollup はより低レベルで高度に設定可能なバンドラーで、クリーンな出力と強力な tree-shaking で知られ、ライブラリの公開に広く使われています。

tsupRollup
エンジンesbuild (+ 型には rollup)Rollup コア
設定最小限 (tsup.config.ts)明示的 (rollup.config.js + プラグイン)
速度非常に高速 (esbuild)高速、esbuild より遅い
出力フォーマットESM、CJS、IIFEESM、CJS、UMD、IIFE など
型宣言組み込み (--dts)プラグイン経由 (例: rollup-plugin-dts)
制御意見が強いきめ細かい

それぞれが本当に優れている点

tsup は速度と使い勝手で優れます。1 つのコマンドで ESM/CJS のデュアルに加えて型宣言を生成し、ほぼ設定なしでほとんどの npm ライブラリをカバーします。Rollup は、カスタムの出力命名、高度な code-splitting、特定のプラグイン挙動、最大限の tree-shaking 品質など、正確な制御が必要で、設定とプラグインチェーンを維持する意思がある場合に優れます。

CI では

tsup は runner での build ステップを短く高速に保ち、分あたりのコストを下げます。Rollup の build も高速ですが設定が重いため、node_modules と build 出力をキャッシュして CI が変更のないパッケージを再構築しないようにしましょう。ライブラリでは、esbuild は型チェックを行わないため、CI でバンドルと並行して型チェック (tsc --noEmit) を実行しましょう。

正直な注意点

tsup は esbuild を使っており、これは非常に高速ですが型チェックを行わず、エッジケースの変換の一部のみをサポートするため、型は別途扱います。Rollup はより多くの制御を提供しますが、その代償としてセットアップが増え build が遅くなります。tsup 自体が内部で esbuild と Rollup に依存している点に注意してください。つまり、選択は実際にはどれだけの制御が欲しいかによります。

結論

ESM/CJS に型を加えた一般的なケースをカバーする、高速で設定の少ないライブラリ build には tsup を使いましょう。出力の制御、高度なプラグイン、tree-shaking の品質が追加設定に見合う場合は Rollup を使いましょう。

関連ガイド