JS・TS向けビルドツールは結局何を使えばいいのか

目次

    ※ 主にブラウザで動かすためのバンドルについてなので、Nodeなどの環境に関しては言及していない

    RustやGoによるツールの書き換えが流行って久しいが、JS・TS向けビルドツールにおいてはまだ最適解が見つからない、あるいは最適ではないが現状これでいいが確立されてきつつあるので、今一度どういったツールが出ていて今後どうなっていくのか簡単に書き置きした。

    現状

    個人的に考える、現状これ使っておけばいいツール。ほぼViteだが、好みや場面で他も使う。

    完全に新規

    • アプリケーション:Vite, rspack
    • ライブラリ:Vite, tsup

    既存の置き換え

    • webpackを使用している
      • configが膨大:rspack
      • configが薄い:Vite
    • webpack以外:Vite

    ツールごとの所感

    esbuild

    • そのまま使えるのが理想ではあるが…
    • 個人プロジェクト故の懸念
      • evanw 1人・スポンサー受け付けていない → 怖い
      • 間にViteなど1つ挟んでおけば、もし頓挫しかけたとき巻き取られそう

    Vite

    • hmrある。jsもhmrできる
    • esbuildではなくてrollup
      • devとprodの差が
      • rolldownが出てくるのを待てと、vite confでevanが言ってた

    rspack

    • Webpack互換
      • webpack.config.jsを見ながら、他のコンフィグに書き換えがきついプロジェクトに
      • builtin使うの控えればWebpackに帰るのも容易
    • production readyという感じはまだない
      • packageいれるとまあまあ壊れる
      • issue立てればその都度修正されるが持続可能なのか

    tsup

    Turbopack

    • Webpackの後継(を名乗っている)
      • Webpack互換を目指すより、Vercelのやりたいキャッシュゴリゴリ効かせたツールになる
    • Next.js以外で使えるようになってから次第

    Farm(farm-fe)

    • “build tool written in rust, go” でググったら見つけた
    • rspackよりも速いことを謳っている
    • esbuildラッパーではないが、Vite互換
      • esbuildが危うい感じになったときの選択肢にはなりそう

    swc

    • Vite入れられないプロジェクトに入ってる印象
    • トランスパイラではあるが、一応言及したい

    今後

    Vite中心で回っていく

    • esbuild直の敷居は高い
    • Vite以外
      • 薄くesbuild使いたいならtsup
      • Webpack 時代の遺産を使いたいなら rspack
      • esbuildを使いたくないならFarmと思っているが、特にこれで何か運用したことない

    Native ESM 時代 が…

    → 来る

    • バンドルしていない esm でいいなら esbuild で dev prod も1つに
      • 結局hmrがほしいからViteになる気はする
    • CDN Edgeで esm 吐くものを動かす
      • esm.sh のようなもの
      • バンドル時間短くなりそうなので、配信時にesmに変換できるのでは
      • jsあんまり書きたくない層(hotwireとかalpineやってる層)は救われそう

    → まだ来ない

  • Viteやrspackで現状維持してrolldownを待つ
    • rolldown.rs が開けないが…現状どうなってるんだ
  • おわりに

    そもそもJS・TS周りのツール実装にJS以外の言語を使う意義

    • wasm吐き出すならまだしも、バイナリ吐き出すために使う意味
      • JS・TSの遺産を捨てて、パフォーマンスを求める覚悟
      • node の SEA でバイナリ吐かせて配るで良いのでは?
      • 先祖返りするんじゃないかと思っている
    • 書き換えに頓挫しているものもある
      • stcみたくコンパイラレベルになると、Rust書き換えには相当な体力が要る

    いつでも剥がせるようにしておこうね

    この記事を共有する