Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複雑なドメインに泥臭く立ち向かう

su-kun1899
December 15, 2018

 複雑なドメインに泥臭く立ち向かう

2018/12/15 JJUG CCC 2018 Fall での登壇資料です。
#jjug_ccc #ccc_e4

su-kun1899

December 15, 2018
Tweet

More Decks by su-kun1899

Other Decks in Programming

Transcript

  1. ෳࡶͳυϝΠϯʹ
    టषཱͪ͘޲͔͏
    #ccc_e4
    2018/12/15 JJUG CCC 2018 Fall
    גࣜձࣾΤεɾΤϜɾΤε
    1

    View Slide

  2. ձࣾ঺հ
    #ccc_e4 2

    View Slide

  3. 10೥ޙͷ೔ຊΛΑ͘͢Δ࢓ࣄΛ͠Α͏
    #ccc_e4 3

    View Slide

  4. #ccc_e4 4

    View Slide

  5. ࣗݾ঺հ
    @su_kun_1899
    ϞϒϓϩάϥϚɻΤϞ࿮ɻ
    ৺͸͍ͭͰ΋εΫϥϜϚελʔɻ
    จܥΤϯδχΞɻ
    Spockͱ͔ςετͷ࿩޷͖ɻ
    web/java/kotlin/agile/scrum
    ࠷ۙ͸Go͕޷͖Ͱ͢ɻ
    #ccc_e4 5

    View Slide

  6. ࿩͢͜ͱ
    #ccc_e4 6

    View Slide

  7. ෳࡶͳυϝΠϯͱઓ͏ͨΊʹ
    • Ͳ͏΍ͬͯ࢝ΊΔ͔
    • Ͳ͏΍ͬͯਐΊΔ͔
    • (ࢲ͕ͨͪ) Ͳ͏΍͍ͬͯΔ͔
    #ccc_e4 7

    View Slide

  8. ࿩͞ͳ͍͜ͱ
    • ಛఆͷઃܭख๏
    • DDD, OOP...
    • ٕज़ͷৄࡉ
    • Kotlin, SpringBoot...
    #ccc_e4 8

    View Slide

  9. Ͳ͏΍ͬͯ͸͡ΊΔ͔
    #ccc_e4 9

    View Slide

  10. ෳࡶͳυϝΠϯʁ
    #ccc_e4 10

    View Slide

  11. • Ξϯίϯτϩʔϥϒϧ
    • ๏཯ɾ੍౓ɾϧʔϧ
    • ొ৔ਓ෺ɾγεςϜ
    • ΦϖϨʔγϣϯ
    • ࣌ؒ࣠
    • εςʔλε
    • etc...
    #ccc_e4 11

    View Slide

  12. հޢอݥ
    #ccc_e4 12

    View Slide

  13. • հޢܦӦࢧԉαʔϏε
    • ࠾༻ɺӦۀɺڅ༩ɺۈଵɻɻ
    • հޢอݥ੥ٻ
    • WebΞϓϦέʔγϣϯ
    • Kotlin + SpringBoot
    #ccc_e4 13

    View Slide

  14. ਆಸ઒ݝࠃຽ݈߁อݥஂମ࿈߹ձHP http://www.kanagawa-kokuho.or.jp/kaigo/ 14

    View Slide

  15. հޢอݥͷෳࡶ͞
    • څ෇཰, ஍Ҭ୯Ձ
    • հޢ౓, ݶ౓ֹ
    • αʔϏεछྨ, αʔϏείʔυ
    • Ճࢉɾݮࢉ, ࢉఆߏ଄
    • ๏վਖ਼
    • ެඅ, ฦ໭
    • ࣏ࣗମ͝ͱͷಛྫ
    • etc...
    #ccc_e4 15

    View Slide

  16. ๏վਖ਼
    • ̏೥ຖʹେ෯ݟ௚͠
    • ෳࡶͳ΋ͷ͸ΑΓෳࡶʹͳ͍ͬͯ͘
    • ෳࡶ͞͸มԽ͢Δ
    #ccc_e4 16

    View Slide

  17. ݱ࣮ੈք͸
    γεςϜͷͨΊͷ΋ͷͰ͸ͳ͍
    #ccc_e4 17

    View Slide

  18. ҰຊಓΛݟ͚ͭΔ
    #ccc_e4 18

    View Slide

  19. Ұຊಓ
    • Not ཁٻͷચ͍ग़͠
    • Not Ձ஋ఏڙͷ୯Ґ
    • But υϝΠϯͷ࠷খ୯Ґ
    #ccc_e4 19

    View Slide

  20. Why?
    • ҭͯΔ
    • ؒҧ͑Δ
    • ΍Γ௚͢
    • มԽΛ౰ͨΓલʹ͢Δ
    #ccc_e4 20

    View Slide

  21. ҰຊಓΛݟ͚ͭग़͢
    #ccc_e4 21

    View Slide

  22. υϝΠϯͷֶश
    #ccc_e4 22

    View Slide

  23. ࣮຿ͷϩʔϧϓϨΠ
    #ccc_e4 23

    View Slide

  24. ϢʔβʔετʔϦʔϚοϐϯά
    ϢʔβʔετʔϦʔϚοϐϯά https://www.oreilly.co.jp/books/9784873117324/ 24

    View Slide

  25. ਆಸ઒ݝࠃຽ݈߁อݥஂମ࿈߹ձHP http://www.kanagawa-kokuho.or.jp/kaigo/ 25

    View Slide

  26. 1. հޢࣄۀऀ͕ར༻ऀຖͷεέδϡʔϧͷ࣮੷Λ֬ఆ͢Δ
    • ར༻ऀຖͷ੥ٻॻʢอݥ෼ʣ
    2. հޢࣄۀऀ͕ࠃ΁ͷ੥ٻֹۚΛ֬ఆ͢Δ
    • հޢࣄۀऀຖͷ੥ٻॻʢอݥ෼ʣ
    3. αʔϏεࣄۀऀ͕ར༻ऀ΁ͷ੥ٻֹۚΛ֬ఆ͢Δ
    • ར༻ऀຖͷ੥ٻॻʢࣗඅ෼ʣ
    #ccc_e4 26

    View Slide

  27. #ccc_e4 27

    View Slide

  28. ՝୊؅ཧ
    • όοΫϩά
    • TODOϦετ
    • ͙͢ʹ࢒͢
    #ccc_e4 28

    View Slide

  29. ελʔτϥΠϯʹ͸ཱͬͨ
    #ccc_e4 29

    View Slide

  30. Ͳ͏΍ͬͯਐΊΔ͔
    #ccc_e4 30

    View Slide

  31. υϝΠϯʹϑΥʔΧε͢Δ
    #ccc_e4 31

    View Slide

  32. ϞσϧϕʔεͷΞϓϩʔν
    • (ཁٻ) -> ֓೦
    • (֓೦) -> Ϟσϧ
    #ccc_e4 32

    View Slide

  33. The complexity is complicated.
    #ccc_e4 33

    View Slide

  34. Good programmers write code that
    humans can understand.
    — -Martin Fowler
    #ccc_e4 34

    View Slide

  35. υϝΠϯͷཧղΛ໌Β͔ʹ͢Δ
    • ʮ୭͕ԿΛ΍Δ͔ʁʯ
    • ཧղΛදݱ͢Δ࡞ۀ
    • (ཁٻ) -> ֓೦
    • (֓೦) -> Ϟσϧ
    #ccc_e4 35

    View Slide

  36. Ϟσϧͷநग़
    #ccc_e4 36

    View Slide

  37. !
    #ccc_e4 37

    View Slide

  38. (ࢲ͕ͨͪ) Ͳ͏΍͍ͬͯΔ͔
    #ccc_e4 38

    View Slide

  39. Ϟσϧͷநग़
    • ҰຊಓͷݴޠԽ
    • ໊ࢺͷநग़
    • σʔλͱͦͷ࣋ͪओ
    #ccc_e4 39

    View Slide

  40. #ccc_e4 40

    View Slide

  41. ෇ᝦͱϗϫΠτϘʔυ
    1. Write and Talk!
    2. Write and Talk!!
    3. Write and Talk!!!
    #ccc_e4 41

    View Slide

  42. #ccc_e4 42

    View Slide

  43. Talk is cheap. Show me the code.
    — Linus Torvalds
    #ccc_e4 43

    View Slide

  44. ίʔυΛॻ͘
    #ccc_e4 44

    View Slide

  45. Service
    • ΞϓϦέʔγϣϯ͕࣮ݱ͍ͨ͜͠ͱ
    • ϢʔεέʔεΛදݱ͢Δॲཧͷ୯Ґ
    • ϞσϧΛ࢖͏
    #ccc_e4 45

    View Slide

  46. ઃܭͷͨΊͷςετ
    • ݱ࣮ੈքΛදݱ͢Δͷ͕໨తͰ͸ͳ͍
    • ServiceͷςετΛॻ͍ͯΈΔ
    • ࣮ݱ͍ͨ͜͠ͱΛݟࣦΘͳ͍
    #ccc_e4 46

    View Slide

  47. TDD Live in 50 minutes https://speakerdeck.com/twada/tdd-live-in-50-minutes 47

    View Slide

  48. def "ࠃ΁ͷ੥ٻॻΛ࡞੒͢Δʹ͸"() {
    given:
    // Կ͕ඞཁͰ
    when:
    // ॲཧΛ࣮ߦ͢Δͱ
    then:
    // Կ͕Ͱ͖͕͋Δͷ͔ʁ
    }
    #ccc_e4 48

    View Slide

  49. ໋໊
    • ୈೋݴޠ(ӳޠ)΁ͷஔ͖׵͑
    • ೔ຊޠ͔ͩΒ௨͡Δɺ͸·΍͔͠
    • ओޠͷ໌֬Խ
    #ccc_e4 49

    View Slide

  50. /**
    * ݶ౓ֹ؅ཧର৅಺୯Ґ਺ͷ಺ɺڅ෇ର৅ͷ୯Ґ਺
    */
    fun benefitPointAppliedToPointLimit(): Point {
    return min(
    pointAppliedToPointLimit() - adjustmentPoint.total(),
    insuranceLicense.gradingMaxPoint
    )
    }
    #ccc_e4 50

    View Slide

  51. Ϟσϧͷߏ଄
    #ccc_e4 51

    View Slide

  52. "ଟ͘ͷ৘ใΛूΊͨوॏͳσʔλ"
    • σʔλ͸୯ͳΔ஋
    • σʔλ͸࡞Γग़ͤͳ͍
    • σʔλΛ૊Έ߹Θͤͨҙຯͷ͋Δ৘ใ
    • ৘ใ͸σʔλ͔Β࡞Γग़ͤΔ
    SQLΞϯνύλʔϯ https://www.oreilly.co.jp/books/9784873115894/ 52

    View Slide

  53. • σʔλ͔ΒϞσϧΛੜ੒
    • ίϯετϥΫλͰσʔλΛ౉͢
    • ৘ใΛϞσϧ(ͷϝιου)͕ఏڙ
    • σʔλΛ૊Έ߹ΘͤɾՃ޻͢Δ
    #ccc_e4 53

    View Slide

  54. લా͞Μ͕
    ࠓ݄
    อݥڅ෇අΛ
    ͍͘Β໯͑Δͷ͔
    #ccc_e4 54

    View Slide

  55. հޢࣄۀॴA͕લా͞Μʹ࣮ࢪͨ͠αʔϏε
    • 11/10 ਎ମհޢ 394୯Ґ
    • 11/20 ੜ׆ԉॿ 181୯Ґ
    • 11/30 ਎ମհޢ 394୯Ґ
    #ccc_e4 55

    View Slide

  56. // σʔλͷऔಘ
    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

    View Slide

  57. !
    #ccc_e4 57

    View Slide

  58. // σʔλͷऔಘ
    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

    View Slide

  59. σʔλͱ৘ใ͸੾ΓޱʹΑͬͯมΘΔ
    • ඞཁͳσʔλ͸Ϟσϧͱͯ͠ѻ͏
    • Ϟσϧ͸σʔλΛѻ͏୯Ґ
    • σʔλΛந৅Խ͢ΔͱϞσϧʹͳΔ
    • Ϟσϧ͸৘ใΛఏڙ͢Δ
    #ccc_e4 59

    View Slide

  60. ! ੥ٻॻ
    " ར༻ऀ
    # $! ඃอݥऀূ
    # $! ࢧڅݶ౓୯Ґ਺
    # $! ୯Ґ਺
    " հޢࣄۀॴ
    # $! ୯Ґ਺୯Ձ
    # $! Ձ֨
    $ ࣮੷εέδϡʔϧ
    #ccc_e4 60

    View Slide

  61. ੥ٻॻͷσʔλͱ৘ใ
    • ར༻ऀ -> ੥ٻઌ
    • հޢࣄۀॴ -> ੥ٻݩ
    • ࣮੷εέδϡʔϧ -> ੥ٻ໌ࡉ
    #ccc_e4 61

    View Slide

  62. ! ੥ٻॻ
    " ར༻ऀ
    # $! ඃอݥऀূ
    # $! ࢧڅݶ౓୯Ґ਺
    # $! ୯Ґ਺
    " հޢࣄۀॴ
    # $! ୯Ґ਺୯Ձ
    # $! Ձ֨
    $ ࣮੷εέδϡʔϧ
    #ccc_e4 62

    View Slide

  63. Ϟσϧͷநग़
    • ୭͕
    • ͲͷʮσʔλʯΛ஌͍ͬͯͯ
    • Կͷʮ৘ใʯΛఏڙ͢Δ
    • ͱߟ͑Δͷ͔
    #ccc_e4 63

    View Slide

  64. ਖ਼ղ͸ͳ͍
    • ੾ΓޱΛܾΊΔͷ͸ࣗ෼ͨͪ
    • "खࠒͳେ͖͞"
    • ୯Ұ੹೚
    • ςετ
    #ccc_e4 64

    View Slide

  65. #ccc_e4 65

    View Slide

  66. ؀ڥ
    #ccc_e4 66

    View Slide

  67. #ccc_e4 67

    View Slide

  68. #ccc_e4 68

    View Slide

  69. #ccc_e4 69

    View Slide

  70. • ։ൃऀ͸5໊
    • ϗϫΠτϘʔυ
    • ෇ᝦͱϖϯ
    • େ͖ͳϞχλ
    #ccc_e4 70

    View Slide

  71. αΠΫϧͷ੾Γସ͑ίετΛͳ͘͢
    #ccc_e4 71

    View Slide

  72. υϝΠϯͷཧղΛ໌Β͔ʹ͢Δ
    • ʮ୭͕ԿΛ΍Δ͔ʁʯ
    • ཧղϨϕϧΛදݱ
    • શһ͕ཧղ͍ͯ͠Δඞཁ͕͋Δ
    #ccc_e4 72

    View Slide

  73. ͻͱͭͷ͜ͱΛ ΈΜͳͰ΍Δ
    #ccc_e4 73

    View Slide

  74. ϞϒϓϩɾϞϒϫʔΫ
    • ू߹஌
    • ৘ใڞ༗
    • ڭҭޮՌ
    WEB+DB PRESS Vol.102 https://gihyo.jp/magazine/wdpress/archive/2018/vol102 74

    View Slide

  75. Agile Games 2017 - Mob Programming Conference https://2017.agilegamesnewengland.com/index.php/mob-programming-conference 75

    View Slide

  76. Ϟϒͷམͱ݀͠
    • ฏۉ଎౓ʹͳ͍ͬͯͳ͍͔ʁ
    • ໾ׂ෼୲͸ͳ͍͔ʁ
    • ࠷ߴ଎౓͸্͕͍ͬͯΔ͔ʁ
    • ϞϒϫʔΫ͸෢ثͷҰͭ
    #ccc_e4 76

    View Slide

  77. ৘ใڞ༗ͱυΩϡϝϯςʔγϣϯ
    #ccc_e4 77

    View Slide

  78. Flow and Stock
    • Twitter ͱ YouTube
    • Chat ͱ Wiki
    #ccc_e4 78

    View Slide

  79. όέʔγϣϯͷࣸਅ
    #ccc_e4 79

    View Slide

  80. #ccc_e4 80

    View Slide

  81. • FlowΛSlackʹ࢒͢
    • FlowΛesaʹ࢒͢
    • StockΛesaʹ࢒͢
    #ccc_e4 81

    View Slide

  82. #ccc_e4 82

    View Slide

  83. ܭըͱ;Γ͔͑Γ
    #ccc_e4 83

    View Slide

  84. ୹͍αΠΫϧ
    • يಓमਖ਼
    • ҙࢥܾఆ
    • ਐḿ
    #ccc_e4 84

    View Slide

  85. 5ஈ֊ͷҙࢥܾఆ
    !
    ׬શʹಉҙ
    "
    Α͍ͱࢥ͏
    #
    ΍ͬͯΈΔ͔
    $
    Ҿ͔͔ͬΔ͚Ͳɺ΍ͬͯΈΔ͔..
    %
    ࢍಉͰ͖ͳ͍ͳ
    &
    ઈରʹμϝͩ
    #ccc_e4 85

    View Slide

  86. #ccc_e4 86

    View Slide

  87. ਐḿ
    #ccc_e4 87

    View Slide

  88. Working software is the primary
    measure of progress.
    Principles behind the Agile Manifesto https://agilemanifesto.org/iso/en/principles.html 88

    View Slide

  89. Appendix
    #ccc_e4 89

    View Slide

  90. ϚΠΫϩαʔϏε
    • ΍Ί͓ͯ͜͏
    • ४උ͸Ͱ͖Δ
    ϚΠΫϩαʔϏεΞʔΩςΫνϟ https://www.oreilly.co.jp/books/9784873117607/ 90

    View Slide

  91. ෗ഊ๷ࢭ૚
    • ੍౓ࣗମͷ࿪
    • ݱߦιϑτ΢ΣΞͷ࢓༷
    • ӡ༻্ͷ੍໿
    • etc
    #ccc_e4 91

    View Slide

  92. Beware the Share.
    Check Your context.
    — Udi Dahan
    ϓϩάϥϚ͕஌Δ΂͖97ͷ͜ͱ https://www.oreilly.co.jp/books/9784873114798/ 92

    View Slide

  93. ·ͱΊ
    #ccc_e4 93

    View Slide

  94. • ࠎ֨ʹͳΔҰຊಓΛݟ͚ͭग़͢
    • ֆΛඳ͘ɺݴ༿ʹ͢Δ
    • ಈ࡞͢ΔίʔυΛॻ͘
    • ࣦഊ͠ͳ͕ΒҭͯΔ
    #ccc_e4 94

    View Slide

  95. #ccc_e4 95

    View Slide

  96. ϞσϧΛҭͯΔ
    ࡞Γͳ͕ΒܾΊ͍ͯ͘
    #ccc_e4 96

    View Slide

  97. MAKE MISTAKS FASTR
    #ccc_e4 97

    View Slide

  98. Usable
    Feasible
    Valuable
    #ccc_e4 98

    View Slide

  99. View Slide