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

今あえてDRY原則に向き合う

Shinpei Maruyama
February 09, 2018
550k

 今あえてDRY原則に向き合う

Shinpei Maruyama

February 09, 2018
Tweet

Transcript

  1. CZ͠Μ΃͍BLBೣܕ஝Իػ
    ࠓ͋͑ͯ%3:ݪଇʹ
    ޲͖߹͏

    View Slide

  2. BCPVUNF
    w ג
    ϝσΟϩϜ
    w ݈߁Λ΋ͬͱ৽͘͠
    w 4DBMB
    w +BWB4DSJQU
    w 1FSM
    w 3VCZ

    View Slide

  3. BCPVUNF
    ͍Ζ͍Ζॻ͔͍͖ͤͯͨͩ·ͨ͠

    View Slide

  4. ࠓ೔ͷ࿩
    w %3:ݪଇΛݟ௚ͦ͏
    w ৽͍͔͠ʁ
    w Թނ஌৽ͱ͍͏͜ͱͰͲ͏͔ͻͱͭ

    View Slide

  5. ಋೖ

    View Slide

  6. %3:ݪଇධ൑Α͘ͳ͍
    w ͋Δఔ౓ܦݧΛੵΜͩϓϩάϥϚ
    ʮ%3:ʹ͍͍ҹ৅ͳ͍ʯ͍͍ͬͯ
    ͕ͪ

    View Slide

  7. Θ͔Δ

    View Slide

  8. ຊ౰ʹ͋ͬͨා͍࿩
    w ʮVQEBUFͱJOTFSUɺҾ਺͕ಉ͡
    ͳͷͰಉؔ͡਺ʹ·ͱΊ·ͨ͠ʂ
    %3:ݪଇͰ͢ʂʯ

    View Slide

  9. ͩΜͩΜ%3:ʹ
    ରͯ͠υϥΠͳଶ౓
    ͱΔΑ͏ʹͳΓ͕ͪ

    View Slide

  10. Ͱ΋ɺͦ΋ͦ΋
    %3:ݪଇͬͯͳʹʁ

    View Slide

  11. %POU3FQFBU:PVSTFMG
    w ॏෳ͸Α͘ͳ͍͔Βॏෳ͸ഉআ͠Α
    ͏Ͷɺͱ͍͏ݪଇ
    w ϓϩάϥϜͷʮઃܭʯʹؔ͢Δݪଇ
    Ͱ͢Ͷ

    View Slide

  12. Αͦ͞͏͡ΌΜ
    ͱ͜ΖͰʜ

    View Slide

  13. %POU3FQFBU:PVSTFMG
    w ॏෳ͸Α͘ͳ͍͔Βॏෳ͸ഉআ͠Α
    ͏Ͷɺͱ͍͏ݪଇ
    w ϓϩάϥϜͷʮઃܭʯʹؔ͢Δݪଇ
    Ͱ͢Ͷ

    View Slide

  14. ઃܭͬͯͳΜͳͷʁ
    ;Θͬͱͯ͠ͳ͍ʁ

    View Slide

  15. ιϑτ΢ΣΞͷઃܭͬͯʁ
    w ໰୊Λ෼ׂͯ͠ɺߏ଄Խ͢Δ͜ͱʢཁ
    ग़యʣ

    View Slide

  16. ͳΔ΄Ͳʂ
    ෼ׂ͢Ε͹
    ͑͑Μ΍ͳʂ

    View Slide


  17. View Slide

  18. Ͳ͏෼ׂ͢Δ͔
    w ͨͱ͑͹%#Λѻ͏γεςϜʹ͍ͭͯɺ
    Ͳ͏͍͏໨ઢͰ෼ׂ͢Δ͔ߟ͑ͯΈΑ͏
    w ςʔϒϧຖʹ෼ׂʁ
    w $36%Ͱ෼ׂʁ
    w ͋Δ͍͸ผͷࢹ఺Ͱ෼ׂʁ
    w ͍ΖΜͳํ๏͕ߟ͑ΒΕΔ͕ɺͲΕ͕ے͕ྑ
    ͍ͱݴ͑ΔʁͦΕ͸ͳͥʁ

    View Slide

  19. ΍Έ͘΋ʹ෼ׂͯ͠
    ΋μϝ

    View Slide

  20. ઃܭݪଇ͕༩͑ͯ͘ΕΔ΋ͷ
    w ےͷྑ͍෼ׂͱ͸Ͳ͏͍͏෼ׂͳͷ
    ͔ʁΛߟ͑ΔͨΊͷࢦ਑

    View Slide

  21. %3:ݪଇΛ࢖ͬͯ
    ໰୊Λ෼ׂ͢Δ
    ྫΛݟͯΈΔ

    View Slide


  22. w ͨͱ͑͹ඒ༰Ӄͷ༧໿؅ཧγεςϜΛ
    ߟ͑Δ
    w ελοϑͱސ٬͕͍Δ
    w ελοϑ΋ސ٬΋ɺͱ΋ʹࢯ໊Λ࣋
    ͭ
    w Ͳͬͪ΋pSTU@OBNFඞਢ

    View Slide

  23. ૉ௚ʹॻ͖Լ͠

    View Slide

  24. %3:͡Όͳ͍ʂ

    View Slide

  25. %3:ݪଇʹૉ௚ʹଇΔ
    w 1FSTPO͍ͬͯ͏ΫϥεΛ࡞ͬͯɺ
    TFU@pSTU@OBNF͸ͦ͜ʹॻ͜͏ʂ
    w 4UBGG͸1FSTPOΛܧঝͯ͠
    w $MJFOU΋1FSTPOΛܧঝ͠Α͏ʂ
    w ΍ͬͨͶʂ%3:ͩʂ

    View Slide

  26. %3:ݪଇ

    View Slide

  27. ΍ͬͨͶʂ

    View Slide

  28. ຊ౰ʹʁ

    View Slide

  29. ͋Δ೔
    w ʮ͜ͷγεςϜɺෆศͳΜͰ͢Αʯ
    w ి࿩༧໿ͷͱ໊͖ͬͯࣈ͔͠ਜ͔ͳ
    ͍͜ͱ͕ଟ͍Μ͚ͩͲɺͳΜ͔Լͷ
    ໊લ΋ඞਢೖྗͳΜ͢ΑͶ

    View Slide

  30. ͋Δ೔
    w ʮελοϑ΋໊ࣈ͸ඞਢɺԼͷ໊લ
    ͸೚ҙͰ͍͍Ͱ͔͢ʯ
    w ʮ͍΍ɺͦΕ͸ࠔΔͳʙʯ

    View Slide

  31. ख͔͚ؒͣͰ͖Δमਖ਼

    View Slide

  32. ͜ΕͰ͍͍ͷʁ
    w ਌Ϋϥεʹʮڞ௨͡Όͳ͍ॲཧʯ͕
    ॻ͔ΕͯΔ
    w ;ͨͭͷࢠΫϥεͷಈ͖ͷҧ͍͸਌
    ΫϥεΛݟʹߦ͔ͳ͍ͱΘ͔Βͳ͍
    w ෼ذ͸ෳࡶͷ࢝·Γ

    View Slide

  33. ͜ΕͰ͍͍ͷʁ
    w ΋ͬͱͪΌΜͱॻ͜͏ͱࢥͬͨΒ਌
    Ϋϥεʹॻ͍ͯͨॲཧΛࢠΫϥεଆ
    ʹҠͯ͠ɺͦ͏͢Δͱ΋͸΍਌Ϋϥ
    εඞཁͳ͘ͳͬͯʜʜ
    w େखज़ͱͳΔ

    View Slide

  34. %3:ʹͨ݁͠Ռɺ
    Ή͠Ζෳࡶੑ͕
    ૿ͯ͠ϝϯςφϏϦ
    ςΟ௿Լͨ͠ʜ

    View Slide

  35. ͳͥ͜Μͳ͜ͱʹʜ

    View Slide

  36. %3:ݪଇ
    l͚ͩz
    Λߟ͍͑ͯΔ͍ͤ

    View Slide

  37. ଞͷઃܭݪଇ΋
    ݟͯΈΑ͏

    View Slide

  38. ڽू౓ͱ݁߹౓

    View Slide

  39. ڽू౓ͱ݁߹౓
    w ڽू౓͸ߴ݁͘߹౓͸௿͘
    w ؔ࿈ͷߴ͍΋ͷ͸ಉ͡෦඼ʹ·ͱΊΔ
    w ෦඼ಉ࢜ͷӨڹ͸ͳΔ΂͘খ͘͢͞Δ

    View Slide


  40. View Slide

  41. ڽू౓͕௿͍ྫ
    ؔ࿈͢Δ΋ͷΛ
    όϥόϥόϥͬͱ
    ͍ͬͯ͡͠·͍ͬͯΔ

    View Slide

  42. ڽू౓ΛߴΊΔ
    ؔ࿈͢Δ΋ͷ͸
    ͻͱͭʹ·ͱΊΔ

    View Slide

  43. ݁߹౓͕ߴ͍ྫ
    4UB⒎ͱ$MJFOU
    ຊདྷผͷ΋ͷͳͷʹ
    ॲཧ͕ͻͱͭͷͱ͜Ζʹ
    ॻ͔Εͯ͠·͍ͬͯΔ

    View Slide

  44. ݁߹౓Λ௿ΊΔ
    w ͋ͱͰ΍Γ·͢

    View Slide

  45. ୯Ұ੹೚ݪଇ

    View Slide

  46. ୯Ұ੹೚ݪଇ
    w ͋ΔΫϥε͕มߋ͞ΕΔཧ༝͕̎ͭ
    Ҏ্͋ͬͯ͸͍͚ͳ͍

    View Slide


  47. View Slide

  48. ୯Ұ੹೚ݪଇʹ൓͢Δྫ
    ΫϥεΛมߋ͢Δཧ༝ɿ
    4UB⒎ͷ࢓༷มߋ
    $MJFOUͷ࢓༷มߋ

    View Slide

  49. ୯Ұ੹೚ʹ͢Δ
    w ͋ͱͰ΍Γ·͢

    View Slide

  50. ղ์ด࠯ݪଇ

    View Slide

  51. ։์ด࠯ݪଇ
    w ֦ுʹରͯ͠։͍͍ͯΔ
    w ػೳ௥Ճ͢Δࡍʹɺ΋ͱ΋ͱͷίʔυʹӨ
    ڹ͕ͳ͍Α͏ʹ͠Α͏
    w मਖ਼ʹରͯ͠ด͍ͯ͡Δ
    w ಺෦Λमਖ਼ͨ͠ͱ͖ʹͦͷΫϥεʹґଘ͠
    ͯΔΫϥεʹӨڹ͕ͳ͍Α͏ʹ͠ͳ͚Ε͹
    ͳΒͳ͍

    View Slide


  52. View Slide

  53. ֦ுʹରͯ͠։͍͍ͯͳ͍
    ߴ଎ҠಈϞʔυͷଞʹ΋
    ΧχϞʔυ͕௥Ճ͞ΕͨΒʁ

    View Slide

  54. ֦ுʹରͯ͠։͘
    ΧχϞʔυ͕௥Ճ͞Εͯ΋
    ଞͷΫϥεΛॻ͖׵͑Δ
    ඞཁͳ͠

    View Slide

  55. मਖ਼ʹରͯ͠։͍͍ͯͳ͍
    ߴ଎ҠಈϞʔυΛमਖ਼͢Δͱ͖
    ΧχϞʔυʹ΋ӨڹΛ
    ༩͔͑Ͷͳ͍

    View Slide

  56. मਖ਼ʹରͯ͠ด͡Δ
    ߴ଎ϞʔυΛमਖ਼ͯ͠΋
    ଞͷΫϥεʹӨڹΛ༩͑ͳ͍

    View Slide

  57. Ҏ্Λҙࣝͯ͠
    ໰୊Λ࠶ݕ౼͢Δ

    View Slide

  58. ໰୊ͷݟ௚͠
    w 4UBGG΋$MJFOU΋ͲͪΒ΋ࢯ໊Λ
    ࣋ͭ
    w ಉ͡7BMJEBUJPOͰ͋Δ
    w ผʑʹॻ͘ͱ%3:͡Όͳ͍ͷͰͳ
    Μͱ͔͍ͨ͠

    View Slide

  59. w %3:Ͱͳ͍ຊདྷͻͱͭͷΫϥ
    ε΍ϝιου͕୲͏΂͖੹຿͕ෳ਺
    ͷͱ͜Ζʹ͹Β·͔Εͯ͠·͍ͬͯ
    Δ
    w ੹຿Λݟ௚ͯ͠ΈΔ΂͖
    ໰୊఺

    View Slide

  60. ୯Ұ੹೚ݪଇʢ࠶ܝʣ
    w ͋ΔΫϥε͕มߋ͞ΕΔཧ༝͕̎ͭ
    Ҏ্͋ͬͯ͸͍͚ͳ͍
    w ˠʮมΘΓͦ͏ͳͱ͜Ζʯ͕Ͳ͔͜
    Λ஌Γɺ͔ͦ͜Βʮ෼ׂ఺ʯΛݟग़
    ͢΂͖

    View Slide

  61. Ͳ͕͜มΘΓͦ͏ʁมΘΒͳͦ͏ʁ
    w ސ٬ελοϑͱ͍͏΋ͷ͕ଘࡏ͢
    Δ͜ͱ͸ଟ෼ͦ͏ͦ͏มΘΒͳ͍ͩ
    Ζ͏
    w ސ٬ࣗମͷ࢓༷มߋ͸͋Γͦ͏
    w ελοϑͷ࢓༷มߋ΋͋Γͦ͏

    View Slide

  62. Ͳ͕͜มΘΓͦ͏ʁมΘΒͳͦ͏ʁ
    w ʮۭന͔Ͳ͏͔ΛνΣοΫ͢Δʯͬ
    ͯඞཁੑ͸มΘΒͣ͋Γͦ͏
    w ۭനͱ͸Կ͔ʁ͸มΘΔ͔΋ʢεϖʔ
    ε͸ʁOJM͸ʁվߦ͸ʁʣ

    View Slide

  63. Ͳ͏෼ׂ͢Δ
    w ސ٬
    w ސ٬ͷ࢓༷มߋʹΑͬͯมΘΔ
    w ελοϑ
    w ελοϑͷ࢓༷มߋʹΑͬͯมΘΔ
    w ۭനνΣοΫ܅
    w ۭനͱ͸Կ͔ɺͱ͍͏࢓༷ʹΑͬͯมΘΔ

    View Slide

  64. ΍ͬͯΈͨ

    View Slide

  65. Ұ౓Ҿ͍ͯ
    ઃܭݪଇΛຬͨͯ͠
    ͍Δ͔ݟͯΈΔ

    View Slide

  66. ݁߹౓ڽू౓
    w ڞ௨ͷ਌Ϋϥε͕ͳ͘ͳͬͯ$MJFOU
    ͱ4UBGGͷ݁߹౓͕௿͘ͳͬͨ
    w ۭനνΣοΫॲཧࣗମ͸ۭനνΣο
    Ϋ܅ʹ੾Γग़͞Ε͓ͯΓɺڽू౓͕
    ߴ·ͬͨ

    View Slide

  67. ୯Ұ੹೚ݪଇ
    w $MJFOU͕มߋ͞ΕΔཧ༝͸$MJFOUͷ࢓༷͕
    มΘͬͨͱ͖
    w 4UBGG͕มߋ͞ΕΔཧ༝͸4UBGGͷ࢓༷͕
    มΘͬͨͱ͖
    w &NQUZ7BMJEBUPS͕มߋ͞ΕΔཧ༝͸
    ʮ&NQUZͷఆٛʯ͕มΘͬͨͱ͖ OJM΋
    &NQUZͱΈͳ͢ͱ͔ʣ

    View Slide

  68. ։์ด࠯ݪଇ
    w ͦΕͧΕ͕मਖ਼͞Εͯ΋ͦΕͧΕʹ
    ରͯ͠ӨڹΛ༩͑ͳ͍ʢमਖ਼ʹରͯ͠
    ด͍ͯ͡Δʣ
    w ৽͍͠WBMJEBUPSΛఆٛͯ͠΋ͦΕ
    ͧΕʹӨڹΛ༩͑ͳ͍ʢ֦ுʹର͠
    ͯ։͍͍ͯΔʣ

    View Slide

  69. ͋Δ೔
    w ʮ͜ͷγεςϜɺෆศͳΜͰ͢Αʯ
    w Ծ༧໿ͷͱ໊͖ͬͯࣈ͔͠ਜ͔ͳ͍
    ͜ͱ͕ଟ͍Μ͚ͩͲɺͳΜ͔Լͷ໊
    લ΋ඞਢೖྗͳΜ͢ΑͶ

    View Slide

  70. ͋Δ೔
    w ʮελοϑ΋໊ࣈ͸ඞਢɺԼͷ໊લ
    ͸೚ҙͰ͍͍Ͱ͔͢ʯ
    w ʮ͍΍ɺͦΕ͸ࠔΔͳʙʯ

    View Slide

  71. मਖ਼ͨ͠

    View Slide

  72. ͋Δ೔
    w ϑΥʔϜ͔Β͸͍͍Μ͚ͩͲɺ"1*
    ͔Βୟ͍ͨΒͳΜ͔Τϥʔग़ͯΔΜ
    ͚ͩͲ
    w ˠௐ΂ͨΒɺpSTU@OBNFʹۭจࣈ
    ྻ͡Όͳͯ͘OJM͕౉͖ͬͯ͏Δ͜ͱ
    ͕Θ͔ͬͨ

    View Slide

  73. मਖ਼ͨ͠

    View Slide

  74. ΄͔ͷ
    ઃܭݪଇ΋ߟ͑ͯ
    ॻ͍ͨΒ
    อकੑ͕ߴ·ͬͨʂ

    View Slide

  75. w ·ͩͪΐͬͱ%3:͡Όͳ͍ʁ
    w 3VCZͷϝλϓϩʙΈ͍ͨͳ΍ͭͰͳΜ
    ͱ͔Ͱ͖ͦ͏
    w ͦͷࡍ͸ʮଞͷઃܭݪଇΛഁΒͳ͍ʯ͜
    ͱʹؾΛ͚ͭͳ͕Β΍Γ·͠ΐ͏
    ·ͱΊͱ༨ஊ

    View Slide

  76. ·ͱΊͱ༨ஊ
    w %3:͸ѱ͍΍ͭ͡Όͳ͍ɻ%3:ʮ͚ͩʯ͠
    ͔ߟ͑ͳ͍ͷ͕ѱ͍
    w ੹຿Λద੾ʹ෼ׂ͢ΔͨΊʹ͸ɺʮͲ͕͜ม
    ΘΓͦ͏ͰͲ͕͜มΘΒͳͦ͏͔ʯΛ஌Δ͜
    ͱ͕େࣄ
    w ͦΕ͕Θ͔Βͳ͍͏͔ͪΒա৒ʹઃܭ͢Δͷ
    ͸ѱख

    View Slide

  77. w ܧঝΑΓҠৡΛ࢖͑ͬͯ࿩ʁʮͳ
    ͥʯʮͲ͏͍͏ͱ͖ʹʯͦ͏͢΂͖͔
    ͱ͍͏࿩Ͱ͢
    w ʮͳΜͱͳ͘ηϯεͰ΍͍ͬͯͯͭ΋
    ࠔͬͯͳ͍͚ͲʯͦΕ͕Ͱ͖Δͻ
    ͱ͸͜Μͳൃදແࢹͯ͠େৎ෉ʂ
    ·ͱΊͱ༨ஊ

    View Slide

  78. ࠷ޙએ఻
    w Ұॹʹಇ͍ͯ͘ΕΔͻͱΛืूͯ͠·
    ͢
    w ࣗຫͰ͖ΔϓϩάϥϚͱҰॹʹಇ͍
    ͯ·͢
    w ·ͩ·͍ͩΖ͍Ζ໰୊͕͋Δ͚ͲҰ
    ॹʹઓͬͯ͘ΕΔͻͱ୳ͯ͠·͢

    View Slide