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
Soichiro Yoshimura
September 27, 2023
Technology
0
94
ソフトウェア設計のすすめ
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
----
slideshareより移行
Soichiro Yoshimura
September 27, 2023
Tweet
Share
More Decks by Soichiro Yoshimura
See All by Soichiro Yoshimura
プログラミング教育する大学、ZEN大学
sifue
1
620
いちソフトウェアエンジニアが プログラミング教育をはじめるのに読んで良かった本
sifue
0
210
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
sifue
0
250
チームの目標への柔軟な対応
sifue
0
110
並行処理初心者のためのAkka入門
sifue
0
44
2013年末カウントダウン番組におけるAkamai活用事例
sifue
0
97
失敗の話
sifue
0
100
6000名以上の高校生に行われた VR教育の実践と課題
sifue
0
6.2k
N高等学校でのSlackの活用
sifue
0
1.2k
Other Decks in Technology
See All in Technology
大規模プロダクトで実践するAI活用の仕組みづくり
k1tikurisu
5
1.7k
Redux → Recoil → Zustand → useSyncExternalStore: 状態管理の10年とReact本来の姿
zozotech
PRO
21
8.9k
JJUG CCC 2025 Fall バッチ性能!!劇的ビフォーアフター
hayashiyuu1
1
390
Moto: Latent Motion Token as the Bridging Language for Learning Robot Manipulation from Videos
peisuke
0
160
レガシーで硬直したテーブル設計から変更容易で柔軟なテーブル設計にする
red_frasco
4
430
[CV勉強会@関東 ICCV2025] WoTE: End-to-End Driving with Online Trajectory Evaluation via BEV World Model
shinkyoto
0
290
個人から巡るAI疲れと組織としてできること - AI疲れをふっとばせ。エンジニアのAI疲れ治療法 ショートセッション -
kikuchikakeru
4
1.8k
Greenは本当にGreenか? - B/GデプロイとAPI自動テストで安心デプロイ
kaz29
0
110
Bedrock のコスト監視設計
fohte
2
210
国産クラウドを支える設計とチームの変遷 “技術・組織・ミッション”
kazeburo
4
5.6k
膨大なデータをどうさばく? Java × MQで作るPub/Subアーキテクチャ
zenta
0
120
アジャイル社内普及ご近所さんマップを作ろう / Let's create an agile neighborhood map
psj59129
1
140
Featured
See All Featured
A better future with KSS
kneath
239
18k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
How to Ace a Technical Interview
jacobian
280
24k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1k
Visualization
eitanlees
150
16k
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
ཁ݅࿙Ε/িಥ͕ى͜Βͳ͍Α͏ɺ։ൃऀ ͷૂ͍௨Γʹ։ൃ͍͚ͯ͠ΔΑ͏͔ͬ͠Γ ϨϏϡʔ͠ͳ͕Βߟ͍͖͑ͯ·͠ΐ͏ʂ
Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠