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
ドメイン・ファーストで考える問題解決に役立つモデル設計 / Domain First Mode...
Search
suzushin54
March 24, 2024
Programming
4
3.1k
ドメイン・ファーストで考える問題解決に役立つモデル設計 / Domain First Model Design
Object-Oriented Conference 2024 の登壇資料です。
suzushin54
March 24, 2024
Tweet
Share
More Decks by suzushin54
See All by suzushin54
Learning DDD輪読会#15 / Learning DDD Book Club #15
suzushin54
1
250
認知的複雑度から見るGo言語のイベントソーシング実装 / Event Sourcing with Go
suzushin54
8
5.1k
Learning DDD輪読会#9 / Learning DDD Book Club #9
suzushin54
0
280
Learning DDD輪読会#4 / Learning DDD Book Club #4
suzushin54
1
740
Learning DDD輪読会#1
suzushin54
2
1k
複数の境界づけられたコンテキストにおける共通ロジックの扱いについて / Handling common logic in multiple contexts
suzushin54
1
1.9k
Other Decks in Programming
See All in Programming
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | droidcon Italy
prof18
0
150
fs2-io を試してたらバグを見つけて直した話
chencmd
0
220
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1k
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
210
Refactor your code - refactor yourself
xosofox
1
260
Jakarta EE meets AI
ivargrimstad
0
230
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
260
From Translations to Multi Dimension Entities
alexanderschranz
2
130
Criando Commits Incríveis no Git
marcelgsantos
2
170
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Making Projects Easy
brettharned
116
5.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Making the Leap to Tech Lead
cromwellryan
133
9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Statistics for Hackers
jakevdp
796
220k
The Pragmatic Product Professional
lauravandoore
32
6.3k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Code Review Best Practice
trishagee
65
17k
Transcript
Shinichiro υϝΠϯɾϑΝʔετͰߟ͑Δ ղܾʹཱͭϞσϧઃܭ Object-Oriented Conference 2024 #ooc_2024
👨💻 whoami Intro • Shinichiro Mikami • ϕʔεϑʔυגࣜձࣾ 🍞 •
γχΞιϑτΣΞΤϯδχΞ • ܦྺɿSIer -> ࣄۀձࣾ ࣾ • Gopher ʕ◔ϖ◔ʔ 2 mikami.bsky.social suzushin54
🗣 ࠓճͷτʔΫʹ͍ͭͯ Intro • γεςϜ։ൃͷݱʹ͓͍ͯɺ“Ϟσϧ” ͕ᐆດʹѻΘΕ͍ͯΔͱײ͡Δ • ϞσϧΛదʹઃܭɾ࣮͢Δ͜ͱɺڝ૪ྗͷݯઘͱͳΔ • ༗໊ͳઃܭݪଇ։ൃख๏ɺΑ͘ݟฉ͖͢ΔɻԿΒ͍͍ͷΒ͍͠
• ຊʹͦ͏ͳͷ͔ʁΈΜͳෲམ͍ͪͯͬͯ͠ΔͷͩΖ͏͔ʁ • ͦ͜Ͱ͜Ε·Ͱʹ໘ͨ͠Ϟσϧʹؔ͢Δ՝ΞϯνύλʔϯΛ֬ೝ • ղܾʹཱͭϞσϧͱɺͲͷΑ͏ͳͷ͔ʁΛߟ • ࣄͷઆ໌ίʔυͷஅยͷհʹཹΊΔ͜ͱͳ͘ɺ ͳͥෳࡶ͕ͭ͘͞ΒΕͯ͠·͏ͷ͔ɺܦҢྲྀΕͱڞʹݟ͍ͯ͘ 3
🙊 ຊͷ༰ʹ͍ͭͯ Intro • ్தల։͢Δ EC αΠτͷྫՍۭͷͰ͋Γɺॴଐ͢Δاۀͷࣄۀ ίʔυϕʔεͱҰؔ͋Γ·ͤΜ • ݶΒΕͨ࣌ؒͳͷͰɺؔ࿈͢ΔίϯηϓτΛཏతʹΧόʔ͢Δ͜ͱ
Ͱ͖·ͤΜʢগɺྫ֎తͳέʔεͳͲ৮Ε͍ͯ·ͤΜʣ • ݸผͷϓϥΫςΟεͷྑ͠ѱ͠Λͨ͡Γ൷ධ͢ΔͷͰ͋Γ·ͤΜ 4
Agenda • ϞσϧͱԿ͔ʁ • ιϑτΣΞ։ൃͰѻΘΕΔϞσϧ • EC αΠτͷ۩ମྫ • ઓज़తϓϩάϥϛϯά
• ઓུతϓϩάϥϛϯά • ·ͱΊ 5 🔖 ຊͷ༰ʹ͍ͭͯ
ϞσϧͱԿ͔ʁ
📝 Ϟσϧͱʁ Intro 7 https://www.agilealliance.org/resources/experience-reports/towards-autonomous-aligned-teams-with-domain-driven-design/ Ϟσϧͱɺ͋Δࣄݱͷ୯७Խ͞ΕͨදݱͰ͋Γɺ ҙਤతʹಛఆͷଆ໘Λڧௐ͠ɺଞͷଆ໘Λແࢹͨ͠ͷɻ ಛఆͷ༻్Λߟྀͨ͠நԽɻ “A model
is a simplified representation of a thing or phenomenon that intentionally emphasizes certain aspects while ignoring others. Abstraction with a specific use in mind.” - Rebecca Wires-Brock ※ ҙ༁ͨ͠ͷ ࢀߟ:ʰLearning Domain-Driven Designʱ
Intro 8 https://www.marathon.tokyo/en/media/press-release/pdf/230621_release_en.pdf https://www.tokyometro.jp/station/pdf/202305/202305_number_en.pdf ͦΕͧΕͷతͷͨΊʹɺ ಛఆͷଆ໘Λڧௐͨ͠Γɺແࢹ͍ͯ͠Δ 🗾 యܕతͳϞσϧͷྫਤ
✅ Ϟσϧݱ࣮ੈքͷࣄࣄͷίϐʔͰͳ͍ Intro • ͯ͢ͷϞσϧʹʮతʯ͕͋ΓɺͦͷୡʹඞཁͳใͷΈΛؚΉ • ຊ࣭తʹɺϞσϧԽநԽͰ͋Δ • ෆඞཁͳࡉ෦লུͯ͠ɺղܾʹඞཁͳͷ͚ͩΛ͢ •
ʢOOP ͷΫϥεͷઆ໌ʹʮࣸ૾ʯͱ͍͏ݴ༿͕ΘΕΔ͜ͱ͕͋Γɺ ɹ͜ΕޡղΛট͘දݱͰ͋Δͱߟ͍͑ͯ·͢ʣ • நԽͷతɺᐆດʹ͢Δ͜ͱͰͳ͍ • ͋Δ࣮ମΛ؆ུԽͯ͠ɺॏཁͰͳ͍ৄࡉΛলུͨ͠ͷ • ෳࡶͳͷʹ͍ͭͯߟ͑ͨΓૢ࡞ͨ͠Γ͢ΔͷΛ༰қʹ͢Δ 9
ιϑτΣΞ։ൃͰ ѻΘΕΔϞσϧ
σʔλϞσϧ Ϟσϧʹ͍ͭͯ • σʔλͷߏɺؔੑɺ͓ΑͼϧʔϧΛମܥతʹఆٛͨ͠Έ • ≒ ER ਤ ͱͯ͠ೝࣝ͞Ε͍ͯΔ 11
ࢀߟ:ʰγεςϜ։ൃɾ৽ͷͨΊͷσʔλϞσϧେશ ʱ ୈ1ষ
υϝΠϯϞσϧ Ϟσϧʹ͍ͭͯ • ۀυϝΠϯʹಛԽͨ͠ιϑτΣΞϞσϧͷ͜ͱ • ΦϒδΣΫτϞσϧͱ࣮ͯ͠͞ΕΔ͜ͱ͕ଟ͘ɺ ѻ͏σʔλৼΔ͍Λɺۀతʹਖ਼֬ͳҙຯ߹͍Ͱอ࣋͢Δ 12 ࢀߟ:ʰ࣮ફυϝΠϯۦಈઃܭʱ -
υϝΠϯϞσϧͱ 👉 σʔλͷߏؔੑʹͨ͠σʔλϞσϧͱҟͳΓɺ γεςϜ͕ରͱ͢ΔྖҬͷใʹϑΥʔΧε͍ͯ͠Δ நԽ͞ΕͨϞσϧ͕࣮͞Εͯ υϝΠϯΦϒδΣΫτͱͳΔ
υϝΠϯΦϒδΣΫτ Ϟσϧʹ͍ͭͯ • όʔτϥϯυɾϝΠϠʔΦϒδΣΫτͷݪଇͱͯ͠ɺ ʮͯ͢ͷΦϒδΣΫτԿΒ͔ͷΫϥεͷΠϯελϯεͰ͋Δɻʯͱ ఆ͍ٛͯ͠Δ ※ Go ݴޠͳͲΫϥεߏΛ࣋ͨͳ͍͕ɺҟͳΔํ๏Ͱ OOP
Λ࣮ݱ͍ͯ͠ΔͨΊɺ͜͜Ͱ͡ͳ͍ • DTO ͷΑ͏ʹ୯ʹσʔλΛอ࣋͢Δ͚ͩͰͳ͘ɺͦͷσʔλʹؔ࿈͢ ΔৼΔ͍ʢϝιουɾؔʣ߹Θͤͯ࣋ͭʢநσʔλܕʣ 13 ࢀߟ:ʰΦϒδΣΫτࢦೖ ୈ2൛ ݪଇɾίϯηϓτʱ 👉 ΦϒδΣΫτࢦϓϩάϥϛϯάͷಛੑΛ׆͔ͨ͠ϓϥΫςΟε ͔͠͠ɺ։ൃͷݱʹ͓͍ͯᐆດʹଊ͑ΒΕΔ͜ͱଟ͍
σʔλϞσϧͱυϝΠϯϞσϧͷҧ͍͕ᐆດʹͳΔݪҼͷߟ Ϟσϧʹ͍ͭͯ 1. DB ઃܭ͔Β࢝ΊΔ։ൃΞϓϩʔν • DB ઃܭΛߦ͍ɺσʔλΛ֨ೲ͠ɺͦΕΛѻ͏࣮Λͯ͠͠·͏ 2. ORMͷར༻ʢ
※ Active Record ύλʔϯʣ • DB ͷϨίʔυΛϥοϓͨ͠ΦϒδΣΫτDB ΞΫηεͱυϝΠϯϩδοΫΛ࣋ͭ 3. εΩʔϚۦಈ։ൃͷҰൠԽͷӨڹ • Ϧιʔεʹର͢ΔCRUD ૢ࡞͕ڧௐ͞ΕɺΑΓσʔλʹҙ͕ࣝҾ͖دͤΒΕΔ ʢϦιʔεࢤͰ͋Δ REST API ಛʹݦஶʣ 4. ։ൃऀͷυϝΠϯࣝෆ • Ϗδωεϧʔϧۀ্ൃੜ͢ΔΠϕϯτΛੳͰ͖͍ͯͳ͍ͨΊɺ طʹݟ͍͑ͯΔϦιʔεҎ֎ͷϞσϧΛఆٛͰ͖ͳ͍ • ͜͜·ͰͰΠϯλʔϑΣΠε͕ݻ·͓ͬͯΓɺͦΕͰ࣮Ͱ͖ͯ͠·͏ 14 ※ https://www.martinfowler.com/eaaCatalog/activeRecord.html
υϝΠϯϞσϧͷॏཁੑ Ϟσϧʹ͍ͭͯ • ͦͦɺϏδωεϩδοΫຊ࣭తʹෳࡶͳͷ • ͦͷෳࡶ͞Λཧ͠ɺڞ௨ͷཧղΛଅਐ͢Δ • Ϗδωεϧʔϧͷ໌֬Խ • υϝΠϯϨΠϠʔͰҰݩཧ͢Δ͜ͱͰɺҰ؏ੑΛอূͰ͖Δ
…etc 15 👉 ϏδωεͷܧଓతͳվળͱΛࢧԉ͢ΔͨΊʹॏཁ
EC αΠτͷ۩ମྫ
ECαΠτ: OOC Shop Online ͷ։ൃ EC αΠτͷ۩ମྫ • Սۭͷձࣾ OOC
inc. ͰɺECαΠτΛ։ઃ͢Δ͜ͱʹɻ • ωοτγϣοϓͷ࡞αʔϏεΛ͏Ҋ͕͋ͬͨɺ ΧελϚΠζੑΛٻΊͯ։ൃΛܾஅ • PjM ͱϑϩϯτΤϯυΤϯδχΞ, όοΫΤϯυΤϯδχΞͷ3ਓͰ։ൃΛ։࢝ 17
ٕज़ελοΫͱΞʔΩςΫνϟ EC αΠτͷ۩ମྫ • C#, ASP.NET • REST API •
Layered Architecture • Repository pattern (DIP) • RDB 18 Controller ApplicationService Domain Infrastructure DB
ੜ AI ΛશྗͰ׆༻ͨ͠։ൃ EC αΠτͷ۩ମྫ • ཁ݅ͱઃܭํΛ AI ʹ͑ɺ രͰ։ൃΛਐΊ͍ͯ͘
• ػೳཁ݅Λຬͨ͢γεςϜ ͋ͬͱ͍͏ؒʹ✨ 19
1ޙ 1 year later
🎉 OOC Shop ઈௐʂ EC αΠτͷ۩ମྫ • ૣΊͷϚʔέοτΠϯ͕ޭΛ͠ɺചΓ্͛ௐ • 1पه೦Ωϟϯϖʔϯɺେޱސ٬͚ͷ։ൃҊ݅Ͱେ͠
• ΤϯδχΞ૿һͯ͠ɺଓʑͱՃ։ൃ͕ߦΘΕ͍ͯ͘ 21
3ޙ 3 year later
⚡ Ӣߦ͖͕ո͘͠ͳͬͯͨ EC αΠτͷ۩ମྫ • ECαΠτͷੑೳྼԽ͕ݦஶʹɻCore Web Vitals ͷείΞௐ •
ػೳՃͷམ͖ͪͯͯɺڝ߹ଞࣾͱൺͯػೳམཱ͕ͪͭ • ίʔυϩδοΫ͕ෳࡶԽ͠ɺΤϯδχΞ͔Βٕज़తෛ࠴ͷ͕ • ͦΜͳ࣌ɺෆ۩߹͕ݪҼͱͳΓ SNS ͰԌ্͢Δࣄ͕݅ൃੜ 🔥 • νʔϜҰཱͪࢭ·Γɺઃܭ࣮Λݟ͢͜ͱʹͨ͠🕵 23
վળͷಓے
ॳͷυϝΠϯͱαϒυϝΠϯͷཧղ վળͷಓے 25 Λจ͍ͨ͠ • ͡ΊʮΛചΔͨΊͷ EC αΠτʯΛ࡞Δ͜ͱ͚ͩΛߟ͍͑ͯͨ • ͦͷͨΊɺγεςϜͷͷར༻ऀ͚ͩʹ͍ͯͨ͠
EC system จ 👤 👩🏭 ސ٬ ࡏݿ Λݟ͍ͨ ࡏݿཧ ൃૹ αϓϥΠ νΣʔϯ
αϒυϝΠϯͷൃݟͱཧղ վળͷಓے 26 Ϧʔυ֫ಘࢪࡦ EC system จ Χλϩά ίϯςϯπཧ ސ٬ཧ
ࡏݿཧ 👨💻 👩💻 🧑💻 👩🏭 Ϛʔέ จ 👤 ސ٬ ݟΔ Ωϟϯϖʔϯ Ϋʔϙϯ ΤϯδχΞ ӡ༻อक ΧελϚʔ αϙʔτ αϓϥΠ νΣʔϯ ࡏݿཧ ൃૹ αϙʔτ • γεςϜͰͳ͘ɺϏδωεͷ؍͔Βੳͨ͠͠ • ૢ࡞͢ΔҎ֎ʹɺ࣮ࡍʹଟ͘ͷࣄۀ׆ಈྖҬ͕ଘࡏ͢Δ͜ͱʹؾͮ͘ ϩόετωεੳ, Πϕϯτετʔϛϯά …etc
αϒυϝΠϯʹରԠ͢Δڥք͚ͮΒΕͨίϯςΩετͷઃܭ վળͷಓے 27 Ϧʔυ֫ಘࢪࡦ EC system จ Χλϩά ίϯςϯπཧ ސ٬ཧ
ࡏݿཧ 👨💻 👩💻 🧑💻 👩🏭 Ϛʔέ จ 👤 ސ٬ ݟΔ Ωϟϯϖʔϯ Ϋʔϙϯ ΤϯδχΞ ӡ༻อक ΧελϚʔ αϙʔτ αϓϥΠ νΣʔϯ ࡏݿཧ ൃૹ αϙʔτ • ࣄۀ׆ಈྖҬʹରԠ͢ΔܗͰαϒγεςϜΛݕ౼ • ࠓճશʹ 1:1 ͰରԠ͢ΔΑ͏ʹ Ordering context Catalog context Inventory context Support context CMS context
ׂ݉ͷ Product Ϟσϧ վળͷಓے • ࠶ઃܭޙʹվΊͯݟΔͱɺ จ຺ͷࠞࡏΛೝࣝͰ͖ͨ • ෳͷΛ࣋ͬͨ͜ͱͰɺ Fat
Model ʹͳͬͯ͠·͍ͬͯͨ 28 👈 Inventory EC system Product 👈 Catalog 👈 Ordering 😵💫
վળޙͷ Product Ϟσϧ վળͷಓے 29 EC system Ordering context Catalog
context Inventory context Support context CMS context Product • Catalog context ͱͯ͠ඞཁͳ ଐੑɾৼΔ͍ʹݶఆ
Ordering context ઐ༻ͷϞσϧ վળͷಓے 30 EC system Ordering context Catalog
context Inventory context Support context CMS context OrderProduct Product • αϓϥΠνΣʔϯͷ୲ऀʮจʯͱݺΜͰ͍ͨ • OrderProduct ͱͯ͠ఆٛͨ͠ • ׂ͕໌֬ʹ͢Δ͜ͱͰݟ௨͕͠ ྑ͘ͳΓɺςετ༰қੑ্
վળલͷ Customer Ϟσϧ վળͷಓے • SNS Ԍ্ࣄ݅ͷݪҼɺαϙʔτͷϝϞ͕ސ٬ͷϚΠϖʔδͰ ϒϥβͷ։ൃऀπʔϧʹදࣔ͞Εͯ͠·͍ͬͯͨ͜ͱͱ໌ • 1ͭͷڥք͚ΒΕͨίϯςΩετ͓ΑͼυϝΠϯϞσϧΛෳνʔϜ͕ϝϯς͍ͯͨ͠
31 👤 ސ٬ 🧑💻 ΧελϚʔ αϙʔτ ߹͕ͤଟ͍ސ٬Λ ʮཁҙ٬ʯͱϝϞ { "mypage": { "customer": { "name": "John Doe", "email": "
[email protected]
", "address": "123 Main Street, Anytown, CA", "orders": null, "rank": 3, "memo": "ཁҙ٬", "inquiryCount": 13, "lastLogin": "2024-03-23T18:40:58" } 😡 API શͯͷ߲Λฦ͍ͯͨ͠
ReadModel ͷಋೖʢCQRSʣ վળͷಓے 32 • ސ٬ͷϚΠϖʔδʹඞཁͳใͷΈ Λอ࣋ͨ͠ ReadModel Λઃܭͨ͠ •
ϦʔυϞσϧͷ݅ • QueryMethodͷΈΛ࣋ͭ (ΠϛϡʔλϒϧͰ͋Δ) • ͋ΔϢʔεέʔεʹಛԽ͍ͯ͠Δ • ඞཁͳσʔλ͕ΦϒδΣΫτऔಘ࣌ ʹར༻ՄೳͰ͋Δ͜ͱ Controller Domain Infrastructure Customer ApplicationService Customer MyPage ࢀߟɿʰΦϒδΣΫτઃܭελΠϧΨΠυʱ
33 ReadModel ͷಋೖʢCQRSʣ վળͷಓے ϚΠϖʔδදࣔʹ ඞཁͳσʔλͷΈ Customer Ϟσϧ CustomerMyPage Ϟσϧ
• දࣔͷͨΊ͚ͩͷଐੑৼΔ͍ΛυϝΠϯϞσϧ͔ΒऔΓআ͘͜ ͱ͕Ͱ͖ɺ͞Βʹݟ௨͕͠ྑ͘ͳͬͨ ૯จճͳͲಋग़͍ͯͨ͠ ใ࠷ॳ͔Β࣋ͨͤΔ
ಉ͡աͪΛ܁Γฦ͞ͳ͍ͨΊʹ վળͷಓے • νʔϜۀΛੳ͢Δ͜ͱͰ • ͕͖ࣗͨͪ߹͍ͬͯͨࣄۀྖҬɺͦͷதͷ׆ಈྖҬΛཧղͨ͠ • ׆ಈྖҬʹରԠ͢ΔܗͰαϒγεςϜΛઃܭɺ ϦϑΝΫλϦϯάʹΑΓ៉ྷͳίʔυΛऔΓͨ͠ •
͔͠͠ɺίʔυϕʔε͕มΘ͚ͬͨͩͰ ͕࣌ؒܦͯ·ͨෳࡶੑʹ·͞Εͯ͠·͏ • ։ൃͷΞϓϩʔνΛม͑Δඞཁ͕͋ͬͨ 34
ઓज़తϓϩάϥϛϯά Tactical Programming
ઓज़తϓϩάϥϛϯάͱͲͷΑ͏ͳͷ͔ ઓज़తϓϩάϥϛϯά • ػೳΛಈ࡞ͤ͞Δ͜ͱʹযΛͯͨϓϩάϥϛϯάͷ͜ͱ • ʮԿΛղܾ͍ͨ͠ͷ͔ʯͰͳ͘ɺ ʮͲ͏͢Ε࣮ݱͰ͖Δͷ͔ʯͱߟ͑ͯ͠·͏ • طʹ͋ΔϦιʔεΛݩʹԿͱ͔͠Α͏ͱ͢Δ •
ٕज़తͳղܾํ๏ͷؔ৺ҰҼ • ʮఆظόονͰಉظ͢Δඞཁ͕͋ΔͷͰ…ʯ🤔 36 ࢀߟ: ʰA Philosophy of Software Designʱ 👉 ઓज़తϓϩάϥϛϯάͷੵΈॏͶ͕ෳࡶ͞ΛੜΉ
ઓज़తϓϩάϥϛϯάͷྫ 1 - খنͷվम ઓज़తϓϩάϥϛϯά • ཁ݅ɿ৽ΛఆՁͷ10%Ҿ͖Ͱൢച͠·͢ • ΤϯδχΞɿ •
Product ʹ IsNewRelease ϑϥάΛ͚ͭͯɺtrue ͩͬͨΒׂҾ͠Α͏ • Products ςʔϒϧʹΧϥϜΛՃͯ͠ • Product Ϟσϧʹ bool ͷϓϩύςΟΛՃ͢Ε OK 37
ઓज़తϓϩάϥϛϯάͷྫ 2 - ػೳՃ ઓज़తϓϩάϥϛϯά • ཁ݅ɿͷϨϏϡʔػೳΛՃ͠·͢ • ΤϯδχΞɿ •
ProductReviews ςʔϒϧΛ࡞Ζ͏ • ProductId Λ֎෦Ωʔͱͯ࣋ͬͯ͠ඥ͚ͮΔ • Product Ϟσϧʹ Reviews ྻΛՃͯ࣋ͨͤ͠Ε͍͍ 38
ઓज़తϓϩάϥϛϯάΛՃͤ͞Δ AI ʹΑΔ։ൃ ઓज़తϓϩάϥϛϯά • ͜ͷ࣌ɺΤϯδχΞ ੜ AI ʹؙ͓͛ͯ͠Γɺ ಛʹԿߟ͍͑ͯͳ͔ͬͨ
39 Generative AI
ઓज़తϓϩάϥϛϯάͷ݁Ռ ઓज़తϓϩάϥϛϯά • ͱ͍͑ɺͲͪΒͦͷ͕࣌͋ΔΑ͏ʹࢥ͑ͳ͍͔͠Εͳ͍ • ͦͯ͠ɺϦϦʔε͞ΕΔͱ࣮ࡍʹՁੜΈग़͢ • ͔͠͠ɺͦͷੵΈॏͶ͕ෳࡶ͞Λ࡞Γ্͍͛ͯ͘ • ͰɺͲ͏͢Δ͖ͳͷ͔ʁ
40
ઓུతϓϩάϥϛϯά Strategic Programming
ઓུతϓϩάϥϛϯάͱͲͷΑ͏ͳͷ͔ ઓུతϓϩάϥϛϯά • ػೳΛಈ࡞ͤ͞Δ͜ͱΛୈҰͷඪʹ͢ΔͷͰͳ͘ɺ ͍͔ͭ͘ͷઃܭΛࢼͯ͠࠷ΫϦʔϯͳͷΛબ͢Δ • কདྷͷγεςϜ֦ுΛఆͯ͠ɺ֦ு͕༰қͳͷΛબ͢Δ • γεςϜઃܭΛվળ͢ΔͨΊʹ࣌ؒΛࢿ͢Δ •
࠷Ͱͳ͘ɺ࠷ળΛࢦ͢Ξϓϩʔν 42 ࢀߟ: ʰA Philosophy of Software Designʱ
ઓུతϓϩάϥϛϯάͷྫ 1 - খنͷվम ઓུతϓϩάϥϛϯά 43 • ཁ݅ɿ৽ΛఆՁͷ10%Ҿ͖Ͱൢച͠·͢ • ϚʔέςΟϯάνʔϜʹΑΔͱɺࠓޙ༷ʑͳΩϟϯϖʔϯΛల։͍ͨ͠Β͍͠
• ͢ͰʹܭըࡁΈͷͷɺۀքͰҰൠతͳΩϟϯϖʔϯʹ͍ͭͯݕ౼ͨ͠ • ׂҾΛཧ͢ΔΈΛઃܭͯ͠ɺͦͷϩδοΫΛผ్࣮͢Δ • จͷλΠϛϯάͰΩϟϯϖʔϯΛద༻ͯ͠ɺׂҾΛ࣮ݱ͢Δ • ͦͷޙɺΞτϨοτΛ30%Ҿ͖Ͱൢച͢Δࡍগ͠ͷվमͰ࣮ݱͰ͖ͨ ੜ AI Λ͏߹ ઃܭίϯηϓτΛ͑ͯนଧͪʹ
ઓུతϓϩάϥϛϯάͷྫ 2 - ػೳՃ ઓུతϓϩάϥϛϯά • ཁ݅ɿͷϨϏϡʔػೳΛՃ͠·͢ • Review ϞσϧΛఆٛͯ͠ɺѻ͏Α͏ʹͨ͠
• ਓؾେྔͷϨϏϡʔ͕͋ͬͯද͕ࣔ͘ͳΔ͜ͱ͕ ݒ೦͞Ε͕ͨɺಠཱͯ͠ѻ͑ͨͨΊԆಡΈࠐΈ͢Δ͜ͱ͕Ͱ͖ͨ • ݸʑͷϨϏϡʔʹରͯ͠ෆదͳ༰ΛϑΟϧλϦϯά͢ΔͳͲɺ αϙʔτνʔϜ͔Βͷཁʹૉૣ͘Ԡ͑Δ͜ͱ͕Ͱ͖ͨ 44
ઓज़తϓϩάϥϛϯάѱ͔ʁ ઓज़తϓϩάϥϛϯάͱઓུతϓϩάϥϛϯά ϦεΫड༰ͯ͠બ͢Δ߹͋ΔʢͦΕ͕ྑ͍ͱݴ͍ͬͯͳ͍ʣ 1. ڝ߹ΑΓઌʹࢢαʔϏεΛೖ͍ͨ͠ 💨 2. PoC ͱͯ͠ͷ࣮Ͱ͋Γɺ࣮֬ʹ͍ࣺͯͷίʔυͰ͋Δ •
ʢԟʑʹͯͦ͠ͷ··ϩʔϯν͞ΕΔͱ͍͏͋Δ🙉 ʣ 3. Hot fi x 🚑 45 ࢀߟ: ʰA Philosophy of Software Designʱ ͕࣌ؒܦͭʹͭΕɺઓུతΞϓϩʔνͷਐḿ͕ٯస͢Δ
46 ʰιϑτΣΞΞʔΩςΫνϟͷجૅʱ “ΞʔΩςΫνϟʹਖ਼ղؒҧ͍ͳ͍ɻ ͨͩτϨʔυΦϑ͕͋Δ͚ͩͩ.” - Neal Ford
·ͱΊ
ࠓճͷςʔϚͰ͋Δ“ղܾʹཱͭϞσϧ”ͱ ·ͱΊ • ରυϝΠϯͷϏδωεϧʔϧ͕໌֬ʹө͞Ε͍ͯΔ • σʔλͱϩδοΫ͕·ͱΊΒΕɺநσʔλܕͱͯ͠ઃܭ͞Ε͍ͯΔ • ٸͳࢢͷมԽϏδωεཁٻʹରԠͰ͖Δॊೈ͞Λ࣋ͭ • ࠶ར༻ੑʹ༏ΕɺҙຯతͳίʔυͷॏෳΛ͙
48
υϝΠϯϑΝʔετͱ ·ͱΊ • ٕज़తͳ՝DBઃܭΑΓઌʹɺղܾ͍ͨ͠ྖҬʢυϝΠϯʣͱͦ ͷෳࡶੑʹֶ͍ͭͯͼɺͦͷࣝΛத৺ʹઃܭ͢ΔΞϓϩʔν • αϒυϝΠϯΛੳͯ͠ɺڥք͚ΒΕͨίϯςΩετΛઃܭ͢Δ • ͦͷதͰར༻͢ΔυϝΠϯϞσϧΛઃܭ͢Δ •
దͳۀཧղͷޙʹɺΑΓྑ͍ઃܭ͕ՄೳʹͳΔʢ՝ͷղ૾Λ্͛Δʣ • શ͘ҟͳΔઃܭʹͳΔ͜ͱ͑͋͞Δ • DDD ͷઓज़తઃܭͷϓϥΫςΟεͷΈΛઌʹಋೖ͢Δέʔε… • ཧநͷґଘɺִͳͲɺݟ௨͠ΛΑ͘͢Δҙຯ͋Δ • ෆ۩߹ΛੜΈग़͢γεςϜɺϞσϧʹͳΔϦεΫΛΑΓଟ๊͑͘Δ 49
͍͞͝ʹ ·ͱΊ • AI͕ίʔυΛಡΜͰɺॻ͍ͯɺϨϏϡʔ·Ͱ͢Δ࣌ɻࢲ͕ͨͪશͯΛख ͰରԠ͢Δػձݮ͖ͬͯ·ͨ͠ɻ͜ͷઌͬͱݮΔͰ͠ΐ͏ɻ • ࠓճͷྫͷΑ͏ʹɺAI ʹطଘͷϦιʔεΛఏڙͯ͠ɺ͜͏͍ͬͨΛ ղܾ͍ͨ͠ͱ͑Δͱɺଟ͘ͷ߹ʹઓज़తϓϩάϥϛϯάΛ࢝Ί·͢ •
࣮ࡍʹಈ࡞͢Δͷͷɺͬͪ͜ΛཱͯΔͱཱ͕͋ͬͪͨͣɺόάΛ௵ͯ͠ ·ͨผͷՕॴͰόάΔɺͱ͍ͬͨঢ়گʹͳΓ͕ͪͰ͢ɻݱ࣌Ͱɻ • ࢲ͕ͨͪυϝΠϯΛੳͯ͠ɺઃܭ͢Εɺͬͱ AI Λ׆༻Ͱ͖·͢ • AI ͱγεςϜΛ࡞Δ࣌ɺԿΛղܾ͍ͨ͠ͷ͔Λؾʹͯ͠Έ͍ͯͩ͘͞ 50