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
120
データとコンポーネントの複雑さを整理整頓する
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
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Become a Pro
speakerdeck
PRO
29
5.6k
Designing Experiences People Love
moore
142
24k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
For a Future-Friendly Web
brad_frost
180
10k
Music & Morning Musume
bryan
46
6.9k
Build your cross-platform service in a week with App Engine
jlugia
233
18k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
A Modern Web Designer's Workflow
chriscoyier
697
190k
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 ありがとうございました