0Pricing
Go Academy · レッスン

サブコマンドとコマンドグループ

多階層のCLI構造を構築します。

「サブコマンドとコマンドグループ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

階層型コマンド

Cobra は任意の深さの入れ子をサポートします。root → subcommand → sub-subcommand のように構成できます。ユーザーは app resource action の形式で、kubectl get pods のように呼び出します。

サブコマンドの追加

各サブコマンドを個別の cobra.Command として作成し、親に登録します:

var userCmd = &cobra.Command{Use: "user", Short: "Manage users"}
var userCreateCmd = &cobra.Command{Use: "create", Short: "Create user", RunE: createUser}
func init() {
    userCmd.AddCommand(userCreateCmd)
    rootCmd.AddCommand(userCmd)
}

グループ表示(Cobra v1.6 以降)

ヘルプ出力でコマンドを表示グループに割り当て、整理して表示します:

rootCmd.AddGroup(&cobra.Group{ID: "mgmt", Title: "Management Commands"})
userCmd.GroupID = "mgmt"

エイリアス

エイリアスを追加すると、ユーザーはコマンドに短い名前や別名を使えるようになります:

var userCmd = &cobra.Command{
    Use:     "user",
    Aliases: []string{"users", "u"},
}

非表示のコマンド

デバッグ用または内部用のコマンドを非表示に指定すると、ヘルプには表示されなくなりますが、引き続き使用できます:

cmd.Hidden = true

非推奨のコマンド

古いコマンドを非推奨として指定すると、使用時に警告を表示できます:

cmd.Deprecated = "use 'new-command' instead"

Pre フックと Post フック

コマンドとそのすべてのサブコマンドに適用するセットアップや後始末には、PersistentPreRunE と PostRunE を使用します(たとえば、サブコマンドが実行される前に DB 接続を初期化する場合などです)。

rootCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error {
    return initDB()
}

リーフコマンドのヘルプを無効にする

Cobra はデフォルトで help をサブコマンドとして追加します。アプリ独自のヘルプコマンドがある場合や、サブコマンドの構成がわかりにくくなる場合は無効にしてください。

rootCmd.SetHelpCommand(&cobra.Command{Hidden: true})

親コマンドへのアクセス

Run 関数内では、cmd.Parent() が親コマンドを返します。親で定義されたフラグにアクセスする場合などに便利です。

コマンドの走査

rootCmd.Commands() を使うと、登録されているすべてのサブコマンドを反復処理できます。プログラムからの内省やドキュメントの自動生成に便利です。

Man ページと Markdown の生成

Cobra は cobra/doc パッケージを使って、すべてのコマンドの man ページと Markdown ドキュメントを生成できます:

doc.GenMarkdownTree(rootCmd, "./docs")

クイックチェック

Cobra のサブコマンドを複数の名前で利用できるようにするには、どうすればよいですか

振り返り: サブコマンドとグループ

要点:

  • AddCommand でコマンドを階層的に入れ子にします
  • Cobra v1.6 以降では GroupID でヘルプ表示を整理します
  • 短縮形には Aliases、内部コマンドには Hidden を使用します
  • サブコマンド間で共通のセットアップを行うには PersistentPreRunE を使用します

よくある質問

「サブコマンドとコマンドグループ」レッスンは無料ですか?

はい。「サブコマンドとコマンドグループ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「サブコマンドとコマンドグループ」で何を学びますか?

多階層のCLI構造を構築します。 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「サブコマンドとコマンドグループ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Cobraの基本
  2. フラグと永続フラグ
  3. サブコマンドとコマンドグループ
  4. CLIツールの配布
← Go Academyに戻る