Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました
Clean Test CodeRevised@willnet
View Slide
Έͳ͞Μςετॻ͍ͯ·͔͢ʁ
͜͜Ͱશһख্͕͕Δ༧ఆ✋
ςετॻ͘ͷָ͍͠ਓʁ
͜͜Ͱશһ͕Λ෬ͤΔ༧ఆ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁw ͨ·ʹ$*͚ͩͰίέΔςετw ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղಡw ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁw ͨ·ʹ$*͚ͩͰίέΔςετw ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղಡw ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷطଘͷςετίʔυमਖ਼͕ͭΒ͍
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁw ͨ·ʹ$*͚ͩͰίέΔςετw ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυw ఆٛΛҰͭมߋͨ͠ΒେྔͷAࠓ͢͜ͱ
Մಡੑͷߴ͍ίʔυΛमਖ਼͢ΔͳΒਏ͘ͳ͍ͣʜ
8F`SFOPUIJSJOHҎલɺՄಡੑͷߴ͍ςετίʔυͷॻ͖ํʹ͍ͭͯ͠·ͨ͠https://speakerdeck.com/willnet/clean-test-code
3BJMT%FWFMPQFST.FFUVQӫ͑͋ΔୈҰճʂ
ൃද͔Βܦͪ಄͕ཧ͞Ε͖ͯͨͷͰͬͱ͍͍ײ͡ͷઆ໌͕Ͱ͖ͦ͏
͔͜͜Βຊ
ࠓ$MFBO5FTU$PEF Մಡੑͷߴ͍ςετίʔυʹ͍ͭͯ͠·͢
Ͳ͏͍͏ঢ়ଶͩͱʮՄಡੑͷߴ͍ςετίʔυʯͱݴ͑Δͷ͔
ཧͷ͕࢟Θ͔Βͳ͍ͱमਖ਼͠Α͏͕ͳ͍ʜ
ʹෛ୲Λ͔͚ͳ͍ςετίʔυՄಡੑ͕ߴ͍
ͨͪςετίʔυΛಡΉͱ͖ɺςετͷ༰ΛϝϞϦʹల։͍ͯ͠Δ
ϝϞϦʹల։͍ͯ͠Δཁૉw ςετͷ֓ཁw ςετͷࣄલ݅w खଓ͖w ظ͍ͯ͠Δ݁Ռ
αϯϓϧίʔυ
֓ཁ6TFSGVMMOBNF͕ͱ໊Λ͋ΘͤͨͷΛฦ͢͜ͱΛςετ͍ͯ͠Δ
લఏ݅pSTUOBNF͕`ਅҰ` MBTUOBNF͕`લౡ`ͷ6TFSΦϒδΣΫτΛੜ͠ɺVTFSͰࢀরͰ͖ΔΑ͏ʹ͍ͯ͠Δ
खଓ͖VTFSGVMMOBNFΛ࣮ߦ͢Δ
ظ͢Δ݁ՌbલౡਅҰ`͕Γͱͯ͠ฦΔ
ςετίʔυ͔ΒͷϚοϐϯά
͜ΕΒΛ͢ΜͳΓల։ͤ͞ͳ͍ཁૉ͕ଘࡏ͢Δ
ʹෛ୲Λ͔͚ΔཁૉΛഉআͨ͠ςετίʔυՄಡੑ͕ߴ͍
ʹෛ୲Λ͔͚Δཁૉͱ
ʹෛ୲Λ͔͚Δཁૉw આ໌ෆw είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δw είʔϓͷඈͼw ҉తͳґଘ͕͋Δw ఆٛΛ్தͰมߋ͢Δ
આ໌ෆ
આ໌ෆw EFTDSJCF DPOUFYU JUͷઆ໌͕ࡶɺ͘͠આ໌͕ͳ͍w ςετͷ֓ཁ͕͙͢ʹ͔ͭΊͣɺͷϦιʔεΛফඅ͢Δ
EFTDSJCFDPOUFYU͕୯ޠ͚ͩJUͷઆ໌͕লུͳʹΛͲ͏ςετ͍ͯ͠Δͷ͔͙͢ʹΘ͔Βͳ͍
จষΛಡΉ͚ͩͰ֓ཁ͕͙͢ʹΘ͔Δʂ
ཧEFTDSJCF DPOUFYU JUΛಡΊςετͷྲྀΕΛཧղͰ͖Δ͜ͱ
ݱͷςετίʔυͰJUͷઆ໌͕লུ͞Ε͕ͪ
ॻ͍ͨຊਓʹͱͬͯࣗ໌͔͠Εͳ͍͚Ͳɺޙੈͷਓ͕ͭΒ͍ͷͰৄ͘͠ॻ͖·͠ΐ͏
JUͷઆ໌Λলུͯ͠Α͍ͷɺϫϯϥΠφʔܗࣜͰ͔ͭTVCKFDUͱϚονϟ͕୯७ͳͷ͚ͩ
·ͱΊςετઆ໌͗͘͢͠Β͍Ͱͪΐ͏ͲΑ͍
είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ
͜͜Ͱ͍͏είʔϓͱ֘͢Δςετʹؔ͢ΔϒϩοΫͷ͜ͱͰ͢
ͷείʔϓ
ྫCͱDͰ͚ͩ͏ఆ͕ٛ͋Δ
%3:ʹ͢ΔͨΊʹҰ্ͭʹҠಈ
%3:ʹ͢ΔͨΊʹҰ্ͭʹҠಈ(
%3:ʹ͢ΔͨΊʹҰ্ͭʹҠಈ͜ͷఆٛࠓݟ͍ͯΔείʔϓͰΘΕ͍ͯΔͷ͔ʁΘΕ͍ͯͳ͍ͷ͔ʁͱ͍͏அ͕ඞཁʹͳΓͷϦιʔεΛফඅ͢Δ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯςΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯςΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ(
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯςΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁMFUͷԆ࣮ߦʹΑͬͯϚγϯ্Ͱ࣮ߦ͞Εͳͯ͘ͷϝϞϦফඅ͞ΕΔ
MFUͱMFUͲͪΒͰྑ͍߹MFU
·ͱΊείʔϓʹ͏ͷ͚ͩΛఆٛ͢Δ
είʔϓͷඈͼ
ΤσΟλΛεΫϩʔϧ͍ͯ͠ΔؒʹϝϞϦ͕شൃ͕ͪ͠
͜ͷྫ͏·͍ղܾࡦ͕ͳ͍ʼʻ͋Μ·ΓͭΒ͍Α͏ͳΒωετΛΊΔͷ͕Αͦ͞͏
ผϑΝΠϧͷఆٛΛߦͬͨΓདྷͨΓ͍ͯ͠ΔؒʹϝϞϦ͕شൃ͕ͪ͠
ϑΝΠϧதͰ͔͍ͬͯ͠ͳ͍ϔϧύϝιουͳΒ͜͏͍ͨ͠
·ͱΊείʔϓͷඈͼΛͰ͖ΔݶΓݮΒ͢ɻΉΛಘͳ͍ͱ͖ͳΔۙ͘͘ʹஔ͢Δ
҉తͳґଘ
TUBUVTSFBEZEPJOHEPOFͷҰํ͔͠ભҠͰ͖ͳ͍ͦΕҎ֎ͷભҠΛ͠Α͏ͱͨ͠ΒΤϥʔͱ͍͏༷
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍ͪΖΜςετέʔε͕Γͳ͍ͱ͍͏ͷ͋Δ͚ͲͦΕஔ͍͓͍͍ͯͯͩ͘͞
ςετίʔυதʹॻ͔Ε͍ͯͳ͍҉తͳ݅FYGBDUPSZ@CPUͷσϑΥϧτʹґଘͨ͠ίʔυΛॻ͘ͱɺࣄલ݅ͷѲ͕͘͠ͳΔ
ࣄલ݅Λਖ਼͘͠ѲͰ͖ͳ͍ঢ়ଶͰςετίʔυΛॻ͘ͱɺಡΈͮΒ͍ෆ҆ఆͳςετίʔυʹͳΔ
ͪΖΜσϑΥϧτΛมߋͨ͠Βͱ͍͏ͷ͋Δ
ඞཁͷͳ͍ϊΠζ
͋Δ͖࢟
͖ͬ͞ݴ͚ͬͨͲେࣄͳ͜ͱͳͷͰ͏Ұ
ςετʹ͍ؔͯ͠ΔΛɺςετίʔυ֎ʹॻ͘ͱͭΒ͍
ͭΒ͍
ςετʹ͍ؔͯ͠ΔΛɺςετίʔυ্Ͱաෆͳ͘໌ࣔతʹࢦఆ͢ΔͱಡΈ͍͢
͜ͷதʹͯ͢Λॻ͍͍ͯͩ͘͞ʂ
ͱ͍͑ɺ'BDUPSZ#PUͷσϑΥϧτʹґଘͨ͠ίʔυॻ͍ͯ͠·͍͕ͪ
ਪϓϥΫςΟεʮσϑΥϧτΛϥϯμϜʹ͢Δʯ
ඞཁͳͷઃఆʹෆ͕͋Δͱͱ͖Ͳ͖ςετ͕ίέΔΑ͏ʹͳΔ
2ϥϯμϜʹ͢Δͱςετ͕ίέͨͱ͖ʹ࠶ݱͰ͖ͳ͘ͳ͍ʁ
"ςετ͕ίέͨͱ͖ASTQFDTFFEAͷΑ͏ʹTFFEΛࢦఆ͢Δͱ࠶ݱͰ͖Δ
·ͱΊςετʹؔ࿈͍ͯ͠ΔΛͳΔ͘ςετίʔυʹدͤͯදݱ͢Δɻաෆ͕ͳ͍Α͏ʹ͢Δ
ఆٛΛ్தͰมߋ͢Δ
҉ͷґଘ
͜Εʹґଘͨ͠ςετίʔυ͕͢Ͱʹଘࡏ͢Δͱ͜ͷఆٛΛมߋ͠ʹ͘͘ͳΔ
ґଘΛͦͷ··ͬͯແཧΓςετΛॻ͍ͨྫ
σϑΥϧτ͕໌ࣔతͰͳ͍ͷͰɺGBDUPSZͷϑΝΠϧͱςετͷϑΝΠϧΛߦͬͨΓདྷͨΓ͢Δඞཁ͕͋Δ
ಈతʹσϑΥϧτΛม͑Δͱ࠷ऴతͳ͕͔ΓͮΒ͘ͳΔ
USBJUΛ͍ɺσϑΥϧτͰQPTU͕࡞ΒΕͳ͍Α͏ʹมߋ
ґଘ͍ͯ͠ΔͷΛ໌ࣔతʹͯ͠ςετίʔυຊମʹॻ͘͜ͱ͕Ͱ͖ͨ
ྫΛ͏গ͠
֎ଆͷείʔϓͰఆٛͨ͠QPTUΛVQEBUF͍ͯ͠ΔͷͰɺNFSHF͕ඞཁ
ͦΕͧΕͷείʔϓͰ໌ࣔతʹQPTUΛఆٛͨ͠΄͏͕Θ͔Γ͍͢
֎ଆͷMFUͰఆٛͨ͠QVCMJTI@BUΛ্ॻ͖ͨ͠Γ͍ͯ͠ͳ͔ͬͨΓ͢ΔͷͰɺϑΟϧλϦϯά͕ඞཁ
σϑΥϧτͷMFUΛΊͯͦΕͧΕͷDPOUFYUͰ໌ࣔతʹఆٛ͢ΔͱϑΟϧλϦϯά͕ෆཁʹͳΔ
֎ଆͷείʔϓͰఆٛͨ͠ͷΛଆͷείʔϓͰߋ৽͢Δͱʹෛ୲͕͔͔Δ
·ͱΊςετͷલఏ݅Λ্ॻ͖ͨ͠Γमਖ਼ͨ͠Γ͠ͳ͍
ʹෛ୲Λ͔͚Δཁૉʹ͍ͭͯҰ௨Γͨ͠
ʹෛ୲Λ͔͚Δཁૉ ࠶ܝw આ໌ෆw είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δw είʔϓͷඈͼw ҉తͳґଘ͕͋Δw ఆٛΛ్தͰมߋ͢Δ
ʹෛ୲Λ͔͚ΔཁૉΛෳؚΈ͕ͪͳͷ͕͋Δ
ͦΕʜ
TIBSFE@DPOUFYUTIBSFE@FYBNQMFT
͜ΕͰۤ͠ΜͩPSۤ͠ΜͰ͍Δਓ✋
%3:ʹ͍ͨ͠ཉٻ͕TIBSFEΛঌש͢Δ
TIBSFEΛ͏ͳΒɺ͜Ε·Ͱͨ͠ϓϥΫςΟεΛͰ͖Δ͔͗ΓΓࠐΈ·͠ΐ͏
આ໌͕Γͳ͍
Ṗͷґଘؔ
TIBSFE@FYBNQMFTͷఆٛͱςετίʔυΛߦͬͨΓདྷͨΓͯ͠ɺͰʮTIBSFE@FYBNQMFTΛΘͳ͔ͬͨͱ͖ͷίʔυʯʹม͠ͳ͍ͱͳʹΘ͔Βͳ͍
मਖ਼Ҋ
આ໌Λৄͯ͘͠͠ςετίʔυ͚ͩͰ֓ཁΛ͔ͭΊΔΑ͏ʹͨ͠
͔͠͠Ҿʹظ͢Δ݁ՌΛͯ͠ಈతʹJUͷ༰Λมߋ͢Δͱ͍͏͜ͱࣗମ͕ՄಡੑΛଛͶ͍ͯΔ݁ہఆٛΛಡΜͰϚʔδͷඞཁ͕͋Δ
ͨॻ͖ʹͯ͠Έͨ
ݟ͘͢ͳ͕ͬͨιʔείʔυߦ૿͑ͨ
όϥϯεΛߟ͑·͠ΐ͏
Լखʹ͚Δ͘Β͍ͳΒίϐϖͰͨॻ͖ͷ΄͏͕ίετ͍Ͱ͢
શମͷ·ͱΊw Մಡੑͷߴ͍ςετͷॻ͖ํʹ͍ͭͯઆ໌͠·ͨ͠w ςετίʔυΞϓϦέʔγϣϯίʔυͱͪΐͬͱ͚͓ͩ࡞๏͕ҧ͏w ΞϓϦέʔγϣϯίʔυ΄ͲՄಡੑ͕ߟྀ͞Ε͍ͯͳ͍งғؾw ςετίʔυΞϓϦέʔγϣϯΛߏ͢ΔίʔυͷҰ෦ͳͷͰɺಡΈ͍͢ίʔυʹ͍͖ͯ͠·͠ΐ͏Ͷ
͕࣌ؒ༨ͬͨΒࣗݾհ
Shinichi Maeshima!"#@netwillnet@willnethttp://blog.willnet.inWillnet Inc.
3BJMT%.ͨ͘͞Μొஃ͍ͯ͠·͢• Rails Developers Meetup #1• Rails Developers Meetup 2017• Rails Developers Meetup 2018 Day2• Rails Developers Meetup 2018 Day3 Extreme• Rails Developers Meetup 2019 ← New!
ٕज़ސۀΛ͍ͯ͠·͢
͓ࣄ4/4తͳͷΛ։ൃ͍ͯ͠·͢
8F`SFOPUIJSJOH
ސઌืू͍ͯ͠·ͤΜ
ͰԥΔ༻ҙͷ͋Δձࣾ͞Μྫ֎ͳͷͰ͓͕͚͍ͩ͘͞
)BQQZ5FTUJOH