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
0
220
データとコンポーネントの複雑さを整理整頓する
Reo Ishiyama
October 15, 2025
Tweet
Share
More Decks by Reo Ishiyama
See All by Reo Ishiyama
React18と2つのUX
reo777
4
1.3k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
We Have a Design System, Now What?
morganepeng
54
7.9k
Context Engineering - Making Every Token Count
addyosmani
9
380
A designer walks into a library…
pauljervisheath
210
24k
Typedesign – Prime Four
hannesfritz
42
2.9k
The Language of Interfaces
destraynor
162
25k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Done Done
chrislema
186
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Code Review Best Practice
trishagee
72
19k
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 ありがとうございました