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
31
ソフトウェア設計のすすめ
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
----
slideshareより移行
Soichiro Yoshimura
September 27, 2023
Tweet
Share
More Decks by Soichiro Yoshimura
See All by Soichiro Yoshimura
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
sifue
0
100
チームの目標への柔軟な対応
sifue
0
35
並行処理初心者のためのAkka入門
sifue
0
5
2013年末カウントダウン番組におけるAkamai活用事例
sifue
0
26
失敗の話
sifue
0
21
6000名以上の高校生に行われた VR教育の実践と課題
sifue
0
5.2k
N高等学校でのSlackの活用
sifue
0
960
N予備校プログラミングコースでのNode.js
sifue
0
900
OBSのプラグイン作ってみた
sifue
0
730
Other Decks in Technology
See All in Technology
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
380
web-application-security
matsuihidetoshi
0
180
IaCジェネレーターとBedrockで詳細設計書を生成してみた
tsukasa_ishimaru
3
650
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
2
190
開発パフォーマンスを最大化するための開発体制
ham0215
2
470
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
410
Java EE/Jakarta EEの現状と将来―クラウドネイティブ時代にJava EEは対応できるのか?―
takakiyo
1
170
Python と Snowflake はズッ友だょ!~ Snowflake の Python 関連機能をふりかえる ~
__allllllllez__
1
130
20分で完全に理解するGrafanaダッシュボード
hamadakoji
3
760
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
320
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
150
.NET Profiler in 2024.
kkamegawa
1
250
Featured
See All Featured
The Mythical Team-Month
searls
216
42k
The Invisible Side of Design
smashingmag
294
49k
Making Projects Easy
brettharned
108
5.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
60
14k
What's in a price? How to price your products and services
michaelherold
237
11k
Building Applications with DynamoDB
mza
88
5.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
The Language of Interfaces
destraynor
151
23k
A Tale of Four Properties
chriscoyier
151
22k
Agile that works and the tools we love
rasmusluckow
325
20k
Debugging Ruby Performance
tmm1
70
11k
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
ཁ݅࿙Ε/িಥ͕ى͜Βͳ͍Α͏ɺ։ൃऀ ͷૂ͍௨Γʹ։ൃ͍͚ͯ͠ΔΑ͏͔ͬ͠Γ ϨϏϡʔ͠ͳ͕Βߟ͍͖͑ͯ·͠ΐ͏ʂ
Ҏ্ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠