Open3

ReactのバージョンアップとWebpakerから剥がす方法を考える

iwamasaiwamasa

経緯

現職でRuby on Railsを使用し、ERBと同居する形でWebpacker経由でReactを使用している。
Webpackerの開発は終了しているため、Webpackerから剥がす方法を調査・検討する。

また、Reactのバージョンが古い(16.8.6)ので、バージョンアップの調査も行う。

解決できること

  • 開発が終了しているWebpackerから脱却ができる
  • フロントとバックエンドの開発を分離することができる
    • フロントとバックエンドで独立して開発が可能になる
    • フロントだけ開発環境を起動し、staging環境に接続して開発することも可能になる
      • ローカルが軽くなる&環境構築が楽になる&バックエンドのテストから分離できる
  • 有耶無耶になっていたフロント開発のルールを定義できる
  • いにしえのReactを最新化できる
  • 開発チーム全体のフロントエンド知識の底上げ
iwamasaiwamasa

Webpackerから剥がす?

Rails7からはWebpackerが廃止されている
https://qiita.com/ryohashimoto/items/f5382478c78f296d8291#javascriptフロントエンドの刷新esm-importmap--hotwire--stimulus--turbo

こちらの新機能に乗せる or フロントは独立して管理すべきか?
今後、フロントとバックエンドを分業した時にできれば分けておいた方が良い気がする

もう少し深掘り
https://zenn.dev/kenzan100/articles/0f9b100655a4bf

この着眼点をみて、DHH・Railsが求めるものは 「Nodeに依存しないフルスタック開発」 であることがわかります。「Node moduleはどうするの?」ということに関しても、彼は「https://unpkg.com/ 等のCDNを使えば良いでしょう」と言っています。

既存のnode modulesがあるし、ライブラリを使いたい時に毎度CDNを使う必要があるのでやはりRailsからは完全に独立して管理するようにしたい。

iwamasaiwamasa

Webpackerからの移行先はどうするか

Webpaker 移行 などで検索するとjsbuilding-railsがヒットするが、これだとRailsに乗せることになるので今回は完全に分離したい。

分離 = フロントだけ単体で動かせる 状態。

スタディストさんの分離例
https://studist.tech/new-dx-for-frontend-f8acdfcc0d16

Docker を使わずとも、ホストマシン(≒Mac) だけで立ち上がる
Rails を含むバックエンドサーバを立ち上げる必要がない
任意のリモート環境の API を利用できる

やはり、この辺の構成を実現できるから完全分離にしたい。

移行先の候補

  • Webpack: Webpackerからシンプルに剥がすだけなら難易度は高く無さそう
  • Vite: 高速化できる&最近導入事例が多い
  • Turbopack: Webpack, Viteよりも早いけどまず使えるのか?

同じように検討されている方のスクラップを発見
https://zenn.dev/ishiyama/scraps/a8abf192857f9f