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の原則って何ですか?」って質問に答えたかった / What's SOLID pri...
Search
Satoshi Kawashima
January 30, 2019
Programming
2.4k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「SOLIDの原則って何ですか?」って質問に答えたかった / What's SOLID principle
書籍を読んでもわりと唐突に始まるSOLIDの原則
いざ自分が説明しようとすると結構難儀する代物だと思いますので、それっぽく説明ができるように調べたみたお話です
Satoshi Kawashima
January 30, 2019
More Decks by Satoshi Kawashima
See All by Satoshi Kawashima
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
10
7.3k
モジュラモノリスにおけるトランザクション設計の考え方 / transaction design on modular monolith
nazonohito51
16
10k
BASE大規模リアーキテクチャリング / base_rearchitecturing
nazonohito51
17
14k
既存サービスに後からR/W Splittingライブラリを入れる時に考えたこと / r-w-splitting
nazonohito51
1
30k
社内勉強会でOOPとCleanArchitectureとDDDを勉強し始めたというお話
nazonohito51
7
5.6k
CakePHP2でもPhpStormがコード補完してくれるようにした話 / cakephp2-ide-helper
nazonohito51
1
2.7k
PHPStanでCustomRuleを作る / Make PHPStan CustomRule
nazonohito51
6
4.5k
単方向依存を実現する静的解析ライブラリのご紹介 / Analyze PHP Dependencies
nazonohito51
3
6.4k
ドキュメントルート配下に全てのPHPファイルが置かれていた環境をindex.phpだけにした話 / document root
nazonohito51
2
4.1k
Other Decks in Programming
See All in Programming
Spec-driven Development with AI
simas
PRO
0
2.3k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
280
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
300
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3.1k
Rails初心者がパスキーを実装してみて大変だったこと
ktombow
0
150
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.5k
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
360
AI-Powered Domain-Driven Design
ziobrando
0
410
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
290
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
160
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
180
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
GraphQLとの向き合い方2022年版
quramy
50
15k
Building AI with AI
inesmontani
PRO
1
1.4k
Un-Boring Meetings
codingconduct
0
490
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Writing Fast Ruby
sferik
630
63k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Exploring anti-patterns in Rails
aemeredith
4
560
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
470
SEO for Brand Visibility & Recognition
aleyda
0
4.9k
Fireside Chat
paigeccino
43
4.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
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తʹै͏͖ϧʔϧͱ͍͏ͷͰͳ͘ɺࢀߟʹ͢Δͱͤʹͳ ΔΨΠυϥΠϯఔͷظײͰࢀর͢Δͱྑͦ͞͏ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠