A build pipeline tool written in go
ϏϧυύΠϓϥΠϯπʔϧΛGoͰ࡞ͬͨGoCon 2014 Autumn@naokiainoyahttps://github.com/tenntenn/gopher-stickers/blob/master/png/28.png
View Slide
ࣗݾհ૬୩ थ ainoya~2013.09 mixi~ݱࡏ ϦΫϧʔτςΫϊϩδʔζ APιϦϡʔγϣϯGओͳࣄ:ɹ ৽ٕज़ͷಋೖݕূͳͲ
IUUQBUMSFDSVJUUFDIDPKQCMPHIUUQBJOPZBJPXBMUFS“ϏϧυύΠϓϥΠϯπʔϧ”
πʔϧͷػೳ• CIͰͷϏϧυύΠϓϥΠϯͷ࣮ߦ੍ޚΛ͢Δπʔϧ• Jenkinsʹ͋ΔϏϧυύΠϓ ϥΠϯϓϥάΠϯͷସ• ઃఆϑΝΠϧ(YAMLܗࣜ)ʹ δϣϒ(࣮ߦ୯Ґ)ͷॲཧ༰ͱ δϣϒͷ࣮ߦॱংΛهड़
πʔϧͷػೳ• CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ༰ͱॱংΛهड़
GoͰॻ͍ͨཧ༝HPSPVUJOFͰδϣϒ࣮ߦDIBOOFMͰ࣮ߦ݁ՌΛ࣍ʹ͑ΔDIBOOFM͔Βϝοηʔδड৴ͨ͠Β࣮ߦchannel/goroutineͰ͍͍ײ͡Ͱॻ͚ͦ͏
GoͰॻ͍ͨཧ༝• όΠφϦ୯ମͰՄೳ• werckerͰΫϩείϯύΠϧˠ GitHub ReleasesͷΞοϓϩʔυ·Ͱ ϫϯΫϦοΫͰ• motemen/ghqΛࢀߟʹIUUQTHJUIVCDPNXBMUFSDEXBMUFSCMPCNBTUFSXFSDLFSZNM
ͦͷଞtipsϓϩδΣΫτߏ• coreos/etcdΛࢀߟʹͨ͠• {$project-root}/${package-name}/ҎԼʹ .goϑΝΠϧΛஔ͍ͯ͘͠ϧʔϧͰ• Ϣχοτςετຊମͱಉ͡σΟϨΫτϦஔ• build/testshell scriptͰhttps://github.com/walter-cd/walter
ͦͷଞtipsύοέʔδཧ• ࠷ॳsubmoduleͰཧ• ґଘ͕૿͑ͯอकͮ͠Β͘ͳͬͨ• ࠓGodepΛར༻• /Godeps/Godeps.jsonʹґଘؔهड़https://github.com/tools/godep
ͦͷଞtipsϩάग़ྗ• ༻్ʹ߹͏ϩάग़ྗϥΠϒϥϦ͕ͳ͔ͬͨ• ଞͷϓϩδΣΫτݢฒΈࣗલͰ༻ҙ• golang/glogΛforkͯ͠ϩάϑΥʔϚοτΛม͑ͯར༻
GoͰॻ͍ͨॴײ
“golang way”• "Is Go an object-oriented language?" ɹɹɹɹɹɹɹɹɹɹɹ-- "yes and no"• No type hierarchy• Interfaces can be very lightweight https://golang.org/doc/faq#Is_Go_an_object-oriented_language
“golang way”• "Share memory by communicating, don't communicate by sharing memory.”• channelͰॻ͍ͯΈΔ• ॻ͖ͮΒͦ͏ͩͬͨΒSync.MutexIUUQTDPEFHPPHMFDPNQHPXJLJXJLJ.VUFY0S$IBOOFMIUUQTPOJBDPEFTXPSEQSFTTDPNDIBOOFMTWTTZODQBDLBHF
࠷ޙʹ• walterͱ͍͏ϏϧυύΠϓϥΠϯπʔϧΛGoͰॻ͍ͨ• όΠφϦָ͕• goroutine/channelͰδϣϒؒͷϝοηʔδύογϯάΛ͍͍ײ͡ʹ• ·ͩશવͰ͖ͯͳ͍ɽҾ͖ଓ͖ػೳڧԽΛߦ͍͖ͬͯ·͢• ΤϥʔϋϯυϦϯάڧԽetc..• YAMLܗࣜͷઃఆϑΝΠϧΛΊ͍ͨ DSLΛGoͰͲ͏࣮͢Δ͔ߟ͑த