事情があって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が別のものになればいいんだけどな。みんなどうしてるんだろう?
- 2023年度末にEOLになるので事情もへったくれもないが…。↩