mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

React系のライブラリにおいて、ts/tsxをトランスパイラーとして、何が使用されているのか調査してみた

はじめに

「Reactを使っている場合はjsxをトランスフォームするためにbabelを使用するのはわかるが、React + TypeScriptの組み合わせを使っている場合、tscでトランスパイルすれば、tsxのトランスフォームもtscがしくてれて、babel使わなくていいんじゃないの?」と知人から聞かれて、たしかにそうだなーと思いつつ、プロダクトでは babel や最近は esbuildswc を使っていることが多くて、tsc を使うことは少ない気がする(というか見たことない)と思ったので調べてみました。

まずReactの環境をどう構築するのか問題

次期公式ドキュメントになるであろう React Docs beta の中では、次の方法が紹介されています。

  • Create React App
  • Vite
  • parcel
  • snowpack
  • Next.js
  • Gatsby
  • Razzle

beta.reactjs.org

それぞれどういったトランスパイラーを使用しているか

感想

やはり babel を使用していることがそこそこ多く、 tsc は存在しなかったですね。tsx→jsだけでなく、jsx→jsの変換もしようとすると、 babel を採用するのは納得できるなーといった感じです。

多いですね。一方、最近出てきた esbuildswc はバンドルが可能であったり、トランスパイル自体早いものの、babelのプラグインが必要だったライブラリは移行しづらく、 swc のメンテナーをvercelが採用したのも、このbabel依存を剥がすためにはそのくらい本気で取り組まないと進まないんだなーと感じました。

今後、 esbuildswc 、あと、今回は出てきていませんが all-in-oneな rome のどれがディファクトスタンダードになるか、見守っていきたいと思います