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
FrontEnd:DDD
Search
Takepepe
June 21, 2017
Programming
3
3.1k
FrontEnd:DDD
Frontend de KANPAI! #01 - これからフロントエンドに求められる力 -
https://frokan.connpass.com/event/57554/
Takepepe
June 21, 2017
Tweet
Share
More Decks by Takepepe
See All by Takepepe
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
910
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
7
1.2k
App Router への移行は「改善」となり得るのか?/ Can migration to App Router be an improvement
takefumiyoshii
8
3.7k
フロントエンドの書くべきだったテスト、書かなくてよかったテスト
takefumiyoshii
40
17k
Webフロントエンドのための実践「テスト」手法 CodeZine Night #1
takefumiyoshii
24
9.4k
Next.js でリアーキテクトした話 / story-of-re-architect-with-nextjs
takefumiyoshii
12
9.1k
より速い WEB を目指す Next.js / nextjs-make-the-web-faster
takefumiyoshii
54
21k
フロントエンドの複雑さに耐えるため実践したこと / readyfor-nextjs-first
takefumiyoshii
25
11k
Redux の利点を振り返る
takefumiyoshii
26
9k
Other Decks in Programming
See All in Programming
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
640
JETLS.jl ─ A New Language Server for Julia
abap34
2
480
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
Cap'n Webについて
yusukebe
0
170
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.6k
20251212 AI 時代的 Legacy Code 營救術 2025 WebConf
mouson
0
250
TestingOsaka6_Ozono
o3
0
280
AgentCoreとHuman in the Loop
har1101
5
170
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
170
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
660
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.4k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
500
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
2
170
The Spectacular Lies of Maps
axbom
PRO
1
440
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
250
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
99
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Fireside Chat
paigeccino
41
3.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
120
Are puppies a ranking factor?
jonoalderson
0
2.6k
Transcript
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD June 21,
2017 Takefumi Yoshii Design Division DeNA Co., Ltd. Frontend de KANPAI! #01
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! 吉井健⽂
@Takepepe ! 広告制作会社 -> DeNA ! WebDesigner -> FrontendEngineer ! Flash -> jQuery -> React ! ⼆児のパパ 2 ⾃⼰紹介
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! サービス事業開発(ヘルスケア)
! Rails / React / Redux / CSS ! ServersideEngineer:〜10⼈ ! FrontendEngineer:〜3⼈ ! Designer:〜2⼈ 3 担当事業について 本⽇の内容は⼤規模で⻑期運⽤を前提としたプロダクトをスコープとしています。 実践しているものもあれば、プロトタイプレベル程度で留めているもあります。
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD 4 ドメイン駆動設計(DDD)
アプリケーションを継続的に改良していくため、 ユビキタス⾔語(チームの共通⾔語)を通じて、反復的に ドメインモデル(ビジネスロジックの核⼼)をグロースさせていく。 【参考⽂献】エリック・エヴァンスのドメイン駆動設計(通称DDD本) 複雑なアプリケーション開発のためのアーキテクチャ。 アプリケーション開発の核⼼はドメインモデリングにあるとされ、 分析モデルと実装モデルが同期している必要性が説かれている。
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD 5 ドメイン駆動設計(DDD)
本⽇のコンテキストは「フロントエンド実装の活動領域」 「jQueryの⼿続き的な実装で乗り切ったレガシーな部分と、 React / Angular / Vue.js などを導⼊した部分が混在している」 という「フロントドメインあるある」を例に、克服すべき課題を挙げ、 DDDの概念を適⽤することで、どう解決するのかを考察する。
Copyright © DeNA Co.,Ltd. All Rights Reserved. 6
Copyright © DeNA Co.,Ltd. All Rights Reserved. 7
Copyright © DeNA Co.,Ltd. All Rights Reserved. 8 SPA の外で⾶び交う
Event … Store に隠蔽された State …
Copyright © DeNA Co.,Ltd. All Rights Reserved. 9 Real と
Virtual で重なり合うモーダル … observe 漏れのウィジェット …
Copyright © DeNA Co.,Ltd. All Rights Reserved. 10 求められる指揮者「ドメインモデル」は フレームワークの外界にある!
Copyright © DeNA Co.,Ltd. All Rights Reserved. 11 DDD:JS
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 先のあるある事例の様な場合、SPA・⾮SPAのルーティング配下問わず、 フレームワークと異なるレイヤーでの状態管理が必須に。
また、SPA配下では状態管理が統合できている構造が必要になる。 SPA外に発⾏するイベント・SPA外から受け付けるイベント これもまた統合できている構造が必要になる。 DDD本の第4章「レイヤードアーキテクチャ」で⽰されている 責務の分離図を⾒てみる。 12 課題の概要
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 13 DDD本
第4章 レイヤードアーキテクチャ
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 14 DDD
: React Redux ⼀例
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS 15 DDD
: jQuery Widget ⼀例
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS ドメインモデルとインフラストラクチャを据えることで、 バラバラだった機能を統合することができる。
! ユーザー情報などは「ドメインモデル」 ! グローバルUIは「ドメインモデル」 ! SPAのみで利⽤する様な jsonAPI等 は「アプリケーションモデル」 管理対象のコンテキストに適切な場所に、ビジネスロジックを据える。 ドメインモデル・アプリケーションモデルにビジネスロジックを 集中させることでフレームワーク依存度が下がり、再利⽤性が⾼まる。 16 ドメイン・アプリケーションの境界線
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:JS モデルの実装は Immutable.js
が良い。 分散されがちな細かい表⽰ロジックやラベルの合成が集中できる。 Reduxでは副作⽤を委譲することができ、ドメインモデルの統合も容易。 インフラストラクチャに位置するサービスは、EventEmitterを継承。 サービス化を進めることで、redux-* が不要になることに気づく。 サービスが複雑になってきたら rx に頼りそう。 17 ReactRedux:モデリング – 状態管理 -
Copyright © DeNA Co.,Ltd. All Rights Reserved. FrontEnd:DDD ! FluxとDDDの統合⽅法
- かとじゅんの技術⽇誌 @かとじゅん ! 複雑なJavaScriptアプリケーションを考えながら作る話 @azu_re ! React使い必⾒! Immutable.jsでReactはもっと良くなる 18 参考⽂献 考察・資料作成にあたり参考にさせていただきました。 感謝いたします!
Copyright © DeNA Co.,Ltd. All Rights Reserved. 19 DDD:CSS
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! イベントが存在しない分、JSよりは分り易い依存関係
! CSS のモデルは UIコンポーネント ! Bootstrap はモデルとして機能していると⾔える ! 利⽤者はプレゼンテーショナルな定義と微調整のみで良い ! モデルを抽象化、エンティティとして利⽤ ! UI/UX の拡張に伴い、モデルをマイグレートさせる ! UI/UX がグロースすることで、モデルが豊かになっていくことが理想 20 CSS設計:ドメインモデル
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! CSS設計に応じて、4つの層のどこに属している定義なのか意識
! プレフィクスで分離されているCSS設計なら認識しやすい ! ドメイン・アプリケーションのコンテキストを分離 ! FLOCSSでいう Components と Projects の分離 担当事業で採⽤しているCSS設計図にDDDの4つの層を当ててみる。 21 CSS設計:モデリング
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 22 担当事業のCSS設計
- 2つの ITCSS × AtomicDesign × BEM -
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 23 担当事業のCSS設計
- ドメイン・アプリケーションの境界と依存関係 -
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS 24 担当事業のCSS設計
– マイグレートの⽅向 -
Copyright © DeNA Co.,Ltd. All Rights Reserved. DDD:CSS ! ⼿続き的な定義は⼀旦プレゼンターに委ねる
! エンティティが表⾯化した時、モデル・ドメインにマイグレート ! BOXモデルが関⼼の分離を侵⾷しない様に注意 ! アプリケーションプレゼンターなら css modules もアリ ! それでも、責務の識別 と e2eテストツール の都合からBEMに落ち着く 【その他設計上の規約】 ! 詳細度とコンテキストの解決は最初から整備しておく ! ⾼階コンポーネントModifier から受ける作⽤を必要に応じて開けておく ! 状態でコンポーネントを管理するのではなく、コンポーネントが状態を管理 ! マルチクラスModifierを採⽤、カプセル化 ! ⽤法容量を守った⾶び道具 25 CSS設計:モデルのマイグレート
Copyright © DeNA Co.,Ltd. All Rights Reserved. 26 【総括】 ビジネス要件に⾒合った
設計を選択しよう
Copyright © DeNA Co.,Ltd. All Rights Reserved. 27 【総括】 過剰な分離は本末転倒
移⾏期を⾒逃さない様に
Copyright © DeNA Co.,Ltd. All Rights Reserved. 28 ご清聴ありがとうございました