golangでコマンドラインツールを作る #1 gcliをインストールする
なぜ作ろうと思ったか
Go Tourは昔ちょっとやったことあったけどほとんど覚えてないってレベル。でも、これで発表することになったからやるぞってなった。
んで、題材が思いつかなかったけど最近iOSでxcodeproj/project.pbxprojがよくコンフリクトしてるから、あれをコマンドラインでさらっとパースできないかなと思ったので作ることにしてみた。
何から調べるか
なんか、go getとかGOHOMEとか色々後戻りできない感じがあったようななかったような感じがしたがなんかその辺調べるのめんどくなってきた。とりあえずコマンドラインツールが作れればいいのでと思ってこれを見つけた。
そういえば社内の勉強会でcodegangsta/cli · GitHubよりよさそうみたいなこと言ってた気がするのでこれでやってみるかということに。
まずはGitHubのレポジトリを作る
雰囲気出るし。xocdeprojとGolangを組み合わせて、xgodeprojにしてみた。ダサいw
そしたらこれで作ってみる
どうやってインストールすればいいのか。ってかGo入ってんのか?俺の環境。
$ go zsh: command not found: go
多分入ってない?
Goをインストールする
$ brew install go ==> Downloading https://homebrew.bintray.com/bottles/go-1.4.2.yosemite.bottle.2. ######################################################################## 100.0% ==> Pouring go-1.4.2.yosemite.bottle.2.tar.gz ==> Caveats As of go 1.2, a valid GOPATH is required to use the `go get` command: https://golang.org/doc/code.html#GOPATH You may wish to add the GOROOT-based install location to your PATH: export PATH=$PATH:/usr/local/opt/go/libexec/bin ==> Summary 🍺 /usr/local/Cellar/go/1.4.2: 4566 files, 155M $ go version go version go1.4.2 darwin/amd64
多分これでいいのかな。
gcliを取り込む
よくわからないけど多分、go getみたいのすればよさそう。READMEを読もう。Installationで説明してくれてる素晴らしい。 GOPATHとか設定されてないけどとりあえずやってみよう。
$ echo $GOPATH $ echo $GOROOT
とりあえずなんも入ってない。go get してみると、
$ go get -d github.com/tcnksm/gcli package github.com/tcnksm/gcli: cannot download, $GOPATH not set. For more details see: go help gopath
go help gopathって書いてある。読んでもすっと頭に入ってこない。 gopath調べるとよさそうな記事発見。
$HOME/go
か$HOME/.go
が多いようだ。$HOME/.go
にしよう。
zshrcの追加。
export GOPATH=$HOME/.go
そして、go getしてみる。が、エラー。
$ go get -d github.com/tcnksm/gcli # github.com/tcnksm/gcli/skeleton /Users/mpon/.go/src/github.com/tcnksm/gcli/skeleton/template.go:34: undefined: Asset
GOPATHの下を見ると、何かができてる感は感じられる。
$ ll $GOPATH/* /Users/mpon/.go/pkg: total 0 drwxr-xr-x 4 mpon staff 136B 8 13 18:19 darwin_amd64 /Users/mpon/.go/src: total 0 drwxr-xr-x 7 mpon staff 238B 8 13 18:19 github.com drwxr-xr-x 3 mpon staff 102B 8 13 18:19 golang.org
Go言語 + cli-init でコマンドラインツールを作る | Developers.IOを真似して、
$ cd $GOPATH $ go get -d github.com/tcnksm/cli-init $ make install
をやってみた。けど、make installでこけた。
cd skeleton; go-bindata -pkg="skeleton" resource/... /bin/sh: go-bindata: command not found make: *** [install] Error 127
エラーメッセージでググって、go-bindata
はなんか別のライブラリかな?
Installしてみる。-u
ってなんだろう。まぁいいか。
$ go get -u github.com/jteeuwen/go-bindata/
これをやったあともやっぱり、make installでこける。これは、issueないかなと思ったらあったw
/bin/sh: go-bindata: command not found · Issue #23 · tcnksm/gcli · GitHub
$GOPATH/binを$PATHに追加したらいけた!
$ make install go get -v golang.org/x/tools/cmd/vet go get -v github.com/golang/lint/golint go get -v github.com/jteeuwen/go-bindata/... go get -v -d -t ./... cd skeleton; go-bindata -pkg="skeleton" resource/... go install -ldflags "-X main.GitCommit \"$(git describe --always)\""
そして、この$GOPATHの下はgithub.comとかなってて、gcliのREADME読んでて、この$GOPATH/srcの下にに自分のソースコードを作るみたいなことが分かった。
gcliを実行してみる
cd $GOHOME/src/github.com/mpon/xcodeprojに移動して、READMEに沿ってコマンドをたたく。 なんか、codegangstaとかFrameworkが選べるってやつはよく分からなかったから指定しなかった。
gcli new -c list xgodeproj Created xgodeproj/version.go Created xgodeproj/command/list.go Created xgodeproj/CHANGELOG.md Created xgodeproj/commands.go Created xgodeproj/command/list_test.go Created xgodeproj/main.go Created xgodeproj/README.md ====> Successfully generated xgodeproj
そしたらxgodeprojがまるまる出来てしまった。そうか、こっちが先だったっぽい。なので、直下にファイルが来るようにmvでせっせと移動する。
出来上がったファイルをmain.goみてみたら、github.com/codegangsta/cliが書いてあるから、何も指定しないとこれになるんだね。あと、READMEとかcommands.goの自分のGitHub名が本名になっててgit configのuser.nameとかみてるのかな?その辺を直した。
テンプレで出来たコマンドが実行できるか確認してみる
$ go build github.com/mpon/xgodeproj ../.go/src/github.com/mpon/xgodeproj/commands.go:7:2: cannot find package "github.com/codegangsta/cli" in any of: /usr/local/Cellar/go/1.4.2/libexec/src/github.com/codegangsta/cli (from $GOROOT) /Users/mpon/.go/src/github.com/codegangsta/cli (from $GOPATH) $ go get github.com/codegangsta/cli
go buildしてみるとcodegangsta/cliがないっぽいのでgo get
する。
再びgo build
するとディレクトリが出来上がった。
そしてコマンドを実行。
$ ./xgodeproj NAME: xgodeproj - USAGE: xgodeproj [global options] command [command options] [arguments...] VERSION: 0.1.0 AUTHOR(S): Masato Ohshima COMMANDS: list help, h Shows a list of commands or help for one command GLOBAL OPTIONS: --help, -h show help --version, -v print the version
なんか、よさそう。