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

Preview:

DESCRIPTION

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

Citation preview

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

Fukuoka.go#2 @monochromegane

実践 Go!

MIYAKE Yusuke (@monochromegane)

GMO Pepabo, Inc.

pt The Platinum Searcher

物販はじめました

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

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

つくってみる

ʕ◔ϖ◔ʔ < Go!

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

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

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

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

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

ʕ◔ϖ◔ʔ < Go!

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

Local

OR

$ go build -o $PATH/xxx

$ go install packge_name

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

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

ʕ◔ϖ◔ʔ < Go!

さみしさ…

みんなに 使ってもらおう

Have a try !

go get

$ go get \ github.com/user/package_name

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

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

Homebrew🍻

$ brew tap user/formula$ brew install formula

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

• 依存関係に`go`を入れておけば、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

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

Cross Compile

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

$ GOOS=linux GOARCH=amd64 \ go build

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

Basic

便利なパッケージ あり〼

$ 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

$ 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

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

Drone.io

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

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

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

• 世代管理は行えない

Artifacts

Wercker

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

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

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

GitHub releases

おまけ

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ファイルを指定するとコンパイル済みのファイルからインストールできてインストール時間を短縮できる

宣伝

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

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

おわり

Recommended