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

ビルドパイプラインツールをGoで作った話

Naoki Ainoya
November 30, 2014

 ビルドパイプラインツールをGoで作った話

A build pipeline tool written in go

Naoki Ainoya

November 30, 2014
Tweet

More Decks by Naoki Ainoya

Other Decks in Programming

Transcript

  1. ϏϧυύΠϓϥΠϯπʔϧΛ
    GoͰ࡞ͬͨ࿩
    GoCon 2014 Autumn
    @naokiainoya
    https://github.com/tenntenn/gopher-stickers/blob/master/png/28.png

    View Slide

  2. ࣗݾ঺հ
    ૬໺୩ ௚थ ainoya
    ~2013.09 mixi
    ~ݱࡏ ϦΫϧʔτςΫϊϩδʔζ APιϦϡʔγϣϯG
    ओͳ࢓ࣄ:
    ɹ ৽ٕज़ͷಋೖݕূͳͲ

    View Slide

  3. IUUQBUMSFDSVJUUFDIDPKQCMPH
    IUUQBJOPZBJPXBMUFS
    “ϏϧυύΠϓϥΠϯπʔϧ”

    View Slide

  4. πʔϧͷػೳ
    • CIͰͷϏϧυύΠϓϥΠϯͷ࣮ߦ੍ޚΛ͢Δπʔϧ
    • Jenkinsʹ͋ΔϏϧυύΠϓ

    ϥΠϯϓϥάΠϯͷ୅ସ
    • ઃఆϑΝΠϧ(YAMLܗࣜ)ʹ

    δϣϒ(࣮ߦ୯Ґ)ͷॲཧ಺༰ͱ

    δϣϒͷ࣮ߦॱংΛهड़

    View Slide

  5. πʔϧͷػೳ
    • CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ಺༰ͱॱংΛهड़

    View Slide

  6. πʔϧͷػೳ
    • CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ಺༰ͱॱংΛهड़

    View Slide

  7. πʔϧͷػೳ
    • CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ಺༰ͱॱংΛهड़

    View Slide

  8. πʔϧͷػೳ
    • CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ಺༰ͱॱংΛهड़

    View Slide

  9. πʔϧͷػೳ
    • CIܥαʔϏεͬΆ͍ઃఆϑΝΠϧʹ࣮ߦ಺༰ͱॱংΛهड़

    View Slide

  10. GoͰॻ͍ͨཧ༝
    HPSPVUJOFͰδϣϒ࣮ߦ
    DIBOOFMͰ࣮ߦ݁ՌΛ࣍
    ʹ఻͑Δ
    DIBOOFM͔Βϝοηʔδ
    ड৴ͨ͠Β࣮ߦ
    channel/goroutineͰ͍͍ײ͡Ͱॻ͚ͦ͏

    View Slide

  11. GoͰॻ͍ͨཧ༝
    • όΠφϦ୯ମͰ഑෍Մೳ
    • werckerͰΫϩείϯύΠϧˠ

    GitHub Releases΁ͷΞοϓϩʔυ·Ͱ

    ϫϯΫϦοΫͰ
    • motemen/ghqΛࢀߟʹ
    IUUQTHJUIVCDPNXBMUFSDEXBMUFSCMPCNBTUFSXFSDLFSZNM

    View Slide

  12. ͦͷଞtips
    ϓϩδΣΫτߏ੒
    • coreos/etcdΛࢀߟʹͨ͠
    • {$project-root}/${package-name}/ҎԼʹ

    .goϑΝΠϧΛ഑ஔ͍ͯ͘͠ϧʔϧͰ
    • Ϣχοτςετ΋ຊମͱಉ͡σΟϨΫτϦ഑ஔ
    • build/test͸shell scriptͰ
    https://github.com/walter-cd/walter

    View Slide

  13. ͦͷଞtips
    ύοέʔδ؅ཧ
    • ࠷ॳ͸submoduleͰ؅ཧ
    • ґଘ͕૿͑ͯอकͮ͠Β͘ͳͬͨ
    • ࠓ͸GodepΛར༻
    • /Godeps/Godeps.jsonʹґଘؔ܎هड़
    https://github.com/tools/godep

    View Slide

  14. ͦͷଞtips
    ϩάग़ྗ
    • ༻్ʹ߹͏ϩάग़ྗϥΠϒϥϦ͕ͳ͔ͬͨ
    • ଞͷϓϩδΣΫτ͸ݢฒΈࣗલͰ༻ҙ
    • golang/glogΛforkͯ͠ϩάϑΥʔϚοτ
    Λม͑ͯར༻

    View Slide

  15. GoͰॻ͍ͨॴײ

    View Slide

  16. “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

    View Slide

  17. “golang way”
    • "Share memory by communicating,

    don't communicate by sharing memory.”
    • channelͰॻ͍ͯΈΔ
    • ॻ͖ͮΒͦ͏ͩͬͨΒSync.Mutex
    IUUQTDPEFHPPHMFDPNQHPXJLJXJLJ.VUFY0S$IBOOFM
    IUUQTPOJBDPEFTXPSEQSFTTDPNDIBOOFMTWTTZODQBDLBHF

    View Slide

  18. ࠷ޙʹ
    • walterͱ͍͏ϏϧυύΠϓϥΠϯπʔϧΛGoͰॻ͍ͨ
    • όΠφϦ഑෍ָ͕
    • goroutine/channelͰδϣϒؒͷϝοηʔδύογϯάΛ͍͍ײ͡ʹ
    • ·ͩશવͰ͖ͯͳ͍ɽҾ͖ଓ͖ػೳڧԽΛߦ͍͖ͬͯ·͢
    • ΤϥʔϋϯυϦϯάڧԽetc..
    • YAMLܗࣜͷઃఆϑΝΠϧΛ΍Ί͍ͨ

    DSLΛGoͰͲ͏࣮૷͢Δ͔ߟ͑த

    View Slide