urfave/cli のUsageをカスタマイズ (Go言語)

余計なサブコマンドのヘルプを消したい

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言語はライブラリも簡単に中身のソースを確認できるのがいいですね!
ソースも本当に読みやすい!

コメントを残す