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
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID pri...
Search
Satoshi Kawashima
January 30, 2019
Programming
6
2.1k
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID principle
書籍を読んでもわりと唐突に始まるSOLIDの原則
いざ自分が説明しようとすると結構難儀する代物だと思いますので、それっぽく説明ができるように調べたみたお話です
Satoshi Kawashima
January 30, 2019
Tweet
Share
More Decks by Satoshi Kawashima
See All by Satoshi Kawashima
モジュラモノリスにおけるトランザクション設計の考え方 / transaction design on modular monolith
nazonohito51
16
9.4k
BASE大規模リアーキテクチャリング / base_rearchitecturing
nazonohito51
17
13k
既存サービスに後からR/W Splittingライブラリを入れる時に考えたこと / r-w-splitting
nazonohito51
1
30k
社内勉強会でOOPとCleanArchitectureとDDDを勉強し始めたというお話
nazonohito51
7
5.3k
CakePHP2でもPhpStormがコード補完してくれるようにした話 / cakephp2-ide-helper
nazonohito51
1
2.5k
PHPStanでCustomRuleを作る / Make PHPStan CustomRule
nazonohito51
6
4.1k
単方向依存を実現する静的解析ライブラリのご紹介 / Analyze PHP Dependencies
nazonohito51
3
6k
ドキュメントルート配下に全てのPHPファイルが置かれていた環境をindex.phpだけにした話 / document root
nazonohito51
2
3.9k
アジャイル開発でのソフトウェア設計
nazonohito51
0
880
Other Decks in Programming
See All in Programming
What's New in Web AI?
christianliebel
PRO
0
130
高単価案件で働くための心構え
nullnull
0
150
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
280
開発生産性が組織文化になるまでの軌跡
tonegawa07
0
180
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
450
Flutterアプリ運用の現場で役立った監視Tips 5選
ostk0069
1
490
Reactive Thinking with Signals and the new Resource API
manfredsteyer
PRO
0
110
flutter_kaigi_2025.pdf
kyoheig3
1
350
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
680
予防に勝る防御なし(2025年版) - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHP Conference Fukuoka 2025
twada
PRO
39
13k
モデル駆動設計をやってみよう Modeling Forum2025ワークショップ/Let’s Try Model-Driven Design
haru860
0
170
モビリティSaaSにおけるデータ利活用の発展
nealle
0
540
Featured
See All Featured
Building Adaptive Systems
keathley
44
2.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Navigating Team Friction
lara
190
15k
Scaling GitHub
holman
463
140k
Statistics for Hackers
jakevdp
799
230k
Making Projects Easy
brettharned
120
6.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
How STYLIGHT went responsive
nonsquared
100
5.9k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Transcript
ౡܛ(.01FQBCP *OD 1)1ษڧձ ʮ40-*%ͷݪଇͬͯԿͰ͔͢ʁʯ ࣭ͬͯʹ͔͑ͨͬͨ
ΞϓϦέʔγϣϯΤϯδχΞ ౡܛ!OB[POPIJUP 4)ࣄۀ෦+6(&.νʔϜ IUUQOB[POPIJUPKVHFNKQ
40-*%ͷݪଇ
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ
%FWFMPQFS3PBENBQ IUUQTHJUIVCDPNLBNSBOBINFETFEFWFMPQFSSPBENBQ
%FWFMPQFS3PBENBQ IUUQTHJUIVCDPNLBNSBOBINFETFEFWFMPQFSSPBENBQ
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ
40-*%ͷݪଇ Single responsibility principle Open/closed principle Liskov substitution principle Interface
segregation principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ ͬͪ͜͡Όͳͯ͘
Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation
principle Dependency inversion principle ୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ 40-*%ͷݪଇ ͬͪ͜ʂʂʂʂ
ͭͷݪଇηοτͷBDSPOZNʢ಄ࣈޠʣͰ͋Δ͜ͱҎ֎ ԿΒͳ͍
ΘΓͱಥʹઆ໌͕࢝·Δ
ಥવฉ͔Εͨ࣌ʹઆ໌͠Α͏ͱ͢Δͱ Ή͍ͣ
ௐͨ ˞ॻ੶ΛಡΊ͔Δൣғࠓճѻ͍·ͤΜ
ྺ࢙తܦҢʹ͍ͭͯ
࡞ͬͨʢൃදͨ͠ʣਓ 3PCFSU$.BSUJO ΞϝϦΧͷιϑτΣΞΤϯδχΞ 6ODMF#PCʢϘϒ͓͡͞ΜʣͷѪশͰΒΕΔ ͍͔ͭ͘ͷιϑτΣΞઃܭݪଇΛ։ൃͨ͠ IUUQTFOXJLJQFEJBPSHXJLJ3PCFSU@$@.BSUJO
IUUQTHSPVQTHPPHMFDPNGPSVN IMFOUPQJDDPNQPCKFDU8*$1%D9".( ॳग़
5FO$PNNBOENFOUT үʂ001ͷ ेռ࡞Ζ͏ͥʂ λΠτϧ༁ɿ
ΫϥεϞδϡʔϧ֦ுʹରͯ͠։͖ɺमਖ਼ʹରͯ͠ด͡ͳ͚ΕͳΒͳ͍ʢ#FSUSBOE.FZFSͷΦʔϓϯΫϩʔζυͷݪଇʣ ੜΫϥεجຊΫϥεͱަՄೳͰͳ͚ΕͳΒͳ͍ʢ-JTLPWͷஔݪଇʣ ৄࡉநʹґଘ͠ͳ͚ΕͳΒͣɺநৄࡉʹґଘͯ͠ͳΒͳ͍ʢґଘੑٯసͷݪଇʣ ࠶ར༻ͷཻͱϦϦʔεͷཻಉ͡ʹ͖͢ ಉ͡ཧ༝Ͱมߋ͞ΕΔΫϥε܈ΛҰͭͷίϯϙʔωϯτʹ·ͱΊΔ͜ͱ
ίϯϙʔωϯτͷϦϦʔε͞ΕΔ୯Ґͱ࠶ར༻ͷ୯Ґಉ͡Ͱ͋Δ͖ ϦϦʔε͞Εͨίϯϙʔωϯτؒͷґଘؔ॥ͯ͠ͳΒͳ͍ ϦϦʔε͞ΕͨίϯϙʔωϯτؒͷґଘͷํɺΑΓ҆ఆͨ͠ํʹ͍ͯͳ͚ΕͳΒͳ͍ ΑΓ҆ఆͨ͠ίϯϙʔωϯτΑΓଟ͘ͷநΫϥεͰߏ͞ΕΔ͖ ՄೳͳݶΓ࣮ূࡁΈͷύλʔϯΛ༻ͯ͠ઃܭ্ͷΛղܾ͢Δ ͭͷύϥμΠϜΛލ͙࣌ඞͣ྆ऀΛ͚ΔΠϯλʔϑΣʔεϨΠϠʔΛΔ͜ͱ طʹ40-*%ͷݪଇͷݪܕ͕͋ͬͨ 3PCFSU$.BSUJOͷߘ ˢʂʁ
ͳΔ΄Ͳɺ40-*%ͷݪଇ 3PCFSU$.BSUJOݸਓͷՌͳΜͩͳʁ
͜ΕΒͷݪଇɺԿेʹٴͿઌਓͷܦݧ ͷੵ͔Βੜ·ΕͨιϑτΣΞֶͷՌ Ͱ͋Δɻ͜ΕΒͷՌҰਓͷ಄͔Βੜ· ΕͨͷͰͳ͍ɻඇৗʹଟ͘ͷιϑτΣ Ξ։ൃऀݚڀऀͷࢥࡧจΛूେͨ͠ ͷͳͷͩɻ ΞδϟΠϧιϑτΣΞ։ൃͷԞٛ ୈ̎෦ɹΞδϟΠϧઃܭ
୯Ұͷݪଇ ։์ดͷݪଇ Ϧείϑͷஔݪଇ ΠϯλʔϑΣʔεͷݪଇ ґଘੑٯసͷݪଇ ൃҊऀɿ#BSCBSB-JTLPW ൃҊऀɿ#FSUSBOE.FZFS ൃҊऀɿ3PCFSU$.BSUJO ൃҊऀɿ3PCFSU$.BSUJO ൃҊऀɿ3PCFSU$.BSUJO
˞5PN%F.BSDPͱ.FJMJS1BHF+POFTͷஶॻʹج͍͍ͮͯΔʁ αϒηοτ࡞͚ͬͨͲɺݸݸҧ͏
ʮݪଇʯͬͯͳΜͩʁ
ݪଇ IUUQTEJDUJPOBSZDBNCSJEHFPSHEJDUJPOBSZFOHMJTIQSJODJQMF zಓಙతͳϧʔϧ·ͨྑ͍ߦಈͷج४z 1SJODJQMF BNPSBMSVMFPSTUBOEBSEPGHPPECFIBWJPVS
ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͍
ಠࣗղऍͰ͕͢ ݪଇͱ ༗ҙͳ۩ͷཪʹ ීวతʹྲྀΕΔ๏ଇੑ Λநग़ͨ͠ͷ ͱɺଊ͓͑ͯΓ·͢
۩" ۩' ۩# ۩$ ۩% ۩& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ ݪଇ
۩" ۩' ۩# ۩$ ۩% ۩& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹैͬͯ࡞ ݪଇ ಉ༷ͷੑ࣭Λ͍࣋ͬͯΔ͜ͱ͕ظͰ͖Δ
ྑ͍ઃܭͷίʔυ" ʢͨͿΜྑ͍ઃܭͷʣ ίʔυ' ˞ྑ͍Ҿ༻ݩ͕ݟ͔ͭΒͳ͔ͬͨͷͰࢲݸਓͷਪଌͱͳΓ·͢ ྑ͍ઃܭͷίʔυ# ྑ͍ઃܭͷίʔυ$ ྑ͍ઃܭͷίʔυ% ྑ͍ઃܭͷίʔυ& ᶃ๏ଇੑΛநग़ ᶄ๏ଇੑʹଇͬͨίʔυͷ࡞
40-*%ͷݪଇ
ʮྑ͍ઃܭʯJT $MFBO"SDIJUFDUVSF ୈ***෦ɹઃܭͷݪଇ มߋʹڧ͍͜ͱ ཧղ͍͢͜͠ͱ ίϯϙʔωϯτͷج൫ͱͯ͠ɺଟ͘ͷιϑτΣΞγεςϜͰར༻Ͱ͖Δ͜ͱ
40-*%ͷݪଇ զʑϓϩάϥϚ͕ ९क͖͢ϧʔϧͳͷ͔ʁ
IUUQTTJUFTHPPHMFDPNTJUFVODMFCPCDPOTVMUJOHMMDHFUUJOHBTPMJETUBSU
40-*%ͷݪଇϧʔϧͰ͋Γ·ͤΜ͠ɺ ๏Ͱ͋Γ·ͤΜ͠ɺશͳਅ࣮Ͱ͋Γ·ͤΜɻ ʮϦϯΰݸͰҩऀΒͣʯͱ͍͏ݵ͕͋Γ·͢ɻ ͜Εྑ͍ݪଇͰ͋Γɺྑ͍ΞυόΠεͰ͕͢ɺ ͦΕ७ਮͳਅ࣮Ͱͳ͘ɺ·ͨϧʔϧͰ͋Γ·ͤΜɻ ʢ˞40-*%ͷݪଇͦ͏͍͏ͷͰ͋Δͱݴ͍͍ͨΜͩͱࢥ͏ʣ 5IF40-*%QSJODJQMFTBSFOPUSVMFT5IFZBSFOPUMBXT5IFZBSFOPUQFSGFDUUSVUIT5IFBSFTUBUFNFOUTPOUIFPSEFSPG l"OBQQMFBEBZLFFQTUIFEPDUPSBXBZz5IJTJTBHPPEQSJODJQMF JUJTHPPEBEWJDF CVUJU`TOPUBQVSFUSVUI
OPSJTJUB SVMF
cubby-holes 5IFQSJODJQMFTBSFNFOUBMDVCCZIPMFT5IFZHJWFBOBNFUPBDPODFQUTPUIBUZPVDBOUBMLBOESFBTPOBCPVUUIBU DPODFQU5IFZQSPWJEFBQMBDFUPIBOHUIFGFFMJOHTXFIBWFBCPVUHPPEBOECBEDPEF ͜ͷݪଇͨͪ৺ͷཧ୨ͳͷͰ͢ɻ ͜ΕΒ֓೦ʹର໊ͯ͠લ͚ͯ͘͠ΕΔͷͰɺ ͋ͳͨ֓೦ʹ͍ͭͯͨ͠Γߟ͑ͨΓ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΓ·͢ɻ ͜ΕΒࢲ͕ͨͪྑ͍ίʔυͱѱ͍ίʔυʹ͍͍ͭͯ࣋ͬͯΔ ײͷཧॴΛఏڙ͠·͢ɻ
5IFTFQSJODJQMFTBSFIFVSJTUJDT5IFZBSFDPNNPOTFOTFTPMVUJPOTUPDPNNPOQSPCMFNT5IFZBSFDPNNPOTFOTF EJTDJQMJOFTUIBUDBOIFMQZPVTUBZPVUPGUSPVCMF#VUMJLFBOZIFVSJTUJD UIFZBSFFNQJSJDBMJOOBUVSF5IFZIBWFCFFO PCTFSWFEUPXPSLJONBOZDBTFTCVUUIFSFJTOPQSPPGUIBUUIFZBMXBZTXPSL OPSBOZQSPPGUIBUUIFZTIPVMEBMXBZT CFGPMMPXFE ͜ΕΒͷݪଇώϡʔϦεςΟοΫͰ͢ɻ ͜ΕΒҰൠతͳʹର͢ΔৗࣝతͳղܾࡦͰ͋Γɺ ͋ͳ͕ͨτϥϒϧ͔Βൈ͚ग़͢ͷΛॿ͚Δ͜ͱ͕Ͱ͖ΔৗࣝతͳڭཆͰ͢ɻ ͔͠͠ɺώϡʔϦεςΟοΫͱಉ͡Α͏ʹɺ
͜ΕΒຊ࣭తʹܦݧଇʹجͮ͘ͷͰ͢ɻ ͜ΕΒͷݪଇ͕ଟ͘ͷ߹ʹػೳ͢Δ͜ͱ͕͔͍ͬͯ·͕͢ɺ ৗʹػೳ͢Δͱ͍͏ূڌɺ ͜ΕΒʹৗʹै͏͖Ͱ͋Δͱ͍͏ূڌ͋Γ·ͤΜɻ
ϧʔϧͱ͍͏ΑΓɺ ࢦ ͬͯ දݱͯ͠͠·ͬͨํ͕ޡղগͳͦ͏ ΨΠυϥΠϯ
·ͱΊ w40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷ wྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δ wࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δ wతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏
·ͱΊ w40-*%ͷݪଇ3PCFSU$.BSUJO͕·ͱΊͨͷ wྑ͍ઃܭͷ๏ଇੑΛநग़ͨ͠ͷͰɺݪଇΛҙࣝͨ͠ίʔυΛॻ͘͜ ͱʹΑͬͯྑ͍ઃܭͷίʔυʹͳΔ͜ͱ͕ظͰ͖Δ wࣗͷߟ͑Λཧͨ͠Γɺઃܭͷྑ͠ѱ͠Λஅͨ͠ΓɺνʔϜͷڞ ௨ݴޠج൫ʹͳΔͳͲͷޮՌظͰ͖Δ wతʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠