余計なサブコマンドのヘルプを消したい
github.com/urfave/cli ですが、
自分の中ではgoでcli作るなら、これが一番使いやすく、
これだけで充分事足りるなぁという印象です。
で、このライブラリはデフォルトで
サブコマンドありきのusageが表示されるんですが、
サブコマンド使うまでもないアプリの場合、余計なので消す方法を記載しておきます。
Usageをカスタマイズ
サブコマンド使わないけど、Usageにcommandsとか表示されて困ってたんだけどどうするだ。
subcommands off 的なオプションが使えるのかなと、思ってたんですが、
urfave/cli/help.go
に書いてある、AppHelpTemplateというのが、デフォルトのテンプレートになっているようで、
{{.Name}} みたいな記述がメンバ変数の展開になっているみたい。
このAppHelpTemplate を元に自分の好きな形に編集して、
更にapp.CustomAppHelpTemplate に代入すれば、
自分の好きな書式にできるみたいです。
サンプル
var HelpTemplate = `NAME:
{{.Name}}{{if .Usage}} - {{.Usage}}{{end}}
USAGE:
{{if .UsageText}}{{.UsageText}}{{else}}{{.HelpName}} {{if .VisibleFlags}}[options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}{{end}}{{if .Version}}{{if not .HideVersion}}
VERSION:
{{.Version}}{{end}}{{end}}{{if .Description}}
DESCRIPTION:
{{.Description}}{{end}}{{if len .Authors}}
AUTHOR{{with $length := len .Authors}}{{if ne 1 $length}}S{{end}}{{end}}:
{{range $index, $author := .Authors}}{{if $index}}
{{end}}{{$author}}{{end}}{{end}}{{if .VisibleCommands}}
OPTIONS:
{{range $index, $option := .VisibleFlags}}{{if $index}}
{{end}}{{$option}}{{end}}{{end}}
`
func main() {
App := cli.NewApp()
App.CustomAppHelpTemplate = HelpTemplate // <- ここで好きなテンプレートを代入
App.Name = "Your app name"
App.Usage = "Your app usage"
App.Version = Version
App.Run(os.Args)
}
出力結果
出力の結果は以下のとおり、サブコマンドの表示をなくす事ができる。
$ go run main.go --help
NAME:
Your app name - Your app usage
USAGE:
main [options] [arguments...]
OPTIONS:
--help, -h show help
--version, -v print the version
おしまい
Go言語はライブラリも簡単に中身のソースを確認できるのがいいですね!
ソースも本当に読みやすい!