Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
「業務システムSPAのフロントエンド技術選定」 の振り返り 2024/02/02 Netadashi Meetup #12 Taku Hiramatsu
Slide 2
Slide 2 text
自己紹介 ● Taku Hiramatsu(ひらたく) ● X: @hirataq__ ○ (最近アカウント作り直しました) ● 関西在住、娘👭 ● 趣味はサッカー、山登り、コードを書くこと ● ソフトウェアエンジニア ● 経歴 ○ 新卒で株式会社フリークアウト ○ いくつかの新規事業に従事 ○ 2020/6〜 株式会社カケハシ
Slide 3
Slide 3 text
今日話すこと 2023年に業務システムの立ち上げに携わり、フロントエンドをSPAで 構築しました。その技術選定についてお話しできればと思います。 Next.jsやRemixの選択肢も検討しましたが、僕たちはフレームワーク を利用せずビルドツールであるViteを採用することに決めました。 この技術選定がどうだったのか、その他どのような技術選定を行った かお話しできればと思います。
Slide 4
Slide 4 text
今日話すこと 「業務システム SPA のフロントエンド技術選定(2023年版)」 というタイトルで2023年のアドベントカレンダーに書いた記事の詳細 版です。 https://kakehashi-dev.hatenablog.com/entry/2023/12/13/091000
Slide 5
Slide 5 text
アジェンダ ● プロジェクトの背景 ● どんな技術選定をしたか ● やってみての振り返り ● さいごに
Slide 6
Slide 6 text
プロジェクトの背景
Slide 7
Slide 7 text
プロジェクトの背景 まず、カケハシの紹介を少しさせてください。
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
プロジェクトの背景 ● 薬局向けの新規プロダクト開発 ○ まだクローズドベータなので詳細は話せません ● 2023年3月にチームが発足、メンバーが揃ったのが4月 ● メンバー ○ PdM ○ EM/SM ○ フルスタックエンジニア(バックエンド中心) ○ フルスタックエンジニア(フロントエンド中心) ○ デザイナ(週2)
Slide 11
Slide 11 text
開発チームについて https://speakerdeck.com/kakehashi/develop-a-new-product-with-bad-practices?slide=7 から抜粋
Slide 12
Slide 12 text
プロジェクトをどう進めたかを もっと知りたい方は、、
Slide 13
Slide 13 text
宣伝 同僚がRSGTで発表しているので、興味ある方はぜひみてみてください😄 https://speakerdeck.com/kakehashi/develop-a-new-product-with-bad-practices
Slide 14
Slide 14 text
プロダクト特性 ● PCでの操作がメイン ● 薬局内での利用を想定しており、比較的安定した環境からの利用 ● ユーザがログインして利用する業務システムSaaS ● ユーザインタラクションが多い ● 認証なしで閲覧できるページはなく、SEOは考慮しなくて良い
Slide 15
Slide 15 text
どんな技術選定をしたか
Slide 16
Slide 16 text
React or Vue or Angular ● 会社としてはAngularやReactの採用実績があり、新しいプロダク トは基本的にReactに統一していた ● 初期メンバー二人ともReact経験者 どんな技術選定をしたか
Slide 17
Slide 17 text
React or Vue or Angular ● 会社としてはAngularやReactの採用実績があり、新しいプロダク トは基本的にReactに統一していた ● 初期メンバー二人ともReact経験者 => すんなりReactに決まった どんな技術選定をしたか
Slide 18
Slide 18 text
フレームワークを使う? ● Reactの公式ドキュメントには2023年はじめくらいにフレーム ワークの利用を推奨する記載が追加された どんな技術選定をしたか https://ja.react.dev/learn/start-a-new-react-project
Slide 19
Slide 19 text
フレームワークを使う? 当時(2023年5月)選択肢として以下が候補に挙がった ● フレームワークを使う ○ Next.js ○ Remix ● フレームワークを使わない ○ Viteなどのビルドツールと組み合わせて使う どんな技術選定をしたか
Slide 20
Slide 20 text
フレームワークを使う? そのときの心境(2023年5月) ● Next.js勢いあっておもしろそう。乗っからないと置いていかれそう ● ちょうどApp Routerが安定版になった。仕事でもさわれたらいいな ● React Server Component(RSC)を見据えたらNext.jsにBetした方が良 いのかな ● Remixもおもしろそう。社内で実績ないし、チャレンジするのもありかも ● 今回のプロダクトはCSRのみで十分だよな ● SSRは必須ではないし、もしやるならインフラどうしよ ● CSRのみなら、Next.jsのStatic Exportもありかも どんな技術選定をしたか
Slide 21
Slide 21 text
フレームワークを使う? 最終的にフレームワークを使わないで、ビルドツールのViteでSPAを構築する ことした。理由は以下 ● 技術的なチャレンジはしたいが、今のPMFしてないプロダクトフェーズで はリスクは抑えたかった(そのときまだ何もない) ● 今回のプロダクトにはSSRは不要。サーバのメンテコストを抑えたい ● Next.js、Remixともにどんどんバージョンが上がっていて、リリースまで に何回か大きな修正が必要になるのでは?という不安 ● 依存少なく小さく始めれば、デファクトが決まったときに移行できるので は どんな技術選定をしたか
Slide 22
Slide 22 text
フレームワークを使う? どんな技術選定をしたか => 使わず。Vite + React の SPA 構成に
Slide 23
Slide 23 text
どんな技術選定をしたか 今だったら、Remix SPA Mode もありますね (まだUnstableですが) 余談
Slide 24
Slide 24 text
「Vite + React の SPA構成」というベースが決まったところまで紹介できた ので、そのほかの技術や方針を紹介します。 (バックエンドも紹介したいですが、今日は「フロントエンド関連技術」とい うテーマのなので、フロントエンド中心に)
Slide 25
Slide 25 text
Vite + React の SPA構成 どんな技術選定をしたか ● ルーティング ○ React Router ● APIクライアント ○ urql ● フォーム ○ React Hook Form ○ + zod ● UIコンポーネント ○ Mantine ● モノレポ ○ turborepo ○ pnpm workspace ● モニタリング ○ Datadog ● エラートラッキング ○ Sentry ● ホスティング ○ Amplify Hosting
Slide 26
Slide 26 text
Vite + React の SPA構成 どんな技術選定をしたか ● コンポーネントカタログ ○ Storybook ● VRT(Visual Regression Test) ○ reg-suit ○ storycap ○ Storybook play function ● テストランナー ○ Vitest ● コンポーネントテスト ○ React Testing Library ● ブラウザテスト ○ Playwright
Slide 27
Slide 27 text
やってみての振り返り
Slide 28
Slide 28 text
7選
Slide 29
Slide 29 text
やってみての振り返り(1) ● 👍 手持ちの知識や社内の知見、既存エコシステムの恩恵を存分に 受けることができた ○ それにより生まれた余裕を、プロダクトの品質向上や新たな チャレンジに使うことができた ■ 例えば、日本語コンポーネント、モノレポによるモジュー ル分割など ○ また、テストの基盤もしっかり整えることができた ○ Viteの起動やホットリロードの開発者体験には満足してる
Slide 30
Slide 30 text
やってみての振り返り(2) ● 👍 リリース後、スピードを落とさず機能追加できているので、今 のところ良かったと思っている ○ まだPMFしていないが、ひとつひとつ仮説検証のための機能追 加できている ○ 今後、機能が増えたときにどうなるか楽しみ
Slide 31
Slide 31 text
やってみての振り返り(3) ● 👍 新しいメンバー(フロントエンドが専門でないメンバー)も参 画後すぐにフロントエンド開発を進められている ○ Reactだけキャッチアップすればコードを書き始められた ○ 褒めてもらえた😍(嬉しかった)
Slide 32
Slide 32 text
やってみての振り返り(4) ● 👍 GraphQLエコシステムはやっぱり強力で開発体験が良い ○ 🤔 RSCが普及した世界線で、GraphQLがどうなっていくんだ ろうという疑問はまだ解消されていないが) ● スキーマ駆動進めたが、仕様の議論ができるので良い GraphQLスキーマからの自動生成 - フロントエンド開発体験の向上 - Speaker Deck (参考)tsukiji.graphql #2 で話した資料↓
Slide 33
Slide 33 text
やってみての振り返り(5) ● 👍 JSはブラウザでの動作のみを考慮すれば良いため、認知負荷は 下げられた ○ パフォーマンスとのトレードオフだと思うが、いまの僕たちは これで良かったと思っている
Slide 34
Slide 34 text
やってみての振り返り(6) ● SPAだとボトルネックになりがちな初期にロードするJSは400kb台 (gzip)に抑えられている ○ 今後機能追加をしていくと増えていくので、対策は必要 ■ => この辺りはフレームワークだと乗っかれるのが良いで すね ○ いまはバンドルサイズを継続的に可視化できていないので、仕 組みを導入予定
Slide 35
Slide 35 text
やってみての振り返り(7) ● 💪 フロントエンド技術の進化のキャッチアップが大変 ○ フロントエンドを牽引しているNext.js, Remixのアップデート を追えていないという焦り [個人的な今年の目標] ● 個人開発、または、副業でNext.js, Remixを触り倒す
Slide 36
Slide 36 text
さいごに
Slide 37
Slide 37 text
さいごに プロダクト特性にあった技術選定をすることは大切。 とはいえ、Next.jsやRemixなどフロントエンドの進化をキャッチアッ プして、備えておけるといいのかな。 みんなでフロントエンド技術の発展を楽しんでいきましょう👍
Slide 38
Slide 38 text
Q&A