Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SOLIDから考える良いコンポーネントの設計原則
Search
Tetsuya Negishi
October 29, 2021
Technology
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SOLIDから考える良いコンポーネントの設計原則
Tetsuya Negishi
October 29, 2021
Transcript
22 slides
© commmune Inc. All rights reserved SOLIDから考える 良いコンポーネントの設計原則 1 #ReactLT
© commmune Inc. All rights reserved 2 自己紹介 • 根岸徹也
• コミューン株式会社 副業:2018/11 ~ 2020/11 正社員:2020/12 ~ • フロントエンド + サーバサイド #ReactLT
© commmune Inc. All rights reserved 3 SOLIDとは #ReactLT
© commmune Inc. All rights reserved 4 SOLIDとは • 変更に強い・理解しやすい・
再利用しやすいコードを作るための設計原則 • オブジェクト指向を想定して提唱されたもの ◦ 考え方のコアの部分は普遍的なもの ◦ Reactのコンポーネントを作るときにも適用できる #ReactLT
© commmune Inc. All rights reserved 5 5つの原則 S:単一責任の原則 (SRP)
O:オープン・クローズドの原則 (OCP) L:リスコフの置換原則 (LSP) I:インターフェイス分離の原則 (ISP) D:依存関係逆転の原則 (DIP) #ReactLT
© commmune Inc. All rights reserved 6 5つの原則 S:単一責任の原則 (SRP)
O:オープン・クローズドの原則 (OCP) L:リスコフの置換原則 (LSP) I:インターフェイス分離の原則 (ISP) D:依存関係逆転の原則 (DIP) #ReactLT
© commmune Inc. All rights reserved 7 単一責任の原則 #ReactLT
© commmune Inc. All rights reserved 8 単一責任の原則 「モジュールを変更する理由はたった1つであるべきである」 #ReactLT
© commmune Inc. All rights reserved 9 単一責任の原則 「モジュールを変更する理由はたった1つであるべきである」 =>
役割を意識してコンポーネントを分ける とコンポーネントの変更理由が1つになりやすい #ReactLT
© commmune Inc. All rights reserved 10 単一責任の原則(ケーススタディ) #ReactLT
© commmune Inc. All rights reserved 11 単一責任の原則(ケーススタディ) • 円形画像のアイコン
-> <CircleImage /> • ユーザ名がボールド体 -> <Text bold /> • ユーザIDがグレーの文字 -> <Text color=“gray” /> • 左に画像アイコン, 右にユーザ情報 を表示 -> <MediaObjectLayout /> #ReactLT
© commmune Inc. All rights reserved 12 単一責任の原則(ケーススタディ) #ReactLT
© commmune Inc. All rights reserved 13 オープン・クローズドの 原則 #ReactLT
© commmune Inc. All rights reserved 14 オープン・クローズドの原則 「既存のコードを変更せず、新たにコードを追加するだけで振る舞い を変更できるようにするべき」
#ReactLT
© commmune Inc. All rights reserved 15 オープン・クローズドの原則 「既存のコードを変更せず、新たにコードを追加するだけで振る舞い を変更できるようにするべき」
=> propsで受け取る値の型をReact.ReactNode にすると既存コードを変更せずに振る舞いを 変更しやすい #ReactLT
© commmune Inc. All rights reserved 16 オープン・クローズドの原則(ケーススタディ) モーダルコンポーネントのpropsを考える #ReactLT
© commmune Inc. All rights reserved 17 オープン・クローズドの原則(ケーススタディ) #ReactLT
© commmune Inc. All rights reserved 18 オープン・クローズドの原則(ケーススタディ) タイトルの先頭にアイコンを入れたい 右下にボタンを入
れたい #ReactLT
© commmune Inc. All rights reserved 19 オープン・クローズドの原則(ケーススタディ) タイトルの先頭にアイコンを入れたい 右下にボタンを入
れたい React.ReactNodeにすると string, numberに加えて `<div>エレメント</div>` を受け取れるようになる #ReactLT
© commmune Inc. All rights reserved 20 オープン・クローズドの原則(ケーススタディ) propsの型を `React.ReactNode`
にするだけで拡張性が 段違いに上がる #ReactLT
© commmune Inc. All rights reserved 21 まとめ • SOLIDとは変更に強く、理解しやすく、再利用しやすいコードを
作るための設計原則 • 単一責任の原則を守るために 役割を意識してコンポーネントを分ける • オープン・クローズドの原則を守るために React.ReactNode型をpropsに活用すべき #ReactLT
© commmune Inc. All rights reserved 22 参考 • Atomic
Design ~堅牢で使いやすいUIを効率良く設計する [技術評論社 (2018/4/25)] ◦ コンポーネント分割のテクニックを学びたい人にオススメ • Clean Architecture 達人に学ぶソフトウェアの構造と設計 [ドワンゴ (2018/8/1)] ◦ SOLIDについて知りたい人向け • 良いコードとは何か - エンジニア新卒研修 スライド公開 (https://note.com/cyberz_cto/n/n26f535d6c575) ◦ SOLIDを守るとなぜ良いコードになるのか背景がよく分かる #ReactLT
More Decks by Tetsuya Negishi
See All by Tetsuya Negishi
React Hooksで美しいコードを書く / Writing beautiful code using React Hooks
tetsuyanegishi
0
210
TypeScriptの型定義が JavaScriptのバグを駆逐する
tetsuyanegishi
3
980
React初学者が知らない コンポーネント分割テクニック
tetsuyanegishi
1
520
AWS Amplifyで作るサーバーレスバックエンド
tetsuyanegishi
3
2.1k
リアルタイムデータベース Cloud Firestore入門
tetsuyanegishi
10
9.1k
ブロックチェーンのマイニングとはなにか
tetsuyanegishi
1
110
スクラム開発の手法と実例
tetsuyanegishi
0
280
Other Decks in Technology
See All in Technology
長い仕事を任せる (Workflows、クラウドセッション、Kiro Web) | 目指せ Kiro マスター 10
inariku
PRO
3
190
会社説明資料_最新版
demaecan
0
32k
Biohub - Cell Tracking During Development 5th place solution
rist
0
150
81天的 AI Agent 軟體開發團隊治理實務分享
regionbbs
0
170
「任されビリティ」で引き受けて「よしなりてぃ」に頼らず任せる / Accept tasks with "makasarebility" and hand them over without relying on "yoshinarily"
pauli
0
530
MCPでネットワーク障害調査を自動化する前に直すべき3つのこと
yama3133
0
170
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
670
Where Should Platform Complexity Live? Lessons from a Cross-Team PR Preview Platform
taiki45
0
110
DevOps Agentにあらゆるセキュリティインシデントのトリアージを任せた件
jirtosterone
1
140
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
220
内製アプリとClaudeスキルのセキュリティチェック、 Backlogの課題で回しています。
ayaka_egaaa
0
180
小さなエージェントから始めてみよう!実践コンテキストエンジニアリング
iwamot
PRO
0
120
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
380
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
GraphQLとの向き合い方2022年版
quramy
50
15k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
470
BBQ
matthewcrist
90
10k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
350
Why Our Code Smells
bkeepers
PRO
340
58k
Site-Speed That Sticks
csswizardry
13
1.6k