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
550
0
Share
データとコンポーネントの複雑さを整理整頓する
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
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
RailsConf 2023
tenderlove
30
1.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
290
Designing Powerful Visuals for Engaging Learning
tmiket
1
380
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Designing for Performance
lara
611
70k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
55k
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 ありがとうございました