Slide 1

Slide 1 text

TanStack Router CyberAgent( AIShift ) yasui taisei SPA開発の選択肢になるか (+TanStack Query)

Slide 2

Slide 2 text

ytaisei 安井大晟 l 24卒フロントエンド l CyberAgent入社予定 l 株式会社AI Shift l 新規開発で奮闘中

Slide 3

Slide 3 text

01 TanStack Query Suspense TanStack Router とは 02 03 強みを活かすための ディレクトリ設計

Slide 4

Slide 4 text

“Next.jsのApp Routerや RemixのようにFile-Basedな ルーティングはしたいが、 フレームワークの採用は too muchに感じる...” (特にtoB、SaaS形態の事業では)

Slide 5

Slide 5 text

Reactの技術選定において、 ルーティングとデータ取得は特に重要!!!

Slide 6

Slide 6 text

TanStack RouterとTanStack Queryは SPA開発の有力候補になりうる! Reactの技術選定において、 ルーティングとデータ取得は特に重要!!!

Slide 7

Slide 7 text

TanStack Router とは 01

Slide 8

Slide 8 text

TanStack Router is now v1

Slide 9

Slide 9 text

TanStack Router is now v1 l Fully Type Safe l Built-in Loader Caching l URL State Management

Slide 10

Slide 10 text

Fully Type Safe

Slide 11

Slide 11 text

メリット① 型安全なルーティングで DX(開発体験)が向上

Slide 12

Slide 12 text

File-Based Routing

Slide 13

Slide 13 text

File-Based Routing • $token(ex. $postId) ⇨ URL pathnameとして使用 • _ prefix ⇨ レイアウトルートとして使用 • _ suffix ⇨親ルートからのネストを回避

Slide 14

Slide 14 text

File-Based Routing

Slide 15

Slide 15 text

File-Based Routing 各ルートごとで - component ⇨ successの場合, - errorComponent ⇨ errorがthrowされた場合, - pendingComponent ⇨ Promiseが返却された場合 を設定することができる

Slide 16

Slide 16 text

メリット② File-Basedなアプローチで コードによるルーティング の実装が不要

Slide 17

Slide 17 text

Data Loading(& Caching)

Slide 18

Slide 18 text

Data Loading(& Caching) • Dependency-based SWR Caching ⇨ルートのパス名 + loaderDeps • staleTime + gcTimeでキャッシュ制御

Slide 19

Slide 19 text

メリット③ SWR Cachingによる 柔軟なキャッシュ でUXを改善

Slide 20

Slide 20 text

URL State Management Search Paramsの 型定義とValidationが可能

Slide 21

Slide 21 text

URL State Management Json-FirstなSearch Params

Slide 22

Slide 22 text

メリット④ 型安全でJson-Firstな Search Params でState管理

Slide 23

Slide 23 text

Code Splitting posts.tsx posts.lazy.tsx

Slide 24

Slide 24 text

Code Splitting posts.tsx posts.lazy.tsx Critical Routeの対象 Lazy Routeの対象

Slide 25

Slide 25 text

メリット⑤ ルート単位のCode Splitting でバンドルサイズを軽減

Slide 26

Slide 26 text

TanStack Query Suspense 02

Slide 27

Slide 27 text

Supsense Queryを使わないケース

Slide 28

Slide 28 text

Supsense Queryを使わないケース 同一コンポーネント内で success, error, pending 時の処理を実装 当然dataがundefinedになる 可能性もあった

Slide 29

Slide 29 text

Supsense Queryを使うと! error, pending success

Slide 30

Slide 30 text

Supsense Queryを使うと! error, pending success error, pendingの状態を外に切り出せる dataがundefinedな状態を考慮する必要がなくなる

Slide 31

Slide 31 text

TanStack Routerの File-Basedなアプローチと相性がいい!! 先ほどのスライド ⇨

Slide 32

Slide 32 text

強みを活かすための ディレクトリ設計 03

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

特徴① Feature-Basedな ディレクトリ設計ができる

Slide 35

Slide 35 text

• Feature-Basedなディレクトリ構成 • 各ルートにui, api, type, function のファイルを配置

Slide 36

Slide 36 text

特徴② ルートの境界が Suspenseの境界になる

Slide 37

Slide 37 text

例えば右のような画面の場合

Slide 38

Slide 38 text

赤枠・青枠がそれぞれSuspenseの境界になり、 pending or error時の責務が明確になる

Slide 39

Slide 39 text

TanStack Routerのルートの境界が TanStack Queryのerror, pending状態の ハンドリングとしても機能する

Slide 40

Slide 40 text

TanStack RouterのFiled-Basedなルーティングと TanStack QueryのSuspense機能で 1. 型安全で圧倒的なDX(開発体験) 2. パフォーマンスの最適化 3. Feature-BasedでSuspenseを活用した設計 Summary

Slide 41

Slide 41 text

今回の内容に関する記事

Slide 42

Slide 42 text

AI ShiftのZennも よろしくお願いします!

Slide 43

Slide 43 text

Thank you for listening.