Vue2.xで開発していた人がReact始めた感想:環境構築

事情があって1本格的にReactをやることになった。今まではVue2.xで開発していた。 慣れてしまう前に印象を書き残しておくことにする。

前提

要件的にSPAで作りたい。

  • 初期ローディング後は高速に操作させたい
  • ページ遷移のたびに最新のデータを取得してレンダリングしたい
  • ページ遷移中のローディングも細かく制御したい
  • ページ遷移・データ取得(更新)多め
  • サーバーに負荷かけたくない
  • SEOいらない

社内にフロントエンド領域で「強い」人はあまりいない。ビルド設定とかできるのは数人程度。 ライブラリ系はメンテナンスの手軽さを優先し、あまり複雑にしたくない。

アプリケーションコードは品質が求められる性質がある。型・Linter・各種テストで守っておきたい。

Vue.js

  • バージョン2.6.x
  • データ管理:基本はdata、ページまたぐ場合はVuex
  • ルーティング:Vue Router
  • TypeScript:あり。vue-property-decorator利用

React.js

  • バージョン18.x
  • データ管理:(今のところ)useState()で完結
  • ルーティング:React Router
  • TypeScript:あり。.tsx形式でコンポーネント作成

環境構築

Vue

Vue CLIで完結。初期セットアップでテスト・Lintツールもついてくる。TypeScriptサポートもある。参加時点でデコレーターが入っていたため使う機会がなかったが…。バージョン3でも公式でサポートされている模様。

React.js

始めた当時はドキュメントでCreate React App(CRA)がスターターキットとして推奨されていたため、CRAを使った。

ただ、最新のドキュメントを確認するとNext.jsやRemixが推奨されている。Next.jsはSSR用というイメージがあり、SPAならReact + React Routerの方が適切なのかなと思った。

Storybookと連動させるならCRAかNext.jsを使っておくと楽な印象(アップグレード用ドキュメント)。

Linter系

これも双方公式で提供されているため、素直に追加すれば良い。

所感など

CLIを使わないときに自分で考えなければいけない点も含め、特段違いはない印象。ただしTypeScript導入はReact.jsの方が簡単な印象を受けた。 Vueプロジェクトでデコレーターを使っていたからかもしれない。

tsx形式でファイルを作ればTypeScript利用として認識されるので、手間が省ける感はある。

疑問点

Vue / React共にCLIツールで作ってしまうとWebpackを使ってbundleすることになる。次使うなら何がいいんだろう?というのは思う。Viteは速いけど、各ライブラリ更新の手軽さがなくなっちゃうし…。みたいな感じがある。

専門チーム / 他の人もメンテできそうなら速さ重視でいいと思うが、そうでもないならメンテしやすさをとった方がいいかなと思う。CRAがWebpackなんだよな…みたいなことも考える。う〜ん。という感じ。

CARのWebpackが別のものになればいいんだけどな。みんなどうしてるんだろう?


  1. 2023年度末にEOLになるので事情もへったくれもないが…。