Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(toBサービス)フロントエンド技術選定の振り返りとこれから

 (toBサービス)フロントエンド技術選定の振り返りとこれから

2024/03/13 リンケージ×enechain toBシステム開発勉強会 ~ PostgreSQLからReactまで の登壇資料です。

Shigenori Ozawa

March 14, 2024
Tweet

Other Decks in Programming

Transcript

  1. 2 自己紹介 • 小沢 滋紀 / あだ名: 雀 / ジャン

    ◦ 「しげのり」と呼びますが、あだ名で呼ばれることが圧倒的に多いの で覚えなくても👌 • 静岡(藤枝)在住 / 妻・娘(4歳、1歳) • シニアエンジニア(活動領域) ◦ Webフロントエンド ◦ バックエンド • ざっくり経歴 ◦ SIer(6.5年) ◦ ビズリーチ(3.5年) ◦ enechain(3年目突入)
  2. 7 新規プロダクトについて だれが使うか • 発電事業者や小売電気事業者 => 一般企業 どんな機能があるか • リスク診断の結果が見れるダッシュボード

    • データ管理 ◦ フォーム入力 ◦ CSVアップロード • その他管理画面 どんな要件があるか • すべてのページにアクセスするには認証が必須 • トランザクション数は多くない(むしろ少ない方かも) • PC作業が前提(モバイルアクセスはない、アクセスすれば見れはするが )
  3. 8 新規プロダクトについて まとめると・・・ • 発電事業者や小売電気事業者向けの業務システム (SaaS) ◦ 社内からのアクセスがメイン ◦ オフライン対応やネットワークが貧弱であることは少なそう

    ◦ 一方で低スペックPCである可能性はある... • メイン作業は、、、 ◦ データ登録 ◦ リスク診断 ◦ 結果閲覧 ◦ → やることは比較的シンプル • 認証必須のためパブリックなページがない ◦ Googleといった自然流入は発生しないので SEOは不要
  4. 12 React or Vue 2022年当時の段階ではVue(2系)で作るメリットは以下の通り • すでにVueで作られたプロダクトがある • Vueができるエンジニアの方が多い •

    既存のコンポーネントが流用できる デメリットとしては、、、 • エコシステムはReactほど成熟していない ◦ 機能がReactの後追いになることが多い • TypeScriptのサポート不足
  5. 13 React or Vue Vueの一定の不満はVue3で解決されますが、、、 • 新規プロダクトをVue2 or Vue3で立ち上げるか •

    Vue2系で作る場合 ◦ プロダクト全体のマイグレーションが必須となる • Vue3系で作る場合 ◦ 既存のコンポーネントを流用すると必ずマイグレーションしなければならな い
  6. 15 React or Vue 結果的に React を採用すること!🎉🎉 • やはりReactのエコシステムやTypeScriptの親和性は魅力的 •

    いずれReactを採用したいという思いはあった ◦ 既存のプロダクトはVueのまま開発 • Reactを採用することで採用の窓口も広がるというメリットもあり
  7. 17 React or Next.js Next.jsは当時からフレームワークとして人気が高く、採用事例が多いので採用した くなる。また、エンジニアとして遅れているのではと心配になることもあるが、、、 Next.jsを採用する懸念もある • SSR /

    ISR / SSGが不要で、CSRのみでよい • Vercelへのロックイン ◦ プロダクトのSLAがVercelのSLAに依存する可能性が高い ◦ VercelのSLAはEnterpriseが必須(SLA=99.99% 2024/03/08現在) また、当時インフラ環境をKubernetesに置き換える対応もあったため、運用まで考 慮してシンプルな構成にしておきたかった
  8. 18 React or Next.js 採用しないという決断のものと、React / Webpack(Create React App) の構成

    に!🎉🎉 • 採用しない判断も大事 • シンプルなのでさくっと始められる ◦ Create React Appで始めるので導入時点である程度充実している • Vercelへのロックインは当時では不安材料 ◦ 料金もかかるし、いざ剥がすとなったときに既存のインフラへ適用が難しく なる • 自社管理するにしてもやはりインフラ周りがネックになる • Next.jsの機能自体は魅力的だが、上記のようなネガティブ要素が大きすぎる
  9. 20 技術選定 立ち上げ時に導入したもの • ルーター ◦ React Router • APIクライアント

    ◦ React Query(GraphQL) • フォーム ◦ React Hook Form + zod • ステート管理 ◦ Recoil • チャート ◦ Recharts • UIコンポーネント ◦ Chakra UI 後から導入したもの • テスト ◦ React Testing Library ◦ Jest => Vitest • コンポーネントカタログ ◦ Storybook • ビジュアルリグレッションテスト ◦ Chromatic • エラートラッキング、監視 ◦ Datadog • ライブラリのバージョンアップ ◦ Renovate • Mockサービス ◦ Mock Service Worker • ビルドツール ◦ Webpack => Vite
  10. 24 振り返り② 立ち上げ時から現在まで、会社・サービス・プロダクトのフェーズが移りゆくなかでの 状況判断が適切であった • 立ち上げ時 ◦ 変更が難しいところを精査・決定する ◦ その他は必要最低限のもの選択・導入する

    ▪ 細部に関しては部分的に挑戦的な採用もあり • 当時だとRecoilとか • 開発・運用時 ◦ 長期的なメリットが得られる自動化など、積極的に取り入れていく ▪ Chromatic、Renovate、Viteなど • 技術は手段であり、目的ではない => 技術選定起因で手戻りが発生していない
  11. 26 振り返り④ まだまだ課題はたくさんある • Core Web Vitals • jsのバンドルサイズ •

    a11y • Docker buildの高速化 • etc … 地道にやっていく💪💪
  12. 32 これからの技術選定 変わりそうなもので、自分たちの開発効率に貢献できるものやメンテされなくなってし まったものの置き換えが中心になりそう • ステート管理 ◦ Recoil => zustand

    / jotai / Redux…🤔 • ルーター ◦ React Router vs TanStack Router…🤔 • APIクライアント ◦ React Query vs Apollo Client vs Rely vs SWR…🤔 Recoilはずっとメンテナー不在のままなので置き換えたほうが良さそう🥹 Under active maintenance? #2288