Bundle of Joy
Babelの作者がメンテナンスに疲れて離れたとき、フロントエンドの脆さを見た気がした。
ES6以降の構文をES5に変換する。ブラウザの対応がばらばらだった時代に、書きたい構文で書いてBabelに変換させる。フロントエンドのインフラそのものだった。作者のSebastian McKenzieは重圧に疲弊し、"I used to be very emotionally invested in Babel, now I don't really care" と言い残して去った。後にRomeを作り、そのRomeもBiomeとして生まれ変わっている。
あの時代のフロントエンドを支えた功績は計り知れない。ただ、ひとりの人間が背負い続けるには重すぎた。
フロントエンドのビルドツールの変遷は速い。
最初はGruntだった。タスクランナーだ。ファイルの結合、minify、コンパイル。設定ファイルにタスクを並べて順番に実行する。Makefileの親戚のようなものだった。Gulpが出てきて、ストリームベースで速くなった。パイプで繋いで流す。コードで書けるぶん、Gruntの設定ファイル地獄から抜けた。
Browserifyがモジュールバンドラの先駆けだった。Node.jsのrequireをブラウザで使えるようにする。CommonJSのモジュールを1つのファイルにまとめる。シンプルだが、それだけで革命的だった。ブラウザにモジュールシステムがなかった時代の話だ。
Webpackが王者になった。コード分割、ツリーシェイキング、ホットモジュールリプレースメント。なんでもできる。なんでもできるが、webpack.config.jsが魔境になった。ローダーとプラグインの設定が肥大化し、なぜ動いているのかわからないまま動いている。触ると壊れる。
Viteが風向きを変えた。開発時はesbuildでトランスパイルし、ESモジュールをそのままブラウザに渡す。バンドルしない。だから速い。本番ビルドはRollupで束ねる。Webpackの設定地獄を知っている人間にとって、vite.config.tsの短さは衝撃だった。
次はなにか。TurbopackはWebpackの後継としてRustで書かれている。RspackもRust製のWebpack互換だ。ViteもRollupからRolldownへの移行を進めている。Rustで書き直す流れは止まらない。ビルドツールの世代交代は3年周期だ。
再来年にはたぶん別のものを使っている。