Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データとコンポーネントの複雑さを整理整頓する
Search
Reo Ishiyama
October 15, 2025
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
データとコンポーネントの複雑さを整理整頓する
Reo Ishiyama
October 15, 2025
More Decks by Reo Ishiyama
See All by Reo Ishiyama
React18と2つのUX
reo777
4
1.4k
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Six Lessons from altMBA
skipperchong
29
4.3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Code Reviewing Like a Champion
maltzj
528
40k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
170
Building an army of robots
kneath
306
46k
Side Projects
sachag
455
43k
Transcript
© DMM © DMM CONFIDENTIAL データとコンポーネントの複雑 さを整理整頓する 石山怜生 2025.10.15
© DMM 自己紹介 2 • 2024.3月入社 • 大阪出身 • 世界中どこに行っても関西弁は抜けない自信あり
• わんこ大好き 石山 怜生
© DMM 管理画面のリプレイス
© DMM 4 管理画面のリプレイス • モダン化( PHP → Next.js) •
運用コストの削減 ◦ 発行したクーポンの編集ができない等
© DMM 5 お話しすること • クーポンの複雑さ • コンポーネント設計について • データ変換設計について
© DMM 6 お話しすること • クーポンの複雑さ • コンポーネント設計について • データ変換設計について
© DMM クーポンって実は複雑 ...
© DMM 8 クーポンは複雑
© DMM 9 クーポンは複雑 • ログイン状態 • 獲得状態 • 値引・割引率表示
• 利用回数 • 先着ご利用回数 • 公開/獲得期限 • etc…
© DMM 10 クーポンは複雑 • プレミアム会員限定クーポン ◦ 詳細ボタンの条件だけで仕様書 1ページ ◦
「DMMプレミアム会員限定」ラベル表示
© DMM 11 クーポンは複雑 • 公開期間 • 利用期間 • 獲得/未獲得
• 先着利用上限数 • 1ユーザーあたりの利用可能回数 • 獲得してからX日間だけ利用可能 • プレミアム会員限定 • etc…
© DMM 複雑な仕様を コードにそのまま入れたくない
© DMM コンポーネント設計 データ設計で回避
© DMM 14 お話しすること • クーポンの複雑さ • コンポーネント設計について • データ変換設計について
© DMM Presentation/Container パターン
© DMM 16 Presentation/Container • 責務の分離を目的とする ◦ React初期からある設計パターン • Hooks登場後も「責務分離」の考え方は今なお有効
© DMM 17 Presentation Component • UIの構築が責務 • ドメイン知識に依存しないコンポーネントを組み 合わせて構築
• Container Componentから受け取ったPropsを 元にUIを構築 • コンポーネントに対するイベントハンドラーを設定
© DMM 18 Container Component • 外部APIやGlobal Stateからのデータ取得 • データ加工やコンポーネントの出し分け
• アプリケーションのビジネスロジックを実装する • Presentation Componentへpropsとして渡す ◦ UI構築に必要な値 ◦ ユーザー操作を処理するためのコールバック関 数
© DMM 19 Presentation/Containerパターン
© DMM 20 お話しすること • クーポンの複雑さ • コンポーネント設計について • データ変換設計について
© DMM Domain ObjectとModel
© DMM Domain Object
© DMM 23 Domain Objectとは • フロントエンドのためのデータ構造
© DMM 24 Domain Objectとは • アプリケーション内部で扱うために正規化された データの形 • APIや外部システムの都合は知らない
© DMM Model
© DMM 26 Modelとは • ロジックを 1箇所に集約
© DMM 27 Modelとは • Domain Object の生成・変換 • APIや外部システムとの変換処理
• 要件に基づいた、共通化できない機能特有の処理
© DMM ModelやDomain Objectがない時
© DMM 29 ModelやDomain Objectがないとき
© DMM 30 ModelやDomain Objectがない時
© DMM ModelやDomain Objectがある時
© DMM 32 Model • createFromResponse ◦ APIからDomainObjectへの変換 • createFromFormValues
◦ フォームの値(UI)からDomainObjectへの変換 • convertToRequestBody ◦ DomainObjectからリクエストへの変換 • convertToFormValues ◦ DomainObjectからフォームの値へ変換
© DMM 33 ModelやDomain Objectがあるとき • 条件分岐や複雑な処理をModelに閉 じられる • テストもメソッドごとに行える
• コンポーネントからはgetterを呼ぶだ けで、値にアクセスできる
© DMM 34 ModelやDomain Objectがある時 Before After
© DMM 35 ModelやDomain Objectがある時
© DMM 36 データフロー
© DMM おすすめクーポン
© DMM 38 大人の事情
© DMM ありがとうございました