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
ソフトウェア設計のすすめ
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Soichiro Yoshimura
September 27, 2023
Technology
0
110
ソフトウェア設計のすすめ
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
----
slideshareより移行
Soichiro Yoshimura
September 27, 2023
Tweet
Share
More Decks by Soichiro Yoshimura
See All by Soichiro Yoshimura
プログラミング教育する大学、ZEN大学
sifue
1
650
いちソフトウェアエンジニアが プログラミング教育をはじめるのに読んで良かった本
sifue
0
230
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
sifue
0
260
チームの目標への柔軟な対応
sifue
0
120
並行処理初心者のためのAkka入門
sifue
0
49
2013年末カウントダウン番組におけるAkamai活用事例
sifue
0
110
失敗の話
sifue
0
110
6000名以上の高校生に行われた VR教育の実践と課題
sifue
0
6.2k
N高等学校でのSlackの活用
sifue
0
1.2k
Other Decks in Technology
See All in Technology
AI開発の落とし穴 〜馬には乗ってみよAIには添うてみよ〜
sansantech
PRO
10
5.5k
フロントエンド開発者のための「厄払い」
optim
0
180
AI時代、1年目エンジニアの悩み
jin4
1
130
AI開発をスケールさせるデータ中心の仕組みづくり
kzykmyzw
0
190
ゼロから始めたFindy初のモバイルアプリ開発
grandbig
2
520
システムのアラート調査をサポートするAI Agentの紹介/Introduction to an AI Agent for System Alert Investigation
taddy_919
0
740
書籍執筆での生成AIの活用
sat
PRO
1
230
EventBridge API Destination × AgentCore Runtimeで実現するLambdaレスなイベント駆動エージェント
har1101
7
280
開発メンバーが語るFindy Conferenceの裏側とこれから
sontixyou
2
390
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
0
270
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
AI推進者の視点で見る、Bill OneのAI活用の今
sansantech
PRO
2
280
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
0
340
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Automating Front-end Workflow
addyosmani
1371
200k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
250
Speed Design
sergeychernyshev
33
1.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Transcript
ιϑτΣΞઃܭͷ͢ʍΊ גࣜձࣾυϫϯΰ ٢ଜ૯Ұ (@sifue)
ιϑτΣΞઃܭΛ ͳͥ͢Δͷ͔ʁ
ͦͦઃܭͬͯ ඞཁͳͷʁ
ϓϩτλΠϐϯά͠ͳ͕Β࡞ͬͯ ͍͘ͳΒඞཁͳ͍Μ͡Όͳ͍ͷʁ
ͦ͏͡Όͳ͍߹͋Δ
ྫ͑ͲΜͳ͔࣌ ෳࡶͳཁ݅ΛѻΘͳͯ͘ͳΒͳ͍࣌ ߟྀͷൈ͚࿙Εͷ͍͠ෳࡶͳۀ༻݅ ແఀࢭϝϯςφϯεͳͲͷӡ༻ োੑ ֦ுੑ ଟ͘ͷγεςϜͱ࿈ܞ
ෳࡶͳཁ݅Λ࣋ͭγεςϜɺ ݐஙͰݴ͑ߴϏϧͷΑ͏ͳͷ େͳݐங๏ ిؾ Ψε ۭௐ ؒऔΓͷ͍উख (τΠϨͷʁ)
ෳࡶͳཁ݅ͷߟྀ͕ൈ͚͍ͯΔ߹ʹ େ͖ͳίετΛ͏͜ͱʹͳΔ͜ͱ͋Δ
ݘখΛϓϩτλΠϐϯάͰ࡞ͬͯ ͦΕΛ֦ுɺվम͠ଓ͚ΕߴϏϧʹͳΔ͔ʁ
ͳΒͳ͍ ॳݘখͰྑ͔ͬͨͷ͕ཁٻͷมߋͰ ߴϏϧ͕ٻΊΒΕΔ൵͕ܶͦ͜ʹ͋Δ͕...
Ͱ͖Δͷϋϧͷಈ͘
க໋తͳʹͿͪͨΕ࡞Γ͕͠ඞཁ ͋Δಥવߟྀ࿙Εͷཁ݅ʹͿͪͨͬͯγεςϜఀࢭʹؕΔ͜ͱ
ɹͨͩٯʹཁ݅ͷিಥ͕ى͜Βͳ͍Α͏ͳ γϯϓϧͳཁ݅ͷϓϩμΫτͳΒ ϓϩτλΠϐϯάΛར༻ͨ͠ ΠϯΫϦϝϯτͳ։ൃ͔ͳΓ༗ޮ
ͱ͍͑ෳࡶͦ͏ͳͷ ઃܭΛߟ͑Α͏
ͰಥવιϑτΣΞઃܭ͠ΖͱݴΘ ΕͯԿΛ͢Δ͔Α͘Θ͔Βͳ͍…
ͦΜͳํʹ͓͢͢ΊͷୈҰา
ਤΛॻ͍ͯΈΑ͏
ਤͱ͍ͬͯ ॻ͖ํ͕Θ͔Βͳ͍…
ͦΜͳ͋ͳͨʹ ͓͢͢Ίͷه๏
UML
UMLͱ ౷ҰϞσϦϯάݴޠ (Unified Modeling Language)ͱ͍͏ɺ1997 ʹબఆ͞Εͨੈքతʹར༻ Ͱ͖ΔιϑτΣΞͷͨΊ ͷઃܭਤͷॻ͖ํ ݱࡏɺUML 2.4.1͕࠷৽
Ͱ͋Γɺ13छྨͷਤͷॻ͖ ํΛར༻͢Δ͜ͱ͕Ͱ͖Δ
UML͕ͳ͍߹ͷਤ ͲΜͳײ͔͡ʁ
࣮ಉ͡ͷΛද͍ͯ͠Δͷʹɺه๏͕ҧ͏ͨΊʹ࢛͕֯Ͳ ͏͍͏ҙຯͰɺؙ͕Ͳ͏͍͏ҙຯͰͱ͔ɺͷઢ͕͋ΕͰɺ ੨͍ઢ͕͋Εͱ͔Λຖճઆ໌͠ͳ͍͚ͯ͘ͳ͍ มಈඅ ࢧग़ ݻఆඅ ݄࣍ूܭαʔϏε ՈܭΞϓϦͷઃܭͷྫ
ͭΒ͍ ઃܭϨϏϡʔΛ͢Δલʹશһ͕ਤͷه๏Λཧղ͢Δ ͱ͜Ζ͔Β࢝·ΔɻઃܭϨϏϡʔʹ్த͔Βͬͯ ͖ͨਓ͕ਤͷه๏͕Θ͔Βͳ͍...ɻ৽ͨʹjoinͨ͠ ϝϯόʔࢿྉΛݟͯҙຯ͕Θ͔Βͳ͍ɻ
UMLͦ͏͍͏Λ ղܾͯ͘͠Ε·͢ʂ
ͲΜͳਤ͕͋Δͷ͔ʁΑ͘͏ͩΖ͏5ͭΛհ Ϣʔεέʔεਤ: ཁ݅ͷߏΛදݱ ίϯϙʔωϯτਤ: γεςϜߏΛදݱ ύοέʔδਤ: ύοέʔδͷߏΛදݱ Ϋϥεਤ: Ϋϥεͷؔ࿈Λදݱ ΞΫςΟϏςΟਤ:
ϑϩʔνϟʔτͷΑ͏ͳͷ
Ϣʔεέʔεਤ ՈܭΞϓϦͷઃܭ
ίϯϙʔωϯτਤ ՈܭΞϓϦͷઃܭ
ύοέʔδਤ ՈܭΞϓϦͷઃܭ
Ϋϥεਤ ՈܭΞϓϦͷઃܭ
ΞΫςΟϏςΟਤ ՈܭΞϓϦͷઃܭ
͜Μͳ;͏ʹهड़Ͱ͖·͢
ਤΘ͔͚ͬͯͲ ԿͰॻ͚ྑ͍ͷʁ
͓͢͢ΊͷUMLϞσϦϯάπʔϧ Gliffy Astah Community PlantUML
Gliffy ConfluenceͷϓϥάΠϯ ݁ߏ͖Ε͍ ਤ͕େ͖͘ͳΔͱॏ͍ ੍͕؇ΊͰUMLҎ֎ͷه ๏Ͱ͖Δ Ϋϥεਤͷྫ
Astah Community MacͱWinͰಈ͘Javaͷσ εΫτοϓΞϓϦ ϖʔδʹఴ͢Δͱ ConfluenceͰਤΛදࣔͰ ͖Δ UMLʹҧͯ͠Δਤॻ͖ ʹ͍͘ Ϋϥεਤͷྫ
PlantUML ςΩετϕʔεͰUMLॻ͚ Δ(<|-- ͕ܧঝͱ͔) ࠷ۙྲྀߦͬͯΔ ConfluenceͰهड़Մೳ GUIͷαϙʔτͳ͍ͷͰ UMLͷ༷Λ͍ͬͯΔ ඞཁ͕͋Δ Ϋϥεਤͷྫ
Ҏ্հͨ͠πʔϧΛͬͯιϑ τΣΞͷઃܭઃܭϨϏϡʔΛ ͍͖ͬͯ·͠ΐ͏ʂ
͓͢͢Ίຊ UMLͷຊͱ͍͏ΑΓ૯߹తͳιϑτΣΞ։ൃͷຊ
ઃܭͷΓํΘ͔͚ͬͨ Ͳɺ۩ମతʹԿ͢Δͷʁ
ઃܭͷతͬͯԿʁ
ઃܭͱɺ ཁٻʹରͯ͠ɺૂͬͨཁ݅ΛઃఆͰ ͖ΔΑ͏ʹ͢Δ͜ͱɻਖ਼ղͳ͍ɻ
Α͘ग़ͯ͘Δઃܭϊϋ γεςϜߏΛϨΠϠʔԽ͢Δ/͠ͳ͍ ϞδϡʔϧԽ͢Δ/͠ͳ͍ ϞδϡʔϧΛϨΠϠʔԽ͢Δ/͠ͳ͍ SOLIDݪଇΛकΔ/कΒͳ͍
γεςϜߏΛϨΠϠʔԽ͢Δ/͠ͳ͍ ଟΞʔΩςΫνϟ ϨΠϠ͝ͱૄ݁߹ʹ͢Δ ӈ3+LBͷྫ ϨΠϠຖʹ࠶ىಈߋ৽Ͱ͖Δ ϨΠϠ͝ͱͰΛ૿͠ෛՙΛί ϯτϩʔϧͰ͖Δ ϨΠϠ͕૿͑Δͱཧίετ૿͑ Δ
ϞδϡʔϧԽ͢Δ/͠ͳ͍ ൚༻αϒϞδϡʔϧΛ͘͘Γग़ ͤɺॏෳ͕ݮͬͯอकίετ͕ Լ͕Δ Ϟδϡʔϧ͝ͱͰਓΛׂΓͯ ΔͷͰߋ৽িಥ͕গͳ͘ͳΔ ϞδϡʔϧԽ͢Δ͜ͱͰ։ൃί ετ૿͑Δ
ϞδϡʔϧΛϨΠϠʔԽ͢Δ/͠ͳ͍ DDDͷϨΠϠʔԽΞʔΩςΫ νϟͷྫ ϏδωεϩδοΫ(domain) ͕applicationuiͷϑ ϨʔϜϫʔΫͷVerUPͷมߋ Λ͏͚ͳ͍ ґଘؔͷڧ੍ΛकΔͨΊʹґ ଘؔͷٯసଇͱ͔ΛΘͳ͘ ͍͚ͯͳ͍ͳͲߴίετ
SOLIDݪଇΛकΔ/कΒͳ͍ ҎԼɺίετͱ࠶ར༻ੑͷτϨʔυΦϑͱͳΔ ୯Ұͷݪଇ: ͍Ζ͍ΖΔΫϥεΛ࡞Βͳ͍ ΦʔϓϯΫϩʔζυͷݪଇ: ঢ়ଶͷมߋ͔ΒकΓɺΫϥε ͷࣗମͷ֦ுΛఏڙ͢Δ Ϧείϑͷஔݪଇ: ܧঝҙຯͱͯ͠ͱࢠͷަՄೳͰ ͋ΔΑ͏ͳΫϥεઃܭʹ͢Δ
ґଘؔٯసͷݪଇ: ΠϯλʔϑΣʔεΛͬͯϨΠϠؒͷ ґଘؔΛҰํʹ͢Δ ΠϯλʔϑΣʔεͷͷݪଇ: ෦࣮ΛӅ͍͢Δ
ґଘؔٯసͷݪଇͷྫ ΠϯλʔϑΣʔεΛ࡞ͬͯͦΕΛґଘઌͰ࣮͢Δ
దͳઃܭͷతΛՌͨͨ͢Ίͷ ৭ʑͳύλʔϯ͕͋ΔͷͰͥͻ୳ͯ͠Έ͍ͯͩ͘͞ ϚʔνϯɾϑΝϥʔͷϦϑΝΫλϦϯά GoFͷσβΠϯύλʔϯ PoEAA ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ Lean architecture Microservices
ཁ݅࿙Ε/িಥ͕ى͜Βͳ͍Α͏ɺ։ൃऀ ͷૂ͍௨Γʹ։ൃ͍͚ͯ͠ΔΑ͏͔ͬ͠Γ ϨϏϡʔ͠ͳ͕Βߟ͍͖͑ͯ·͠ΐ͏ʂ
Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠