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

実践Go - ツールの作成から配布まで

実践Go - ツールの作成から配布まで

Fukuoka.go#2の資料です
http://connpass.com/event/7559/

monochromegane

August 22, 2014
Tweet

More Decks by monochromegane

Other Decks in Technology

Transcript

  1. πʔϧͷ࡞੒͔Β഑෍·Ͱ
    Fukuoka.go#2
    @monochromegane
    ࣮ફ Go!

    View Slide

  2. MIYAKE Yusuke
    (@monochromegane)

    View Slide

  3. GMO Pepabo, Inc.

    View Slide

  4. pt
    The Platinum Searcher

    View Slide

  5. ෺ൢ͸͡Ί·ͨ͠

    View Slide

  6. πʔϧͷ࡞੒͔Β഑෍·Ͱ

    View Slide

  7. πʔϧͷ࡞੒͔Β഑෍·Ͱ

    View Slide

  8. ͭͬͯ͘ΈΔ

    View Slide

  9. ʕ◔ϖ◔ʔ < Go!
    $ go run xxx.go # ίϯύΠϧ&࣮ߦ(mainؔ਺ΛؚΉgoϑΝΠϧΛࢦఆ)
    $ go test ./... # ͢΂ͯͷύοέʔδͷςετΛ࣮ߦ
    $ go build # ίϯύΠϧ

    View Slide

  10. github.com/user/
    src/
    cmd/go-ls/
    main.go # mainύοέʔδ
    go-ls.go # ࣗ࡞ύοέʔδ
    • go get ͞Εͨ৔߹ͷߏ੒ͱͳΔ$GOPATH/ϦϙδτϦ/Ϣʔ
    β/srcͷߏ੒ʹ͋Θ͓ͤͯ͘ͱimportͰͭ·͔ͮͳ͍
    • mainύοέʔδ͸CLIͷΤϯτϦϙΠϯτͱͯ͠ίϚϯυϥ
    ΠϯҾ਺ͷղੳͱࣗ࡞ύοέʔδͷݺͼग़͠Λߦ͏
    • ͜ΕʹΑΓɺࣗ࡞ύοέʔδͷػೳ͕֎෦ύοέʔδ͔Βར
    ༻͠΍͘͢ͳΔ
    ʕ◔ϖ◔ʔ < Go!

    View Slide

  11. πʔϧͷ࡞੒͔Β഑෍·Ͱ

    View Slide

  12. Local

    View Slide

  13. OR
    $ go build -o $PATH/xxx
    $ go install packge_name

    View Slide

  14. bin/
    go-ls # ࣮ߦίϚϯυ (mainύοέʔδ)
    pkg/
    darwin_amd64/ # ΞʔΩςΫνϟ
    github.com/user/
    go-ls.a # ύοέʔδΦϒδΣΫτ (ࣗ࡞ύοέʔδ)
    • go install͸src഑Լ͔ΒύοέʔδΛ୳ͯ͠ίϯύΠϧ͢Δ
    ʕ◔ϖ◔ʔ < Go!

    View Slide

  15. ͞Έ͠͞…

    View Slide

  16. ΈΜͳʹ
    ࢖ͬͯ΋Β͓͏
    Have a try !

    View Slide

  17. go get

    View Slide

  18. $ go get \
    github.com/user/package_name
    • go get ͸ src഑ԼʹϦϙδτϦ͔ΒιʔεΛऔಘޙɺίϯύ
    ΠϧΛߦ͏

    View Slide

  19. Go։ൃ؀ڥ͕
    ͳ͍ͻͱʹ΋
    ࢖ͬͯ΋Β͓͏

    View Slide

  20. Homebrew

    View Slide

  21. $ brew tap user/formula
    $ brew install formula
    • ಠࣗformulaΛͭͬͯ͘ɺtapͰ௥Ճ͢Δ
    • ґଘؔ܎ʹ`go`ΛೖΕ͓͚ͯ͹ɺGoͷ։ൃ؀ڥ΋Ұॹʹߏங
    ͯ͘͠ΕΔ

    View Slide

  22. require 'formula'
    !
    HOMEBREW_PT_VERSION='1.7.1'
    class Pt < Formula # FormulaΫϥεΛܧঝ
    homepage 'https://github.com/monochromegane/the_platinum_searcher'
    url ‘https://github.com/monochromegane/the_platinum_searcher.git',\
    :tag => "v#{HOMEBREW_PT_VERSION}"
    version HOMEBREW_PT_VERSION
    !
    depends_on 'go' => :build # Ϗϧυ࣌ͷΈGoΛΠϯετʔϧ
    depends_on 'hg' => :build # ֎෦ύοέʔδ͕code.google.comͷ৔߹Mercurial͕ඞཁ
    !
    def install
    ENV['GOPATH'] = buildpath
    system 'go', 'get', ‘github.com/jessevdk/go-flags'
    mkdir_p buildpath/'src/github.com/monochromegane'
    ln_s buildpath, buildpath/'src/github.com/monochromegane/the_platinum_searcher'
    system 'go', 'build', '-o', 'pt', 'cmd/pt/main.go'
    bin.install 'pt'
    end
    end
    formula

    View Slide

  23. MacOSXҎ֎Ͱ΋
    ࢖ͬͯ΋Β͓͏

    View Slide

  24. Cross
    Compile

    View Slide

  25. $ cd go/src
    $ GOOS=linux GOARCH=amd64 \
    ./make.bash
    $ GOOS=linux GOARCH=amd64 \
    go build
    • Homebrewͷ৔߹ɺ/usr/local/Cellar/go/1.3/libexec
    Basic

    View Slide

  26. ศརͳύοέʔδ
    ͋Γ㽂

    View Slide

  27. $ gox
    $ gox
    Number of parallel builds: 4
    !
    --> darwin/386: go-ls
    --> darwin/amd64: go-ls
    --> linux/386: go-ls
    • ฒߦίϯύΠϧ
    • ΦϓγϣϯͰର৅OS/ARCHࢦఆՄೳ -osarch=“linux/amd64"
    mitchellh/gox

    View Slide

  28. $ goxc
    $ goxc
    ...
    !
    [goxc:archive-tar-gz] 2014/08/10 21:35:38
    Artifact(s) archived to /Users/miyakey/bin/go-ls-
    xc/snapshot/go-ls_linux_amd64.tar.gz
    • ίϯύΠϧ݁ՌΛѹॖͰ͖ΔͷͰɺಉ࣮͡ߦϑΝΠϧ໊ʹͰ͖Δ
    • ΦϓγϣϯͰର৅OS/ARCHࢦఆՄೳ -bc="linux,!arm darwin"
    laher/goxc

    View Slide

  29. μ΢ϯϩʔυͯ͠
    ࢖ͬͯ΋Β͓͏

    View Slide

  30. Drone.io

    View Slide

  31. http://icons8.com/
    push
    configure hook
    Docker Images
    build & test
    Docker Container
    deploy
    download
    heroku, Dotcloud, GAE,
    S3, SSH
    C, C++, Dart, Go,
    Haskell, Groovy, Java,
    Node.js, PHP, Python,
    Ruby, Scala

    View Slide

  32. • Drone.ioͰ͸Ϗϧυ੒Ռ෺Λμ΢ϯϩʔυͯ͠΋Β
    ͏ͨΊɺArtifactsͱ͍͏ػೳ͕͋Δ
    • Artifactsʹࢦఆͨ͠σΟϨΫτϦʹϏϧυ੒Ռ෺Λ
    ίϐʔ͢Δ͚ͩ
    • ੈ୅؅ཧ͸ߦ͑ͳ͍
    Artifacts

    View Slide

  33. Wercker

    View Slide

  34. http://icons8.com/
    push
    configure hook
    Boxes
    build & test
    Box
    deploy
    download
    heroku, OpenShift, Amazon,
    RackSpace, DigitalOcean
    Node.js, Ruby, Python,
    PHP, Go, Java/Android
    GitHub releases

    View Slide

  35. • Werckerʹ͸ɺGitHubͷϦϦʔε࡞੒ͱϦϦʔε΁
    ͷࢿ࢈ΞοϓϩʔυΛߦ͏Step͕͋ΔͷͰ͜ΕΛར
    ༻͢Δ
    • GitHubͷTokenͳͲ͸WerckerଆʹVariableͱͯ͠
    ఆٛ͢Δ
    GitHub releases

    View Slide

  36. ͓·͚

    View Slide

  37. require 'formula'
    !
    HOMEBREW_PT_VERSION='1.7.1'
    class Pt < Formula
    homepage 'https://github.com/monochromegane/the_platinum_searcher'
    url "https://github.com/monochromegane/the_platinum_searcher/
    releases/download/v#{HOMEBREW_PT_VERSION}/pt_darwin_amd64.zip"
    sha1 '00844c339ca864bdae77fe4481a103456760181e'
    !
    version HOMEBREW_PT_VERSION
    def install
    bin.install 'pt'
    end
    end
    formula
    • URLࢦఆͰzipϑΝΠϧΛࢦఆ͢ΔͱίϯύΠϧࡁΈͷϑΝΠ
    ϧ͔ΒΠϯετʔϧͰ͖ͯΠϯετʔϧ࣌ؒΛ୹ॖͰ͖Δ

    View Slide

  38. એ఻
    ϖύϘͰ͸ΤϯδχΞΛืू͍ͯ͠·͢ɻ
    ڞʹαʔϏεΛੜΈग़͠ҭͯͯ͘ΕΔ৽͍͠஥ؒ
    Λ଴͍ͬͯ·͢ɻ
    !
    http://pepabo.com/recruit/career/engineer/

    View Slide

  39. ͓ΘΓ

    View Slide