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
su-kun1899
December 15, 2018
Programming
8
7.4k
複雑なドメインに泥臭く立ち向かう
2018/12/15 JJUG CCC 2018 Fall での登壇資料です。
#jjug_ccc #ccc_e4
su-kun1899
December 15, 2018
Tweet
Share
More Decks by su-kun1899
See All by su-kun1899
はじめての Ruby と Ruby On Rails
sukun1899
0
17
息をするようにエラー監視する
sukun1899
0
2.9k
Java屋さんがGoのFAQを読んでみた
sukun1899
0
390
SpringBootとMyBatisでデータベースを可視化する
sukun1899
4
2.2k
ぼくらのコードレビュー
sukun1899
3
610
モノリスの分割
sukun1899
4
750
なまえをだいじに
sukun1899
1
480
Other Decks in Programming
See All in Programming
新宿ダンジョンを可視化してみた
satoshi7190
2
250
VS Code をプロダクトにどう取り込むか
onomax
1
360
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
220
try! Swift Tokyo 初参加報告LT
hinakko2
0
220
PHPの次期バージョンはこの時期どうなっているのか - Internalsの開発体制について - PHPカンファレンス小田原
youkidearitai
PRO
1
190
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
230
Goのエラースタックトレースの歴史と今後
sonatard
7
1.2k
R言語の環境構築と基礎 Tokyo.R 112
bob3bob3
0
270
TYPO3 v13 – The road to LTS: What's new and new APIs
luisasofie_xoxo
0
200
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
360
ONE WEDGE_company_guide
1wedge_one
0
470
SIMD Parallel Programming with the Vector API
josepaumard
0
160
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
19
1.7k
Side Projects
sachag
451
41k
The Mythical Team-Month
searls
216
42k
Build The Right Thing And Hit Your Dates
maggiecrowley
24
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
17
6.4k
The Brand Is Dead. Long Live the Brand.
mthomps
49
28k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Into the Great Unknown - MozCon
thekraken
10
990
Building a Scalable Design System with Sketch
lauravandoore
456
32k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
A better future with KSS
kneath
231
16k
Transcript
ෳࡶͳυϝΠϯʹ టषཱ͔ͪ͘͏ #ccc_e4 2018/12/15 JJUG CCC 2018 Fall גࣜձࣾΤεɾΤϜɾΤε 1
ձࣾհ #ccc_e4 2
10ޙͷຊΛΑ͘͢ΔࣄΛ͠Α͏ #ccc_e4 3
#ccc_e4 4
ࣗݾհ @su_kun_1899 ϞϒϓϩάϥϚɻΤϞɻ ৺͍ͭͰεΫϥϜϚελʔɻ จܥΤϯδχΞɻ Spockͱ͔ςετͷ͖ɻ web/java/kotlin/agile/scrum ࠷ۙGo͕͖Ͱ͢ɻ #ccc_e4 5
͢͜ͱ #ccc_e4 6
ෳࡶͳυϝΠϯͱઓ͏ͨΊʹ • Ͳ͏ͬͯ࢝ΊΔ͔ • Ͳ͏ͬͯਐΊΔ͔ • (ࢲ͕ͨͪ) Ͳ͏͍ͬͯΔ͔ #ccc_e4 7
͞ͳ͍͜ͱ • ಛఆͷઃܭख๏ • DDD, OOP... • ٕज़ͷৄࡉ • Kotlin,
SpringBoot... #ccc_e4 8
Ͳ͏ͬͯ͡ΊΔ͔ #ccc_e4 9
ෳࡶͳυϝΠϯʁ #ccc_e4 10
• Ξϯίϯτϩʔϥϒϧ • ๏ɾ੍ɾϧʔϧ • ొਓɾγεςϜ • ΦϖϨʔγϣϯ • ࣌ؒ࣠
• εςʔλε • etc... #ccc_e4 11
հޢอݥ #ccc_e4 12
• հޢܦӦࢧԉαʔϏε • ࠾༻ɺӦۀɺڅ༩ɺۈଵɻɻ • հޢอݥٻ • WebΞϓϦέʔγϣϯ • Kotlin
+ SpringBoot #ccc_e4 13
ਆಸݝࠃຽ݈߁อݥஂମ࿈߹ձHP http://www.kanagawa-kokuho.or.jp/kaigo/ 14
հޢอݥͷෳࡶ͞ • څ, Ҭ୯Ձ • հޢ, ݶֹ • αʔϏεछྨ, αʔϏείʔυ
• Ճࢉɾݮࢉ, ࢉఆߏ • ๏վਖ਼ • ެඅ, ฦ • ࣏ࣗମ͝ͱͷಛྫ • etc... #ccc_e4 15
๏վਖ਼ • ̏ຖʹେ෯ݟ͠ • ෳࡶͳͷΑΓෳࡶʹͳ͍ͬͯ͘ • ෳࡶ͞มԽ͢Δ #ccc_e4 16
ݱ࣮ੈք γεςϜͷͨΊͷͷͰͳ͍ #ccc_e4 17
ҰຊಓΛݟ͚ͭΔ #ccc_e4 18
Ұຊಓ • Not ཁٻͷચ͍ग़͠ • Not Ձఏڙͷ୯Ґ • But υϝΠϯͷ࠷খ୯Ґ
#ccc_e4 19
Why? • ҭͯΔ • ؒҧ͑Δ • Γ͢ • มԽΛͨΓલʹ͢Δ #ccc_e4
20
ҰຊಓΛݟ͚ͭग़͢ #ccc_e4 21
υϝΠϯͷֶश #ccc_e4 22
࣮ͷϩʔϧϓϨΠ #ccc_e4 23
ϢʔβʔετʔϦʔϚοϐϯά ϢʔβʔετʔϦʔϚοϐϯά https://www.oreilly.co.jp/books/9784873117324/ 24
ਆಸݝࠃຽ݈߁อݥஂମ࿈߹ձHP http://www.kanagawa-kokuho.or.jp/kaigo/ 25
1. հޢࣄۀऀ͕ར༻ऀຖͷεέδϡʔϧͷ࣮Λ֬ఆ͢Δ • ར༻ऀຖͷٻॻʢอݥʣ 2. հޢࣄۀऀ͕ࠃͷٻֹۚΛ֬ఆ͢Δ • հޢࣄۀऀຖͷٻॻʢอݥʣ 3. αʔϏεࣄۀऀ͕ར༻ऀͷٻֹۚΛ֬ఆ͢Δ
• ར༻ऀຖͷٻॻʢࣗඅʣ #ccc_e4 26
#ccc_e4 27
՝ཧ • όοΫϩά • TODOϦετ • ͙͢ʹ͢ #ccc_e4 28
ελʔτϥΠϯʹཱͬͨ #ccc_e4 29
Ͳ͏ͬͯਐΊΔ͔ #ccc_e4 30
υϝΠϯʹϑΥʔΧε͢Δ #ccc_e4 31
ϞσϧϕʔεͷΞϓϩʔν • (ཁٻ) -> ֓೦ • (֓೦) -> Ϟσϧ #ccc_e4
32
The complexity is complicated. #ccc_e4 33
Good programmers write code that humans can understand. — -Martin
Fowler #ccc_e4 34
υϝΠϯͷཧղΛ໌Β͔ʹ͢Δ • ʮ୭͕ԿΛΔ͔ʁʯ • ཧղΛදݱ͢Δ࡞ۀ • (ཁٻ) -> ֓೦ •
(֓೦) -> Ϟσϧ #ccc_e4 35
Ϟσϧͷநग़ #ccc_e4 36
! #ccc_e4 37
(ࢲ͕ͨͪ) Ͳ͏͍ͬͯΔ͔ #ccc_e4 38
Ϟσϧͷநग़ • ҰຊಓͷݴޠԽ • ໊ࢺͷநग़ • σʔλͱͦͷ࣋ͪओ #ccc_e4 39
#ccc_e4 40
ᝦͱϗϫΠτϘʔυ 1. Write and Talk! 2. Write and Talk!! 3.
Write and Talk!!! #ccc_e4 41
#ccc_e4 42
Talk is cheap. Show me the code. — Linus Torvalds
#ccc_e4 43
ίʔυΛॻ͘ #ccc_e4 44
Service • ΞϓϦέʔγϣϯ͕࣮ݱ͍ͨ͜͠ͱ • ϢʔεέʔεΛදݱ͢Δॲཧͷ୯Ґ • ϞσϧΛ͏ #ccc_e4 45
ઃܭͷͨΊͷςετ • ݱ࣮ੈքΛදݱ͢Δͷ͕తͰͳ͍ • ServiceͷςετΛॻ͍ͯΈΔ • ࣮ݱ͍ͨ͜͠ͱΛݟࣦΘͳ͍ #ccc_e4 46
TDD Live in 50 minutes https://speakerdeck.com/twada/tdd-live-in-50-minutes 47
def "ࠃͷٻॻΛ࡞͢Δʹ"() { given: // Կ͕ඞཁͰ when: // ॲཧΛ࣮ߦ͢Δͱ then:
// Կ͕Ͱ͖͕͋Δͷ͔ʁ } #ccc_e4 48
໋໊ • ୈೋݴޠ(ӳޠ)ͷஔ͖͑ • ຊޠ͔ͩΒ௨͡Δɺ·͔͠ • ओޠͷ໌֬Խ #ccc_e4 49
/** * ݶֹཧର୯Ґͷɺڅରͷ୯Ґ */ fun benefitPointAppliedToPointLimit(): Point { return min(
pointAppliedToPointLimit() - adjustmentPoint.total(), insuranceLicense.gradingMaxPoint ) } #ccc_e4 50
Ϟσϧͷߏ #ccc_e4 51
"ଟ͘ͷใΛूΊͨوॏͳσʔλ" • σʔλ୯ͳΔ • σʔλ࡞Γग़ͤͳ͍ • σʔλΛΈ߹Θͤͨҙຯͷ͋Δใ • ใσʔλ͔Β࡞Γग़ͤΔ SQLΞϯνύλʔϯ
https://www.oreilly.co.jp/books/9784873115894/ 52
• σʔλ͔ΒϞσϧΛੜ • ίϯετϥΫλͰσʔλΛ͢ • ใΛϞσϧ(ͷϝιου)͕ఏڙ • σʔλΛΈ߹ΘͤɾՃ͢Δ #ccc_e4 53
લా͞Μ͕ ࠓ݄ อݥڅඅΛ ͍͘Β͑Δͷ͔ #ccc_e4 54
հޢࣄۀॴA͕લా͞Μʹ࣮ࢪͨ͠αʔϏε • 11/10 ମհޢ 394୯Ґ • 11/20 ੜ׆ԉॿ 181୯Ґ •
11/30 ମհޢ 394୯Ґ #ccc_e4 55
// σʔλͷऔಘ val serviceSection = serviceSectionRepository.findBy(sectionNumber) val insuranceLicense = insuranceLicenseRepository.findBy(licenseNumber,
monthProvided) val actualResult = actualResultRepository.findBy(monthProvided, sectionNumber, licenseNumber) // Ϟσϧͷੜ val estimate = Estimate(insuranceLicense, serviceSection, actualResult) // ใͷఏڙ estimate.amount() // ߹ܭֹۚ estimate.benefitAmount() // อݥڅֹۚ estimate.careReceiverAmount() // ར༻ऀෛ୲ֹ estimate.amountBy(careType) // αʔϏεछྨ͝ͱͷֹۚ #ccc_e4 56
! #ccc_e4 57
// σʔλͷऔಘ val serviceSection = serviceSectionRepository.findBy(sectionNumber) val insuranceLicense = insuranceLicenseRepository.findBy(licenseNumber,
monthProvided) val actualResult = actualResultRepository.findBy(monthProvided, sectionNumber, licenseNumber) // Ϟσϧͷੜ val estimate = Estimate(insuranceLicense, serviceSection, actualResult) // ใͷఏڙ estimate.amount() // ߹ܭֹۚ estimate.benefitAmount() // อݥڅֹۚ estimate.careReceiverAmount() // ར༻ऀෛ୲ֹ estimate.amountBy(careType) // αʔϏεछྨ͝ͱͷֹۚ #ccc_e4 58
σʔλͱใΓޱʹΑͬͯมΘΔ • ඞཁͳσʔλϞσϧͱͯ͠ѻ͏ • ϞσϧσʔλΛѻ͏୯Ґ • σʔλΛநԽ͢ΔͱϞσϧʹͳΔ • ϞσϧใΛఏڙ͢Δ #ccc_e4
59
! ٻॻ " ར༻ऀ # $! ඃอݥऀূ # $! ࢧڅݶ୯Ґ
# $! ୯Ґ " հޢࣄۀॴ # $! ୯Ґ୯Ձ # $! Ձ֨ $ ࣮εέδϡʔϧ #ccc_e4 60
ٻॻͷσʔλͱใ • ར༻ऀ -> ٻઌ • հޢࣄۀॴ -> ٻݩ •
࣮εέδϡʔϧ -> ٻ໌ࡉ #ccc_e4 61
! ٻॻ " ར༻ऀ # $! ඃอݥऀূ # $! ࢧڅݶ୯Ґ
# $! ୯Ґ " հޢࣄۀॴ # $! ୯Ґ୯Ձ # $! Ձ֨ $ ࣮εέδϡʔϧ #ccc_e4 62
Ϟσϧͷநग़ • ୭͕ • ͲͷʮσʔλʯΛ͍ͬͯͯ • ԿͷʮใʯΛఏڙ͢Δ • ͱߟ͑Δͷ͔ #ccc_e4
63
ਖ਼ղͳ͍ • ΓޱΛܾΊΔͷࣗͨͪ • "खࠒͳେ͖͞" • ୯Ұ • ςετ #ccc_e4
64
#ccc_e4 65
ڥ #ccc_e4 66
#ccc_e4 67
#ccc_e4 68
#ccc_e4 69
• ։ൃऀ5໊ • ϗϫΠτϘʔυ • ᝦͱϖϯ • େ͖ͳϞχλ #ccc_e4 70
αΠΫϧͷΓସ͑ίετΛͳ͘͢ #ccc_e4 71
υϝΠϯͷཧղΛ໌Β͔ʹ͢Δ • ʮ୭͕ԿΛΔ͔ʁʯ • ཧղϨϕϧΛදݱ • શһ͕ཧղ͍ͯ͠Δඞཁ͕͋Δ #ccc_e4 72
ͻͱͭͷ͜ͱΛ ΈΜͳͰΔ #ccc_e4 73
ϞϒϓϩɾϞϒϫʔΫ • ू߹ • ใڞ༗ • ڭҭޮՌ WEB+DB PRESS Vol.102
https://gihyo.jp/magazine/wdpress/archive/2018/vol102 74
Agile Games 2017 - Mob Programming Conference https://2017.agilegamesnewengland.com/index.php/mob-programming-conference 75
Ϟϒͷམͱ݀͠ • ฏۉʹͳ͍ͬͯͳ͍͔ʁ • ׂ୲ͳ͍͔ʁ • ࠷ߴ্͕͍ͬͯΔ͔ʁ • ϞϒϫʔΫثͷҰͭ #ccc_e4
76
ใڞ༗ͱυΩϡϝϯςʔγϣϯ #ccc_e4 77
Flow and Stock • Twitter ͱ YouTube • Chat ͱ
Wiki #ccc_e4 78
όέʔγϣϯͷࣸਅ #ccc_e4 79
#ccc_e4 80
• FlowΛSlackʹ͢ • FlowΛesaʹ͢ • StockΛesaʹ͢ #ccc_e4 81
#ccc_e4 82
ܭըͱ;Γ͔͑Γ #ccc_e4 83
͍αΠΫϧ • يಓमਖ਼ • ҙࢥܾఆ • ਐḿ #ccc_e4 84
5ஈ֊ͷҙࢥܾఆ ! શʹಉҙ " Α͍ͱࢥ͏ # ͬͯΈΔ͔ $ Ҿ͔͔ͬΔ͚ͲɺͬͯΈΔ͔.. %
ࢍಉͰ͖ͳ͍ͳ & ઈରʹμϝͩ #ccc_e4 85
#ccc_e4 86
ਐḿ #ccc_e4 87
Working software is the primary measure of progress. Principles behind
the Agile Manifesto https://agilemanifesto.org/iso/en/principles.html 88
Appendix #ccc_e4 89
ϚΠΫϩαʔϏε • Ί͓ͯ͜͏ • ४උͰ͖Δ ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://www.oreilly.co.jp/books/9784873117607/ 90
ഊࢭ • ੍ࣗମͷ • ݱߦιϑτΣΞͷ༷ • ӡ༻্ͷ੍ • etc #ccc_e4
91
Beware the Share. Check Your context. — Udi Dahan ϓϩάϥϚ͕Δ͖97ͷ͜ͱ
https://www.oreilly.co.jp/books/9784873114798/ 92
·ͱΊ #ccc_e4 93
• ࠎ֨ʹͳΔҰຊಓΛݟ͚ͭग़͢ • ֆΛඳ͘ɺݴ༿ʹ͢Δ • ಈ࡞͢ΔίʔυΛॻ͘ • ࣦഊ͠ͳ͕ΒҭͯΔ #ccc_e4 94
#ccc_e4 95
ϞσϧΛҭͯΔ ࡞Γͳ͕ΒܾΊ͍ͯ͘ #ccc_e4 96
MAKE MISTAKS FASTR #ccc_e4 97
Usable Feasible Valuable #ccc_e4 98
None