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
ソフトウェア設計のすすめ
Search
Soichiro Yoshimura
September 27, 2023
Technology
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ソフトウェア設計のすすめ
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
----
slideshareより移行
Soichiro Yoshimura
September 27, 2023
More Decks by Soichiro Yoshimura
See All by Soichiro Yoshimura
プログラミング教育する大学、ZEN大学
sifue
1
780
いちソフトウェアエンジニアが プログラミング教育をはじめるのに読んで良かった本
sifue
0
280
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
sifue
0
310
チームの目標への柔軟な対応
sifue
0
150
並行処理初心者のためのAkka入門
sifue
0
75
2013年末カウントダウン番組におけるAkamai活用事例
sifue
0
150
失敗の話
sifue
0
150
6000名以上の高校生に行われた VR教育の実践と課題
sifue
0
6.5k
N高等学校でのSlackの活用
sifue
0
1.4k
Other Decks in Technology
See All in Technology
素人でもできた!AIを使った短編小説創作入門
delhi09
PRO
0
280
SLOを阻む不安
sraku2159
0
200
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
210
Consistency for mere mortals - A gentle guide to consistency
ufried
0
110
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
3
710
Flutter Widget Previewerで始めるUIプレビューとVRTの自動化
sakusaku3939
0
190
ひとりで始めた AI駆動開発、チームに広げて何が変わったのか
kenichiodo
1
200
キヨさん、67歳。AIコーディングエージェントに挑む
happysamurai294
0
140
【Oracle AI SPOTLIGHT ウェビナー】事例から見る!なぜOCIが選ばれたのか ― AI時代のクラウド戦略を紐解く ―
oracle4engineer
PRO
1
150
(swiftc) NonCopyableとライフタイム修飾子
teamhimeh
0
160
バイブコーディングの特徴と「コケて直す」ループ
happysamurai294
0
140
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
460
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
340
Odyssey Design
rkendrick25
PRO
2
910
The untapped power of vector embeddings
frankvandijk
2
2k
Test your architecture with Archunit
thirion
2
2.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
580
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
330
Designing for Performance
lara
612
70k
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
ཁ݅࿙Ε/িಥ͕ى͜Βͳ͍Α͏ɺ։ൃऀ ͷૂ͍௨Γʹ։ൃ͍͚ͯ͠ΔΑ͏͔ͬ͠Γ ϨϏϡʔ͠ͳ͕Βߟ͍͖͑ͯ·͠ΐ͏ʂ
Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠