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
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
A Tale of Four Properties
chriscoyier
161
23k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Raft: Consensus for Rubyists
vanstee
140
7.2k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Side Projects
sachag
455
43k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
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 ありがとうございました