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

AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点


Ken Miyao
December 18, 2024

 AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点


Think! Frontend #7 の登壇資料です。

Ken Miyao

December 18, 2024
Tweet

More Decks by Ken Miyao

Other Decks in Programming

Transcript

  1. © DMM.com 自己紹介
 eiganken 
 動画配信開発部 Webコアサポートグループ 
 
 動画サービスのフロントエンド開発をしている


    24卒フロントエンドエンジニア
 アニメ・漫画が趣味
 ポケポケ がマイブーム
 (ポケモンカードスマホゲーム) 
 2
  2. © DMM.com 大規模サービスの開発について
 大規模サービスの
 新規開発
 ➜ 開発人数 (FE以外も込み)
 ➜ 50人以上


    
 ➜ ページ数
 ➜ 約30ページ 
 ✖ クエリパラメータのパターン数
 
 ➜ 現時点でのコンポーネント数
 ➜ 100個以上
 6
  3. © DMM.com Client Side Rendering と Server Side Rendering
 Client

    Side Rendering (CSR)
 ブラウザ上で計算・レンダリング 
 Server Side Rendering (SSR)
 サーバー上で計算・レンダリング 
 9 サーバー負荷を軽減
 SEO対策になる

  4. © DMM.com CSR と SSR の切り分け方
 CSR
 SSR
 UserAgent 


    による判定
 アクセス
 Google Bot
 など
 クローラー
 一般ユーザー
 10
  5. © DMM.com チームでディレクトリ構成を考えるにあたって
 1. CSR・SSRの差分をできるだけなくしたい
 ➜ CSR・SSRさせるコンポーネントをうまく共通化させたい
 
 2. page.tsx

    がデータリクエストを行う
 ➜ コンポーネント単位でリクエストを行わない
 ➜ まとめてリクエストを行うことで通信回数を減らす
 12
  6. © DMM.com Client Component と Server Component
 15 Client Component

    
 
 クライアントでレンダリングされる
 コンポーネント
 Server Component 
 
 サーバーでレンダリングされる
 コンポーネント

  7. © DMM.com 問題点:Client / Server Component の切り分け
 ➜ Server Component

    は Client Component から利用する時は
 気をつける必要がある
 
 ➜ 正しくBot向け(SSR)にレンダリングされない可能性がある
 ➜ SEOに影響がでてしまう可能性がでてくる
 
 ➜ コンポーネントを追加する際に、常にServerかClientかを意識する必要があり、 コストがかかる
 16
  8. © DMM.com apps
 packages
 apps と packages の依存関係について
 ui
 infra


    domain
 utils
 bot
 user
 ➔ apps は packages を利用
 
 
 
 ➔ packages 内でもそれぞれの 依存関係を制定
 
 20
  9. © DMM.com 問題点:hooksによるClient Component化
 ➜ インタラクティブなUIは useState, useEffect を使うため “use

    client” が
 必要になる
 ➜ 適当に “use client” を付けると、コンポーネント内全体が Client Component になっ てしまう 
 
 ➜ Server Component で良い部分も無駄に Client Component になってしまう
 22
  10. © DMM.com まとめ
 ➜ 以下の課題も見えてきたが、 Monorepo化によるディレクトリ
 構成・依存関係の整理により複雑にはならなくなった
 
 ➜ “use

    client” を用いた ClientComponent化や useState, useEffectに関するエ ラーに気を付ける
 ➜ ページでデータ取得をprops の受け渡しが 状態管理やReact Provider を活用 して複雑性を下げる
 上記の問題は改善ができそうなので改善していきたい 💪
 27