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
Reactを使ったWebフロントエンドに_アーキテクチャを導入する.pptx.pdf
Search
taikishiino
November 30, 2019
Technology
0
130
Reactを使ったWebフロントエンドに_アーキテクチャを導入する.pptx.pdf
taikishiino
November 30, 2019
Tweet
Share
More Decks by taikishiino
See All by taikishiino
React / TypeScript_の_コード品質について考えた.pdf
taikishiino
0
72
Rails / GraphQLでAPIサーバーを開発して感じた使い勝手.pdf
taikishiino
0
110
webにおけるサイトの表示速度と検索順位の研究.pdf
taikishiino
0
49
Other Decks in Technology
See All in Technology
拓展QA日常工作的邊界
line_developers_tw
PRO
0
560
Cloudflare WorkersがPythonに対応したので試してみた
miura55
0
190
AI JIMY - 登壇(インストール編)
hanacchi
0
150
データ分析力を高めるSQL研修サービス『SQL Everyone』
hikarut
1
400
B2C、B2B プロダクトマネジメントの違い(および思考の罠) / B2C, B2B PM and reduction fallacy
ykmc09
5
2.4k
知識と実践を紡ぐGenAI / Connecting Knowledge and experience with GenAI
aki_moon
2
180
汎用ポリシー言語Rego + OPAと認可・検証事例の紹介 / Introduction Rego & OPA for authorization and validation
mizutani
1
160
SLOいつ決めましょう?
abnoumaru
3
770
5分で分かる(かもしれない) Vector engine for OpenSearch Serverless
tsukuboshi
1
420
iThome2024 Wailing Wall of Enterprise Security
notsurprised
0
300
QA経験のないエンジニアリング マネージャーがQAのカジュアル面談に出て 苦労していること・気づいたこと / scrum fest niigata 2024
yoshikiiida
2
670
OPENLOGI Company Profile for engineer
hr01
1
2.2k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
29
4.1k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Gamification - CAS2011
davidbonilla
77
4.6k
The Mythical Team-Month
searls
217
42k
Designing for Performance
lara
601
67k
Statistics for Hackers
jakevdp
790
220k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
The Brand Is Dead. Long Live the Brand.
mthomps
49
30k
Embracing the Ebb and Flow
colly
80
4.2k
Atom: Resistance is Futile
akmur
260
25k
Music & Morning Musume
bryan
41
5.6k
Transcript
Reactを使ったWebフロントエンドに アーキテクチャを導入する created_at: 2019-11-15 updated_at: 2019-11-30
椎野 太喜 (23) > 出身 茨城県出身 > 所属 redish株式会社 新卒エンジニア >
アカウント Twitter: buena926 GitHub: taikishiino 自己紹介
フロントエンドのアーキテクチャ
・ビジネスロジックを実装するクラス ・共通ロジック・ビューを実装するクラス ・状態管理の表現の仕方 フロントエンドのフレームワークがカバー していない箇所のサポート 特にReactはコンポーネント構築の自由度が高いため必要 フロントエンドのアーキテクチャの役割
技術概要 ・React / Redux を用いたSPA ・TypeScript による静的型付け ・API・外部サービスの利用 チーム規模 ・フロントエンド:1〜2名(デザイナー含む)
・バックエンド:1〜2名 実際のプロジェクトの技術概要とチーム規模
・チームでコンポーネント構築ルールがバラバラ ・ビジネスロジックと共通ロジックの混在 ・API仕様変更時にフロント対応範囲が見えない ・意図しないタイミングでの状態更新 プロジェクトへのアーキテクチャ導入前の問題
フロントエンドへのアーキテクチャ導入
目的 ・各コンポーネントの役割の明確化 ・ビジネスロジックのカプセル化 ・コンポーネントの再利用性を高める Component 設計
Atomic Design の概念を取り入れ 4階層にコンポーネントを分離 ※ 本来Atomic Designは5階層 Component 設計
elements の役割 極力ロジックを持たない最小のコンポーネント 再利用可能な単位で parts から切り出します。 Style(css) OK 再利用 OK
Redux(store) 参照 NG Redux(dispatch) 利用 NG
parts の役割 ビジネスロジックを閉じ込める層。 この層が一番不安定なコンポーネントになる 基本的にユニットテストやUIテストこの層が対象 になる Style(css) OK 再利用 OK
Redux(store) 参照 NG Redux(dispatch) 利用 OK
templates の役割 画面単位のワイヤーフレームとなる層 単純なHTML構成のテンプレートとなる Style(css) OK 再利用 NG Redux(store) 参照
NG Redux(dispatch) 利用 NG
screens の役割 実際に表示する画面単位を統合する層 その画面で使うデータの取得と各Partsへの データの受け渡しを行う Style(css) NG 再利用 NG Redux(store)
参照 OK Redux(dispatch) 利用 OK
アーキテクチャ導入での状態管理の Before / After
アーキテクチャ導入前の状態管理 Component Action Reducer State api バックエンド 外部サービス Component Component
アーキテクチャ導入後の状態管理 screen Action Reducer State api バックエンド 外部サービス template parts
element parts element
まとめ ・ファイル数は増えるが、コンポーネントごとの 役割と見通しがよくなった ・バックエンドAPIの変更に対して強くなり、メン テナンス性が高くなった ・開発に対するモチベーションが上がった