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

VCR in Go:モック自動生成で楽しちゃう話

yyh_gl
January 23, 2020

VCR in Go:モック自動生成で楽しちゃう話

DMM.go #1 登壇スライド

ブログ↓
https://yyh-gl.github.io/tech-blog/blog/golang-vcr/

yyh_gl

January 23, 2020
Tweet

More Decks by yyh_gl

Other Decks in Technology

Transcript

  1. 7$3JO(PɿϞοΫࣗಈੜ੒Ͱָͪ͠Ό͏࿩

    View Slide

  2. ࣗݾ঺հ
    5XJUUFSɿ!ZZI@HMʢIPO%ʣ
    (JU)VCɿZZIHM
    ϓϥοτϑΥʔϜ෦

    όοΫΤϯυΤϯδχΞ
    (P%%%ΞʔΩςΫνϟ
    ΄Μͩ

    View Slide

  3. 3
    ςετॻ͍͍ͯ·͔͢ʁ

    View Slide

  4. >> ֎෦γεςϜΛ࢖༻͢Δςετ
    w֎෦γεςϜ͕ఏڙ͢Δ"1*Λ࢖༻͢Δػձ͕૿Ճ
    w ଞࣾαʔϏε
    w ࣾ಺γεςϜ
    w ϚΠΫϩαʔϏε
    w֎෦γεςϜΛϞοΫԽ
    4

    View Slide

  5. 5
    ϞοΫͷ؅ཧ͋Δ͋Δ

    View Slide

  6. 6
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ

    View Slide

  7. 7
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ
    ͕ଓ͖

    View Slide

  8. 8
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ
    ͱͯ΋ਓ͕ಡΊͨίʔυ͡Όͳ͘ͳΔ
    ͕ଓ͖

    View Slide

  9. 9
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ
    ͱͯ΋ਓ͕ಡΊͨίʔυ͡Όͳ͘ͳΔ
    ͕ଓ͖
    ͍͔ͭ͠ຊདྷͷ࢓༷ͱࠩҟ͕ੜ·Ε͸͡ΊΔ

    View Slide

  10. 10
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ
    ͱͯ΋ਓ͕ಡΊͨίʔυ͡Όͳ͘ͳΔ
    ͕ଓ͖
    ͍͔ͭ͠ຊདྷͷ࢓༷ͱࠩҟ͕ੜ·Ε͸͡ΊΔ
    aϞοΫͷ؅ཧͭΒ͍

    View Slide

  11. 11

    ͭΒ͍
    ͩΔ͍
    ΍ͩ
    ΄͛ʔ

    View Slide

  12. 12
    ϞοΫͷ؅ཧ͋Δ͋Δ
    ʮϞοΫ͔ͩΒಈ͚͹͍͔ͬʯ
    ͱͯ΋ਓ͕ಡΊͨίʔυ͡Όͳ͘ͳΔ
    ͕ଓ͖
    ͍͔ͭ͠ຊདྷͷ࢓༷ͱࠩҟ͕ੜ·Ε͸͡ΊΔ

    View Slide

  13. >> ϞοΫಠΓา͖໰୊
    w࠷ॳ͸࢓༷௨ΓͩͬͨϞοΫ͕

    ͍͔ͭ͠࢓༷͔Β֎ΕɺಠΓา͖࢝͠ΊΔݱ৅
    wʮϩʔΧϧͰ͸ಈ͍͍ͯͨͷʹʜʯͱݴ͍ग़͢

    ਓ͕૿͑Δ
    13

    View Slide

  14. >> ͳͥ࢓༷͕ͣΕͯ͘Δʁ
    wଟ͘ͷ৔߹ɺϨεϙϯε͚ͩΛݟͯϞοΫΛ࡞Δ
    w ࣾ֎γεςϜͷ৔߹ɺ಺෦࣮૷͕Ͳ͏ͳͬͯΔ͔͸

    جຊతʹ஌Δज़͕ͳ͍
    w ʢࣾ಺ͷʣυΩϡϝϯτʹ࢓༷ͳΜͯ͋Γ͑ͳ͍ʢܾΊ͚ͭʣ
    wਓ͸ΈΜͳϛεΛ͢Δ
    wϞοΫͷίʔυ͸͓Ζ͔ͦʹ͞Ε͕ͪ
    w zಈ͚͹0,zͷਫ਼ਆ
    wΊΜͲ͍
    14

    View Slide

  15. >> ͳͥ࢓༷͕ͣΕͯ͘Δʁ
    wଟ͘ͷ৔߹ɺϨεϙϯε͚ͩΛݟͯϞοΫΛ࡞Δ
    w ࣾ֎γεςϜͷ৔߹ɺ಺෦࣮૷͕Ͳ͏ͳͬͯΔ͔͸

    جຊతʹ஌Δज़͕ͳ͍
    w ʢࣾ಺ͷʣυΩϡϝϯτʹ࢓༷ͳΜͯ͋Γ͑ͳ͍ʢܾΊ͚ͭʣ
    wਓ͸ΈΜͳϛεΛ͢Δ
    wϞοΫͷίʔυ͸͓Ζ͔ͦʹ͞Ε͕ͪ
    w zಈ͚͹0,zͷਫ਼ਆ
    wΊΜͲ͍
    15
    ৽ͨͳγεςϜ͕஀ੜ

    View Slide

  16. >> ϞοΫಠΓา͖໰୊΁ͷରԠࡦ
    wΊͪΌͪ͘ΌؾΛ͚ͭͯϞοΫΛखಈ࡞੒
    w ίʔυϨϏϡʔؤுΔ
    w ͱʹ͔͘ؤுΔ
    w ͱʹ͔͘ؾΛ͚ͭΔ
    wϞοΫίʔυΛࣗಈੜ੒
    w 0QFO"1*ʢ4XBHHFSʣ
    w 7JEFP$BTTFUUF3FDPSEFS
    16

    View Slide

  17. >> ϞοΫಠΓา͖໰୊΁ͷରԠࡦ
    wΊͪΌͪ͘ΌؾΛ͚ͭͯϞοΫΛखಈ࡞੒
    w ίʔυϨϏϡʔؤுΔ
    w ͱʹ͔͘ؤுΔ
    w ͱʹ͔͘ؾΛ͚ͭΔ
    wϞοΫίʔυΛࣗಈੜ੒
    w 0QFO"1*ʢ4XBHHFSʣ
    w7JEFP$BTTFUUF3FDPSEFS
    17

    View Slide

  18. >> 7$3ʢ7JEFP$BTTFUUF3FDPSEFSʣ
    w௨৴಺༰Λอଘ͠ɺ࠶ੜ͢ΔϥΠϒϥϦ܈ͷ૯শ
    w ςετʹ͓͍ͯɺ"1*ϦΫΤετͷ௨৴ͷ಺༰Λ

    อଘ͠ɺ࣍ճҎ߱ͦͷอଘ಺༰ʢϨεϙϯεʣΛ

    ࢖͍ճ͢͜ͱ͕Մೳ
    w 3VCZ੡ͷWDSWDS͕༗໊
    18
    ࣮֬ʹ
    ࣮ࡍͷϨεϙϯεΛϞοΫԽՄೳ
    a͔͠΋ɺࣗಈੜ੒

    View Slide

  19. >> (Pʹ͓͚Δ7$3ϥΠϒϥϦ
    wEOBFPOHPWDSʢ⭐ʣ
    w$PNCP4USJLF)2WDSHPʢ⭐ʣ
    wTFCPSBNBHPWDSʢ⭐ʣ
    wSQDSFQMBZʢ⭐ʣ
    w H31$༻
    w HPPHMFBQJTHPPHMFDMPVEHPʹแؚ͞ΕΔ

    ύοέʔδͳͷͰHPPHMFDMPVEHPͱͯ͠ͷελʔ਺
    19

    View Slide

  20. >> (Pʹ͓͚Δ7$3ϥΠϒϥϦ
    wEOBFPOHPWDSʢ⭐ʣ
    w$PNCP4USJLF)2WDSHPʢ⭐ʣ
    wTFCPSBNBHPWDSʢ⭐ʣ
    wSQDSFQMBZʢ⭐ʣ
    w H31$༻
    w HPPHMFBQJTHPPHMFDMPVEHPʹแؚ͞ΕΔ

    ύοέʔδͳͷͰHPPHMFDMPVEHPͱͯ͠ͷελʔ਺
    20

    View Slide

  21. >> EOBFPOHPWDS
    wWDSWDSʹΠϯεύΠΞ͞Εͯ࡞ΒΕͨϥΠϒϥϦ
    wSQDSFQMBZΛআ͚͹࠷΋ελʔ਺͕ଟ͍
    wIUUQ$MJFOUͷ5SBOTQPSUʹHPWDSͰ༻ҙ͞Εͨ

    5SBOTQPSUʢIUUQ3PVOE5SJQQFSʣΛ

    ࢖༻͢Δ͜ͱͰϨεϙϯεͷอଘΛ࣮ݱ
    21

    View Slide

  22. >> ࣮૷ྫ
    wɺɺɺͷલʹ༻ޠઆ໌
    w 3FDPSEFS
    w ϨεϙϯεΛه࿥͢Δ΍ͭ
    w ࣮ଶ͸IUUQ3PVOE5SJQQFSΠϯλʔϑΣʔεΛຬͨͨ͠

    ߏ଄ମ
    w $BTTFUF
    w อଘͨ͠Ϩεϙϯεͷ಺༰͕ೖͬͯΔϑΝΠϧ
    w ZBNMϑΝΠϧ
    22

    View Slide

  23. >> ࣮૷ྫ
    wIUUQ$MJFOUΛ֎෦͔Β஫ೖͰ͖ΔΑ͏ʹ͢Δ
    w HBUFXBZ͸֎෦"1*ͱͷ΍ΓͱΓΛந৅Խͨ͠΋ͷ

    ʢσʔλιʔε͕"1*ͷSFQPTJUPSZͱ͍͏Πϝʔδʣ
    23

    View Slide

  24. >> ࣮૷ྫ
    wIUUQ$MJFOUΛ֎෦͔Β஫ೖͰ͖ΔΑ͏ʹ͢Δ
    w HBUFXBZ͸֎෦"1*ͱͷ΍ΓͱΓΛந৅Խͨ͠΋ͷ

    ʢσʔλιʔε͕"1*ͷSFQPTJUPSZͱ͍͏Πϝʔδʣ
    24

    View Slide

  25. >> ࣮૷ྫ
    w3FDPSEFSͷੜ੒͓ΑͼIUUQ$MJFOU΁ͷࠩ͠ࠐΈ
    25
    ˢ͜͜Ͱ༻ҙͨ͠IUUQ$MJFOUΛ௨ΔϨεϙϯε͸શͯอଘ͞ΕΔ

    View Slide

  26. >> ࣮૷ྫ
    w3FDPSEFSͷੜ੒͓ΑͼIUUQ$MJFOU΁ͷࠩ͠ࠐΈ
    26
    ˢ͜͜Ͱ༻ҙͨ͠IUUQ$MJFOUΛ௨ΔϨεϙϯε͸શͯอଘ͞ΕΔ

    View Slide

  27. >> ࣮૷ྫ
    w3FDPSEFSͷੜ੒͓ΑͼIUUQ$MJFOU΁ͷࠩ͠ࠐΈ
    27
    ˢ͜͜Ͱ༻ҙͨ͠IUUQ$MJFOUΛ௨ΔϨεϙϯε͸શͯอଘ͞ΕΔ

    View Slide

  28. >> ࣮ࡍʹςετΛճͯ͠ΈΔͱʜ
    w$BTTFUFʹϨεϙϯε಺༰͕อଘ͞Ε͍ͯΔ
    28

    View Slide

  29. >> ࣮ࡍʹςετΛճͯ͠ΈΔͱʜ
    w$BTTFUFʹϨεϙϯε಺༰͕อଘ͞Ε͍ͯΔ
    29

    View Slide

  30. >> ϦΫΤετͷಉҰੑʹ͍ͭͯ
    wσϑΥϧτͰ͸Լهύϥϝʔλ͕ಉ͡Ͱ͋Ε͹

    ಉҰͷϦΫΤετͱͯ͠൑ఆ
    w )551ϝιου
    w ϦΫΤετઌͷ63-
    wϧʔϧ͸ΧελϜՄೳ
    w 4FU.BUDIFS
    ʹΑΓಉҰੑνΣοΫͷํࣜΛ

    มߋՄೳ
    30
    ʮಉ͡ʯϦΫΤετ͸อଘ಺༰Λ࢖͍ճ͕͢ʮಉ͡ʯͷ৚݅͸ʁʁ

    View Slide

  31. >> อଘ಺༰Λमਖ਼͢Δ৔߹
    wϨεϙϯεͷमਖ਼͕ඞཁʹͳͬͨ৔߹͸ΧηοτΛ

    ফͤ͹0,
    w HPWDSͰ͸ɺΧηοτ͕ଘࡏ͠ͳ͍৔߹ʹ

    Ϩεϙϯε಺༰ͷอଘॲཧΛ࣮ߦ
    w ZBNMΛ௚઀मਖ਼
    w ಡΈ΍͍͢ZBNMϑΝΠϧͳͷͰखͰ௚͢ͷ΋

    Ͱ͖ͳ͘͸ͳ͍Ͱ͕͢ɺ͋·Γ͓͢͢Ί͸͠·ͤΜ
    31

    View Slide

  32. >> ฐνʔϜͰͷӡ༻ํ๏
    w45(؀ڥͷϨεϙϯεΛอଘ
    wςετؔ਺ʢ5FTU9YY
    ʣ͝ͱʹΧηοτΛ༻ҙ
    w$BTTFUF͸ϧʔτσΟϨΫτϦ഑Լͷ

    DBTTFUUFTσΟϨΫτϦ಺ʹ

    อଘ
    32

    View Slide

  33. >> ϝϦοτ
    wϞοΫίʔυΛࣗಈੜ੒Ͱ͖Δ
    wϞοΫͱ࣮γεςϜؒͷ࢓༷ͷͣΕ͕ͳ͘ͳͬͨ
    wϞοΫͷϦϙδτϦͱίϯςφΠϝʔδΛফͤͨ
    w EPDLFSDPNQPTFͷىಈΛߴ଎Խ
    wςετʹཁ͢Δ࣌ؒΛ୹ॖ
    w )551௨৴ˠϑΝΠϧಡΈࠐΈ
    33

    View Slide

  34. >> ςετ࣌ؒͷ୹ॖ
    34
    ॳճ
    ճ໨Ҏ߱

    View Slide

  35. >> σϝϦοτ
    wϞοΫΛमਖ਼͢Δ͍͞ʹɺ

    ༗ޮͳΞΫηετʔΫϯΛऔಘ͠ͳ͓͢ඞཁ͕͋Δ
    ˠجຊతʹϞοΫमਖ਼ʹ֎෦γεςϜ͕࢓༷มߋ͢Δͱ͖ͳͷͰ

    ɹଟൃ͢Δࣄ৅Ͱ͸ͳ͍
    wΧηοτ୯ҐͰϨεϙϯε͕อଘ͞ΕΔ

    ˠΧηοτ಺ͷͻͱͭͷϦΫΤετʹ͓͍ͯ

    ɹϨεϙϯεͷอଘʹࣦഊͨ͠৔߹ɺ

    ɹશϦΫΤετΛอଘ͠ͳ͓͢ඞཁ͕͋Δ

    ʢճආࡦ͕ͳ͍Θ͚Ͱ͸ͳ͍͕ʜʣ
    35

    View Slide

  36. >> Χηοτ୯ҐͰͷϨεϙϯεอଘ
    wΧηοτ಺ʹ͸

    ෳ਺ͷϦΫΤετ͕

    อଘ͞Ε͍ͯΔ
    w ਖ਼ৗܥ
    w ҟৗܥ
    36
    ҟৗܥͷϦΫΤετ
    ਖ਼ৗܥͷϦΫΤετ

    View Slide

  37. >> Χηοτ୯ҐͰͷϨεϙϯεอଘ
    wҟৗܥͷϦΫΤετͷΈ

    मਖ਼ͨ͘͠ͳͬͨ৔߹
    wΧηοτ୯ҐͰ࡟আ
    w ਖ਼ৗܥͷอଘ಺༰΋ফ͑Δ
    w ݸผͰमਖ਼͢ΔͳΒ

    ZBNMΛ৮Δ͔͠ͳ͍
    37
    ҟৗܥͷϦΫΤετ
    ਖ਼ৗܥͷϦΫΤετ
    ࢓༷มߋʹؾͮ͘

    ػձʹͳΔͷͰϝϦοτʹͳΓ͑Δ

    View Slide

  38. >> ·ͱΊ
    wϞοΫΛ͍͔ͪΒखͰ࡞Δඞཁ͕ͳ͘ͳΔ
    w࣮ࡍͷϨεϙϯεΛอଘ͢ΔͷͰ

    ϞοΫͱ࣮γεςϜؒͰ࢓༷ͷࠩҟ͕ͳ͘ͳΔ
    wʮϩʔΧϧͰ͸ಈ͍ͨͷʹʜʯ͕ݮΔʂʢ͸ͣʣ
    38
    7$3͕࣮ݱ͢Δ࠷ߴͷ%9

    View Slide