目的
cobraでヘルプをグループ化する機能が追加されたので試してみる
環境
- spf13/cobra 1.6以上
- go言語 バージョン 1.19
グループ化してみる
コマンドにグループを追加する。追加順にグループが表示されます。
rootCmd.AddGroup(&cobra.Group{ID: "group1", Title: "group1"})
rootCmd.AddGroup(&cobra.Group{ID: "group2", Title: "group2"})
グループ化したいサブコマンドにグループIDを付与する
var subCmd1 = &cobra.Command{
Use: "sub1",
Long: "sub1 command",
GroupID: "group1",
}
helpやcompletionをグループに含めるにはSetHelpCommandGroupID
とSetCompletionCommandGroupID
を使う
※rootコマンドのみ設定が必要
rootCmd.SetHelpCommandGroupID("group1")
rootCmd.SetCompletionCommandGroupID("group1")
実際に動かしてみる
サンプルコードは以下
package main
import (
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
Use: "root",
}
var subCmd1 = &cobra.Command{
Use: "sub1",
Short: "sub1 command",
GroupID: "group1",
Run: func(cmd *cobra.Command, args []string) {},
}
var subCmd2 = &cobra.Command{
Use: "sub2",
Short: "sub2 command",
GroupID: "group2",
Run: func(cmd *cobra.Command, args []string) {},
}
func init() {
rootCmd.AddGroup(&cobra.Group{ID: "group1", Title: "group1"})
rootCmd.AddGroup(&cobra.Group{ID: "group2", Title: "group2"})
rootCmd.SetHelpCommandGroupID("group1")
rootCmd.SetCompletionCommandGroupID("group1")
rootCmd.AddCommand(subCmd1)
rootCmd.AddCommand(subCmd2)
}
func main() {
rootCmd.Execute()
}
実行した結果は以下
$ go run test.go -h
Usage:
root [command]
group1
completion Generate the autocompletion script for the specified shell
help Help about any command
sub1 sub1 command
group2
sub2 sub2 command
Flags:
-h, --help help for root
Use "root [command] --help" for more information about a command.
参考資料
https://github.com/spf13/cobra
https://github.com/spf13/cobra/pull/1003