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

39
ツールの作成から配布まで Fukuoka.go#2 @monochromegane 実践 Go!

Upload: yusuke-miyake

Post on 22-Nov-2014

2.889 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

Fukuoka.go#2 @monochromegane

実践 Go!

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

MIYAKE Yusuke (@monochromegane)

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

GMO Pepabo, Inc.

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

pt The Platinum Searcher

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

物販はじめました

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

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

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

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

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

つくってみる

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

ʕ◔ϖ◔ʔ < Go!

$ go run xxx.go # コンパイル&実行(main関数を含むgoファイルを指定)$ go test ./... # すべてのパッケージのテストを実行$ go build # コンパイル

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

github.com/user/ src/ cmd/go-ls/ main.go # mainパッケージ go-ls.go # 自作パッケージ

• go get された場合の構成となる$GOPATH/リポジトリ/ユーザ/srcの構成にあわせておくとimportでつまづかない

• mainパッケージはCLIのエントリポイントとしてコマンドライン引数の解析と自作パッケージの呼び出しを行う

• これにより、自作パッケージの機能が外部パッケージから利用しやすくなる

ʕ◔ϖ◔ʔ < Go!

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

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

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

Local

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

OR

$ go build -o $PATH/xxx

$ go install packge_name

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

bin/ go-ls # 実行コマンド (mainパッケージ)pkg/ darwin_amd64/ # アーキテクチャ github.com/user/ go-ls.a # パッケージオブジェクト (自作パッケージ)

• go installはsrc配下からパッケージを探してコンパイルする

ʕ◔ϖ◔ʔ < Go!

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

さみしさ…

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

みんなに 使ってもらおう

Have a try !

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

go get

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

$ go get \ github.com/user/package_name

• go get は src配下にリポジトリからソースを取得後、コンパイルを行う

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

Go開発環境が ないひとにも 使ってもらおう

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

Homebrew🍻

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

$ brew tap user/formula$ brew install formula

• 独自formulaをつくって、tapで追加する

• 依存関係に`go`を入れておけば、Goの開発環境も一緒に構築してくれる

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

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' endend

formula

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

MacOSX以外でも 使ってもらおう

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

Cross Compile

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

$ cd go/src$ GOOS=linux GOARCH=amd64 \ ./make.bash

$ GOOS=linux GOARCH=amd64 \ go build

• Homebrewの場合、/usr/local/Cellar/go/1.3/libexec

Basic

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

便利なパッケージ あり〼

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

$ gox

$ goxNumber of parallel builds: 4!--> darwin/386: go-ls--> darwin/amd64: go-ls--> linux/386: go-ls

• 並行コンパイル • オプションで対象OS/ARCH指定可能 -osarch=“linux/amd64"

mitchellh/gox

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

$ 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

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

ダウンロードして 使ってもらおう

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

Drone.io

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

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

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

• Drone.ioではビルド成果物をダウンロードしてもらうため、Artifactsという機能がある

• Artifactsに指定したディレクトリにビルド成果物をコピーするだけ

• 世代管理は行えない

Artifacts

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

Wercker

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

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

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

• Werckerには、GitHubのリリース作成とリリースへの資産アップロードを行うStepがあるのでこれを利用する

• GitHubのTokenなどはWercker側にVariableとして定義する

GitHub releases

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

おまけ

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

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' endend

formula

• URL指定でzipファイルを指定するとコンパイル済みのファイルからインストールできてインストール時間を短縮できる

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

宣伝

ペパボではエンジニアを募集しています。 共にサービスを生み出し育ててくれる新しい仲間を待っています。 !

http://pepabo.com/recruit/career/engineer/

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

おわり