2018/12/15 JJUG CCC 2018 Fall での登壇資料です。 #jjug_ccc #ccc_e4
ෳࡶͳυϝΠϯʹటषཱ͔ͪ͘͏#ccc_e42018/12/15 JJUG CCC 2018 FallגࣜձࣾΤεɾΤϜɾΤε1
View Slide
ձࣾհ#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 thathumans 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 primarymeasure 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
UsableFeasibleValuable#ccc_e4 98