Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,209 views

Published on

Fukuoka.go#2の入門LTです
http://connpass.com/event/7559/

Published in: Technology

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

  1. 1. ツールの作成から配布まで Fukuoka.go#2 @monochromegane 実践 Go!
  2. 2. MIYAKE Yusuke (@monochromegane)
  3. 3. GMO Pepabo, Inc.
  4. 4. pt The Platinum Searcher
  5. 5. 物販はじめました
  6. 6. ツールの作成から配布まで
  7. 7. ツールの作成から配布まで
  8. 8. つくってみる
  9. 9. ʕ◔ϖ◔ʔ < Go! $ go run xxx.go # コンパイル&実行(main関数を含むgoファイルを指定) $ go test ./... # すべてのパッケージのテストを実行 $ go build # コンパイル
  10. 10. github.com/user/ src/ cmd/go-ls/ main.go # mainパッケージ go-ls.go # 自作パッケージ • go get された場合の構成となる$GOPATH/リポジトリ/ユー ザ/srcの構成にあわせておくとimportでつまづかない • mainパッケージはCLIのエントリポイントとしてコマンドラ イン引数の解析と自作パッケージの呼び出しを行う • これにより、自作パッケージの機能が外部パッケージから利 用しやすくなる ʕ◔ϖ◔ʔ < Go!
  11. 11. ツールの作成から配布まで
  12. 12. Local
  13. 13. OR $ go build -o $PATH/xxx $ go install packge_name
  14. 14. bin/ go-ls # 実行コマンド (mainパッケージ) pkg/ darwin_amd64/ # アーキテクチャ github.com/user/ go-ls.a # パッケージオブジェクト (自作パッケージ) • go installはsrc配下からパッケージを探してコンパイルする ʕ◔ϖ◔ʔ < Go!
  15. 15. さみしさ…
  16. 16. みんなに 使ってもらおう Have a try !
  17. 17. go get
  18. 18. $ go get github.com/user/package_name • go get は src配下にリポジトリからソースを取得後、コンパ イルを行う
  19. 19. Go開発環境が ないひとにも 使ってもらおう
  20. 20. Homebrew 🍻
  21. 21. $ brew tap user/formula $ brew install formula • 独自formulaをつくって、tapで追加する • 依存関係に`go`を入れておけば、Goの開発環境も一緒に構築 してくれる
  22. 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
  23. 23. MacOSX以外でも 使ってもらおう
  24. 24. Cross Compile
  25. 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
  26. 26. 便利なパッケージ あり
  27. 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
  28. 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
  29. 29. ダウンロードして 使ってもらおう
  30. 30. Drone.io
  31. 31. http://icons8.com/ push configure hook Docker Images build & test Docker Container deploydownload heroku, Dotcloud, GAE, S3, SSH C, C++, Dart, Go, Haskell, Groovy, Java, Node.js, PHP, Python, Ruby, Scala
  32. 32. • Drone.ioではビルド成果物をダウンロードしてもら うため、Artifactsという機能がある • Artifactsに指定したディレクトリにビルド成果物を コピーするだけ • 世代管理は行えない Artifacts
  33. 33. Wercker
  34. 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
  35. 35. • Werckerには、GitHubのリリース作成とリリースへ の資産アップロードを行うStepがあるのでこれを利 用する • GitHubのTokenなどはWercker側にVariableとして 定義する GitHub releases
  36. 36. おまけ
  37. 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ファイルを指定するとコンパイル済みのファイ ルからインストールできてインストール時間を短縮できる
  38. 38. 宣伝 ペパボではエンジニアを募集しています。 共にサービスを生み出し育ててくれる新しい仲間 を待っています。 ! http://pepabo.com/recruit/career/engineer/
  39. 39. おわり

×