Bonfire #5 で発表した内容です。 https://yj-meetup.connpass.com/event/113035/
弊社のアプリは2014年から運用していますが、5年の間にアプリにはテストを書かないと社内に宣言した事がありました。 そんなアプリも人が入れ替わり立ち代りして、現在どうなったのかをお話ししました。
ςετॻ͔ͳ͍ͱએݴ͍ͯͨ͠ΞϓϦͷݱࡏ#POpSFJ04ZKCPOpSF!1
View Slide
1SPpMFstruct Profile {let name = "Kazuya Ueoka"let twitter = "@fromkk"let github = "fromkk"let qiita = "fromkk"let company = "Timers Inc."}•!2
ৼΓฦΓ!3
ৼΓฦΓ!4ॏͳΔஅϛεw ϦχϡʔΞϧΛ0CKFDUJWF$Ͱͬͯ͠·ͬͨw .7$Ͱಥ͖ਐΜͰ͠·ͬͨ IUUQTUFDICMPHUJNFSTJODDPNFOUSZOPU@NPEFSO@BSDIJUFDUVSFw ςετॻ͔ͳ͍ͱએݴͯ͠͠·ͬͨw ͳͲ༷ʑʜ
ৼΓฦΓ!5ॏͳΔஅϛεw ϦχϡʔΞϧΛ0CKFDUJWF$Ͱͬͯ͠·ͬͨw .7$Ͱಥ͖ਐΜͰ͠·ͬͨ IUUQTUFDICMPHUJNFSTJODDPNFOUSZOPU@NPEFSO@BSDIJUFDUVSFw ςετॻ͔ͳ͍ͱએݴͯ͠͠·ͬͨw ͳͲ༷ʑʜ4XJGUʹ͍ͯͨ͠Β
ৼΓฦΓ!6ॏͳΔஅϛε4XJGUʹ͍ͯͨ͠Βૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠Βw ϦχϡʔΞϧΛ0CKFDUJWF$Ͱͬͯ͠·ͬͨw .7$Ͱಥ͖ਐΜͰ͠·ͬͨ IUUQTUFDICMPHUJNFSTJODDPNFOUSZOPU@NPEFSO@BSDIJUFDUVSFw ςετॻ͔ͳ͍ͱએݴͯ͠͠·ͬͨw ͳͲ༷ʑʜ
ৼΓฦΓ!7ॏͳΔஅϛε4XJGUʹ͍ͯͨ͠Βૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠ΒςετΛॻ͍͍ͯͨΒw ϦχϡʔΞϧΛ0CKFDUJWF$Ͱͬͯ͠·ͬͨw .7$Ͱಥ͖ਐΜͰ͠·ͬͨ IUUQTUFDICMPHUJNFSTJODDPNFOUSZOPU@NPEFSO@BSDIJUFDUVSFw ςετॻ͔ͳ͍ͱએݴͯ͠͠·ͬͨw ͳͲ༷ʑʜ
શʹϛεͬͨ!8
ͬͨࣄ!9
7*1&3w 7JFX *OUFSBDUPS 1SFTFOUFS &OUJUZ 3PVUFSͷ಄จࣈw ֤ϨΠϠʔΛ*OUFSGBDF 1SPUPDPMͰܨ͙ࣄͰૄ݁߹ʹw %*ͰΦϒδΣΫτΛࠩ͠ସ͑ΔࣄͰςετΛՄೳʹ!10
νΣοΩϯά!11νΣοΩϯάʢνΣοΫ͢Δ͜ͱʣͱɺ͢Ͱʹ͋Δ৴೦Λ֬ೝ͢Δͱ͍͏ಈػ͔Β࣮ࢪ͢ΔͷͰ͢ɻνΣοΩϯά֬ೝɺݕূɺଥੑ֬ೝͱ͍͏ϓϩηεʹͳΓ·͢ɻ͢ͰʹͦΕ͕ਖ਼͍͠ͱ৴͍ͯ͡Δͱ͖ʹɺνΣοΩϯάʹΑͬͯͦͷ৴೦Λ֬ೝ͠·͢ɻίʔυΛมߋͯ͜͠Ε·Ͱಉ͡Α͏ʹͯ͢ಈ࡞͢Δ͜ͱΛ͔֬Ί͍ͨͱ͖ʹɺࢲͨͪνΣοΫ͠·͢ɻςεςΟϯάʢςετ͢Δ͜ͱʣͱɺ৽͍͠ใΛݟ͚ͭΔͱ͍͏ಈػ͔Β࣮ࢪ͢ΔͷͰ͢ɻςεςΟϯά୳ࡧɺൃݟɺڀ໌ɺֶशͱ͍͏ϓϩηεʹͳΓ·͢ɻධՁ͢ΔͭΓͰɺ͋Δ͍ఆ֎ͷΛݟ͚ͭΔͭΓͰɺΛઃఆͯ͠ɺಈ͔͠ɺ؍͢Δͱ͖ʹɺࢲͨͪςετ͠·͢ɻIUUQTXXXJOGPRDPNKQOFXTUFTUJOHPSDIFDLJOH
4XJGU.PDL(FOFSBUPS9DPEF4PVSDF&EJUPS&YUFOTJPO4UVC4QZͷ࣮Λࣗಈੜͯ͘͠ΕΔ!12IUUQTHJUIVCDPNTFBOIFOSZ4XJGU.PDL(FOFSBUPS'PS9DPEF
νΣοΩϯάͷαϯϓϧ1U!13
νΣοΩϯάͷαϯϓϧ1U!14EFMFHBUFύλʔϯͷςετDMPTVSFͷςετ
λεΫσʔw ݄ݱࡏिؒεϓϦϯτw िؒͷΛ69όάमਖ਼ɺϦϑΝΫλϦϯάɺٕज़తෛ࠴ͷฦࡁͳͲͷҝʹ͏࣌ؒ!15
݁Ռ!16w ςετΛॻ͍͍ͯͨΒw ૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠Βw 4XJGUʹ͍ͯͨ͠Β
݁Ռ!17w ςετΛॻ͍͍ͯͨΒw ૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠Βw 4XJGUʹ͍ͯͨ͠Β
݁Ռ!18ˠ৽ػೳ7*1&3ʹͳͬͨw ςετΛॻ͍͍ͯͨΒw ૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠Βw 4XJGUʹ͍ͯͨ͠Β
݁Ռ!19ˠ࠷ۙͷίʔυʹ΄ͱΜͲςετΛॻ͍͍ͯΔw ςετΛॻ͍͍ͯͨΒw ૄ݁߹ͳΞʔΩςΫνϟʹ͍ͯͨ͠Βw 4XJGUʹ͍ͯͨ͠Βˠ৽ػೳ7*1&3ʹͳͬͨ
!20
!21ະղܾ՝w ·ͩ0CKFDUJWF$ͷίʔυ͕Ұ෦͍ͬͯΔw ݹ͍ίʔυʹ΄ͱΜͲςετ͕ແ͍ͷͰΞϯλονϟϒϧ
ࠓޙw ্࣭ҕһձͷൃதw &&ςετͷج൫Λߏங͢Δ༧ఆw কདྷతʹ2"ͷਓͨͪ Ұൠͷओ්Ͱ&&ςετ͕ॻ͚Δ༷ʹ͍ͨ͠!22
·ͱΊw ʑஅϛε͕͋ͬͨɺλεΫσʔͳͲΛར༻ͯ͠ண࣮ʹෛ࠴Λฦࡁதw ςετΛॻ͘ҝʹૄ݁߹ʹग़དྷΔΞʔΩςΫνϟΛબఆw ςετνΣοΩϯάΛްΊʹॻ͘ɻςετͷ༰ΑΓςετ͕ॻ͚͍ͯΔࣄ͕ॏཁɻ!23
ҎԼ࣌ؒ͋Ε!24
$*$%!25
$*$%!26w ·Ͱ+FOLJOTϏϧυˍಠࣗ৴αʔόʔΛߏஙw ʙ#JUSJTF
w J04"OESPJEʹಛԽͨ͠$*$%αʔϏεw ϫʔΫϑϩʔ͕(6*Ͱ؆୯ʹߏஙՄೳw ฐࣾͰͷݱࡏͷϓϥϯ&-*5&NP!27
8FCIPPLw 1VTI#SBODI"SDIJWF%FQMPZ #JUSJTF%FQMPZ(BUFw 1VMM3FRVFTUϢχοτςετ%BOHFSΛ࣮ߦw SFMFBTFϒϥϯν͕QVTI͞Εͨ߹"QQ4UPSF$POOFDUʹΞοϓϩʔυ!28
w ίʔυྔνΣοΫw λΠϙνΣοΫ DTQFMMw 9DPEFTVNNBSZw 4XJGUMJOUw -(5.!29
6*ςετw ֻ͕͔࣌ؒΔˍΑ͘ίέΔ ݪҼ༷ʑw ࠓఆظతʹ࣮ߦ͢Δ("4Λ࡞ͯ͠ɺਂʹൃՐ͢ΔτϦΨʔΛ࡞w ϩάΛ4ʹΞοϓϩʔυ!30
5FTU4VNNBSJFTw J04%$Ͱൃදͨ͠6*ςετͷεΫγϣΛ·ͱΊΔπʔϧw #JUSJTF্Ͱಈ࡞ͤͯ͞ੜͨ͠ը૾Λ4ʹΞοϓϩʔυ!31
13!32
• αʔόʔαΠυΤϯδχΞ (PHP, Golang, AWS)• AndroidΤϯδχΞ (Kotlin)• iOSΤϯδχΞ (Swift)TimersͰݱࡏΤϯδχΞશ৬छ࠾༻தʂ ৄ͘͠”Timers”Ͱݕࡧ
w Րʹ88%$पลΠϕϯτʹࢀՃ͢Δਓ͚ͷΠϕϯτΛ։࠵͠·͢w ݄ʙʹΞϝϦΧʹߦ͘༧ఆͷํ͕͍·ͨ͠Βੋඇ͝ࢀՃ͍ͩ͘͞ʂ!34IUUQTUJNFSTDPOOQBTTDPNFWFOU
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠#!35