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

B932b972f9334d4d333224468f3f84d9?s=47 yyh-gl
January 23, 2020

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

DMM.go #1 登壇スライド

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

B932b972f9334d4d333224468f3f84d9?s=128

yyh-gl

January 23, 2020
Tweet

Transcript

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

  2. ࣗݾ঺հ 5XJUUFSɿ!ZZI@HMʢIPO%ʣ (JU)VCɿZZIHM ϓϥοτϑΥʔϜ෦
 όοΫΤϯυΤϯδχΞ (P%%%ΞʔΩςΫνϟ ΄Μͩ

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

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

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

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

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

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

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

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

  11. 11 ͭΒ͍ ͩΔ͍ ΍ͩ ΄͛ʔ

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

  13. >> ϞοΫಠΓา͖໰୊ w࠷ॳ͸࢓༷௨ΓͩͬͨϞοΫ͕
 ͍͔ͭ͠࢓༷͔Β֎ΕɺಠΓา͖࢝͠ΊΔݱ৅ wʮϩʔΧϧͰ͸ಈ͍͍ͯͨͷʹʜʯͱݴ͍ग़͢
 ਓ͕૿͑Δ 13

  14. >> ͳͥ࢓༷͕ͣΕͯ͘Δʁ wଟ͘ͷ৔߹ɺϨεϙϯε͚ͩΛݟͯϞοΫΛ࡞Δ w ࣾ֎γεςϜͷ৔߹ɺ಺෦࣮૷͕Ͳ͏ͳͬͯΔ͔͸
 جຊతʹ஌Δज़͕ͳ͍ w ʢࣾ಺ͷʣυΩϡϝϯτʹ࢓༷ͳΜͯ͋Γ͑ͳ͍ʢܾΊ͚ͭʣ wਓ͸ΈΜͳϛεΛ͢Δ wϞοΫͷίʔυ͸͓Ζ͔ͦʹ͞Ε͕ͪ

    w zಈ͚͹0,zͷਫ਼ਆ wΊΜͲ͍ 14
  15. >> ͳͥ࢓༷͕ͣΕͯ͘Δʁ wଟ͘ͷ৔߹ɺϨεϙϯε͚ͩΛݟͯϞοΫΛ࡞Δ w ࣾ֎γεςϜͷ৔߹ɺ಺෦࣮૷͕Ͳ͏ͳͬͯΔ͔͸
 جຊతʹ஌Δज़͕ͳ͍ w ʢࣾ಺ͷʣυΩϡϝϯτʹ࢓༷ͳΜͯ͋Γ͑ͳ͍ʢܾΊ͚ͭʣ wਓ͸ΈΜͳϛεΛ͢Δ wϞοΫͷίʔυ͸͓Ζ͔ͦʹ͞Ε͕ͪ

    w zಈ͚͹0,zͷਫ਼ਆ wΊΜͲ͍ 15 ৽ͨͳγεςϜ͕஀ੜ
  16. >> ϞοΫಠΓา͖໰୊΁ͷରԠࡦ wΊͪΌͪ͘ΌؾΛ͚ͭͯϞοΫΛखಈ࡞੒ w ίʔυϨϏϡʔؤுΔ w ͱʹ͔͘ؤுΔ w ͱʹ͔͘ؾΛ͚ͭΔ wϞοΫίʔυΛࣗಈੜ੒

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

    w 0QFO"1*ʢ4XBHHFSʣ w7JEFP$BTTFUUF3FDPSEFS 17
  18. >> 7$3ʢ7JEFP$BTTFUUF3FDPSEFSʣ w௨৴಺༰Λอଘ͠ɺ࠶ੜ͢ΔϥΠϒϥϦ܈ͷ૯শ w ςετʹ͓͍ͯɺ"1*ϦΫΤετͷ௨৴ͷ಺༰Λ
 อଘ͠ɺ࣍ճҎ߱ͦͷอଘ಺༰ʢϨεϙϯεʣΛ
 ࢖͍ճ͢͜ͱ͕Մೳ w 3VCZ੡ͷWDSWDS͕༗໊ 18

    ࣮֬ʹ ࣮ࡍͷϨεϙϯεΛϞοΫԽՄೳ a͔͠΋ɺࣗಈੜ੒
  19. >> (Pʹ͓͚Δ7$3ϥΠϒϥϦ wEOBFPOHPWDSʢ⭐ʣ w$PNCP4USJLF)2WDSHPʢ⭐ʣ wTFCPSBNBHPWDSʢ⭐ʣ wSQDSFQMBZʢ⭐ʣ w H31$༻ w HPPHMFBQJTHPPHMFDMPVEHPʹแؚ͞ΕΔ


    ύοέʔδͳͷͰHPPHMFDMPVEHPͱͯ͠ͷελʔ਺ 19
  20. >> (Pʹ͓͚Δ7$3ϥΠϒϥϦ wEOBFPOHPWDSʢ⭐ʣ w$PNCP4USJLF)2WDSHPʢ⭐ʣ wTFCPSBNBHPWDSʢ⭐ʣ wSQDSFQMBZʢ⭐ʣ w H31$༻ w HPPHMFBQJTHPPHMFDMPVEHPʹแؚ͞ΕΔ


    ύοέʔδͳͷͰHPPHMFDMPVEHPͱͯ͠ͷελʔ਺ 20
  21. >> EOBFPOHPWDS wWDSWDSʹΠϯεύΠΞ͞Εͯ࡞ΒΕͨϥΠϒϥϦ wSQDSFQMBZΛআ͚͹࠷΋ελʔ਺͕ଟ͍ wIUUQ$MJFOUͷ5SBOTQPSUʹHPWDSͰ༻ҙ͞Εͨ
 5SBOTQPSUʢIUUQ3PVOE5SJQQFSʣΛ
 ࢖༻͢Δ͜ͱͰϨεϙϯεͷอଘΛ࣮ݱ 21

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

    w $BTTFUF w อଘͨ͠Ϩεϙϯεͷ಺༰͕ೖͬͯΔϑΝΠϧ w ZBNMϑΝΠϧ 22
  23. >> ࣮૷ྫ wIUUQ$MJFOUΛ֎෦͔Β஫ೖͰ͖ΔΑ͏ʹ͢Δ w HBUFXBZ͸֎෦"1*ͱͷ΍ΓͱΓΛந৅Խͨ͠΋ͷ
 ʢσʔλιʔε͕"1*ͷSFQPTJUPSZͱ͍͏Πϝʔδʣ 23

  24. >> ࣮૷ྫ wIUUQ$MJFOUΛ֎෦͔Β஫ೖͰ͖ΔΑ͏ʹ͢Δ w HBUFXBZ͸֎෦"1*ͱͷ΍ΓͱΓΛந৅Խͨ͠΋ͷ
 ʢσʔλιʔε͕"1*ͷSFQPTJUPSZͱ͍͏Πϝʔδʣ 24

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

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

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

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

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

  30. >> ϦΫΤετͷಉҰੑʹ͍ͭͯ wσϑΥϧτͰ͸Լهύϥϝʔλ͕ಉ͡Ͱ͋Ε͹
 ಉҰͷϦΫΤετͱͯ͠൑ఆ w )551ϝιου w ϦΫΤετઌͷ63- wϧʔϧ͸ΧελϜՄೳ w

    4FU.BUDIFS ʹΑΓಉҰੑνΣοΫͷํࣜΛ
 มߋՄೳ 30 ʮಉ͡ʯϦΫΤετ͸อଘ಺༰Λ࢖͍ճ͕͢ʮಉ͡ʯͷ৚݅͸ʁʁ
  31. >> อଘ಺༰Λमਖ਼͢Δ৔߹ wϨεϙϯεͷमਖ਼͕ඞཁʹͳͬͨ৔߹͸ΧηοτΛ
 ফͤ͹0, w HPWDSͰ͸ɺΧηοτ͕ଘࡏ͠ͳ͍৔߹ʹ
 Ϩεϙϯε಺༰ͷอଘॲཧΛ࣮ߦ w ZBNMΛ௚઀मਖ਼ w

    ಡΈ΍͍͢ZBNMϑΝΠϧͳͷͰखͰ௚͢ͷ΋
 Ͱ͖ͳ͘͸ͳ͍Ͱ͕͢ɺ͋·Γ͓͢͢Ί͸͠·ͤΜ 31
  32. >> ฐνʔϜͰͷӡ༻ํ๏ w45(؀ڥͷϨεϙϯεΛอଘ wςετؔ਺ʢ5FTU9YY ʣ͝ͱʹΧηοτΛ༻ҙ w$BTTFUF͸ϧʔτσΟϨΫτϦ഑Լͷ
 DBTTFUUFTσΟϨΫτϦ಺ʹ
 อଘ 32

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

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

  35. >> σϝϦοτ wϞοΫΛमਖ਼͢Δ͍͞ʹɺ
 ༗ޮͳΞΫηετʔΫϯΛऔಘ͠ͳ͓͢ඞཁ͕͋Δ ˠجຊతʹϞοΫमਖ਼ʹ֎෦γεςϜ͕࢓༷มߋ͢Δͱ͖ͳͷͰ
 ɹଟൃ͢Δࣄ৅Ͱ͸ͳ͍ wΧηοτ୯ҐͰϨεϙϯε͕อଘ͞ΕΔ
 ˠΧηοτ಺ͷͻͱͭͷϦΫΤετʹ͓͍ͯ
 ɹϨεϙϯεͷอଘʹࣦഊͨ͠৔߹ɺ
 ɹશϦΫΤετΛอଘ͠ͳ͓͢ඞཁ͕͋Δ


    ʢճආࡦ͕ͳ͍Θ͚Ͱ͸ͳ͍͕ʜʣ 35
  36. >> Χηοτ୯ҐͰͷϨεϙϯεอଘ wΧηοτ಺ʹ͸
 ෳ਺ͷϦΫΤετ͕
 อଘ͞Ε͍ͯΔ w ਖ਼ৗܥ w ҟৗܥ 36

    ҟৗܥͷϦΫΤετ ਖ਼ৗܥͷϦΫΤετ
  37. >> Χηοτ୯ҐͰͷϨεϙϯεอଘ wҟৗܥͷϦΫΤετͷΈ
 मਖ਼ͨ͘͠ͳͬͨ৔߹ wΧηοτ୯ҐͰ࡟আ w ਖ਼ৗܥͷอଘ಺༰΋ফ͑Δ w ݸผͰमਖ਼͢ΔͳΒ
 ZBNMΛ৮Δ͔͠ͳ͍

    37 ҟৗܥͷϦΫΤετ ਖ਼ৗܥͷϦΫΤετ ࢓༷มߋʹؾͮ͘
 ػձʹͳΔͷͰϝϦοτʹͳΓ͑Δ
  38. >> ·ͱΊ wϞοΫΛ͍͔ͪΒखͰ࡞Δඞཁ͕ͳ͘ͳΔ w࣮ࡍͷϨεϙϯεΛอଘ͢ΔͷͰ
 ϞοΫͱ࣮γεςϜؒͰ࢓༷ͷࠩҟ͕ͳ͘ͳΔ wʮϩʔΧϧͰ͸ಈ͍ͨͷʹʜʯ͕ݮΔʂʢ͸ͣʣ 38 7$3͕࣮ݱ͢Δ࠷ߴͷ%9