GoでCLIのツールを作ってみる。 今回はCobraというライブラリを使って簡単なCLIツールを作るところまで。
インストール
公式のREADMEにある通り、下記コマンドを実行する。
go install github.com/spf13/cobra
Goのバイナリにパスが通っていない場合は、以下も実行する。
echo 'export PATH="$PATH:$(go env GOPATH)/bin"' >> ~/.zshrc
とりあえずインストールの確認。
❯ cobra -h
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
Usage:
cobra [command]
Available Commands:
add Add a command to a Cobra Application
completion generate the autocompletion script for the specified shell
help Help about any command
init Initialize a Cobra Application
Flags:
-a, --author string author name for copyright attribution (default "YOUR NAME")
--config string config file (default is $HOME/.cobra.yaml)
-h, --help help for cobra
-l, --license string name of license for the project
--viper use Viper for configuration (default true)
Use "cobra [command] --help" for more information about a command.
Cobra Generator
Cobraは自身もCLIコマンドになっていて、コードのベースを簡単に生成してくれる。 ありがたく使う。
❯ mksir newApp && cd $_
❯ cobra init --pkg-name github.com/tkomatsu/newApp
Using config file: /Users/tkomatsu/.cobra.yaml
Your Cobra application is ready at
/Users/tkomatsu/Documents/42/cli
モジュールのインストール
go.mod
を作って、必要なモジュールをインストールする。
❯ go mod init github.com/tkomatsu/newApp
go: creating new go.mod: module github.com/tkomatsu/newApp
go: to add module requirements and sums:
go mod tidy
❯ go get github.com/spf13/cobra
go get: added github.com/inconshreveable/mousetrap v1.0.0
go get: added github.com/spf13/cobra v1.2.1
go get: added github.com/spf13/pflag v1.0.5
❯ go get github.com/spf13/viper
go get: upgraded github.com/fsnotify/fsnotify v1.4.9 => v1.5.1
go get: upgraded github.com/mitchellh/mapstructure v1.4.1 => v1.4.2
go get: upgraded github.com/pelletier/go-toml v1.9.3 => v1.9.4
go get: upgraded github.com/spf13/cast v1.3.1 => v1.4.1
go get: upgraded github.com/spf13/viper v1.8.1 => v1.9.0
go get: upgraded golang.org/x/sys v0.0.0-20210510120138-977fb7262007 => v0.0.0-20210823070655-63515b42dcdf
go get: upgraded golang.org/x/text v0.3.5 => v0.3.6
go get: upgraded gopkg.in/ini.v1 v1.62.0 => v1.63.2
ディレクトリ構成
❯ exa -T
.
├── cmd
│ └── root.go
├── go.mod
├── go.sum
├── LICENSE
└── main.go
リポジトリ直下にmain.go
が生成される。
cmd/
下にファイルを追加することで、CLIのサブコマンドが実装できる。
サブコマンドを追加するときもCobra自身を使って追加できる
cobra add <sub command>
ビルド
❯ go build
❯ ./newApp
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
デフォルトのメッセージが出ればとりあえずOK。