Agent Skills by ALSEL
Anthropic ClaudeLLM・AI開発⭐ リポ 0品質スコア 50/100

golang-spf13-cobra

`github.com/spf13/cobra` を使用したGolang CLIコマンドツリーの構築に特化したスキルです。`cobra.Command`の定義、`RunE` vs `Run`の使い分け、`PersistentPreRunE`フックチェーン、`NoArgs`・`ExactArgs`・カスタムなどのArgs検証、永続/ローカルフラグ、コマンドグループ、`ValidArgsFunction`や`RegisterFlagCompletionFunc`によるシェル補完、`ShellCompDirective`、使用法/ヘルプテンプレートのカスタマイズ、manページ・Markdownドキュメント生成、`SetArgs`/`SetOut`/`SetErr`を用いたテストまでをカバーします。コードベースが `github.com/spf13/cobra` をインポートしている場合、またはcobraの導入・活用時に適用してください。設定レイヤリングには `golang-spf13-viper`、CLIアーキテクチャ全般には `golang-cli` スキルも併せて参照してください。

description の原文を見る

Golang CLI command tree library using spf13/cobra — cobra.Command, RunE vs Run, PersistentPreRunE hook chain, Args validators (NoArgs, ExactArgs, MatchAll, custom), persistent vs local flags, command groups, ValidArgsFunction, RegisterFlagCompletionFunc, ShellCompDirective, usage/help template customization, man-page and markdown doc generation, and testing with SetArgs/SetOut/SetErr. Apply when using or adopting spf13/cobra, or when the codebase imports `github.com/spf13/cobra`. For configuration layering alongside cobra, see the `samber/cc-skills-golang@golang-spf13-viper` skill. For general CLI architecture (project layout, exit codes, signal handling, I/O patterns), see `samber/cc-skills-golang@golang-cli`.

SKILL.md 本文

ペルソナ: Unix シェルのような使い心地を実現するコマンドツリーを構築する Go CLI エンジニアです。ユーザー向けのインターフェースを最初に設計し、その後、動作を適切なフックに組み込みます。

モード:

  • Build — ゼロからの新規 CLI 作成: コマンドツリーのセットアップ、フックの配線、フラグのセクションを順序立てて進めます。
  • Extend — 既存 CLI への機能追加: 現在のコマンドツリーを最初に読んでから、既存の構造に一貫した変更を適用します。
  • Review — 既存 CLI の監査: 「よくある間違い」表を確認し、RunE の使用方法、OutOrStdout() を検証し、フックチェーンの順序とArgs検証を確認します。

Go での spf13/cobra を使用した CLI コマンドツリー

Cobra は Go CLI アプリケーションの事実上の標準です。コマンド/サブコマンドツリー、フラグパース (pflag 経由)、Args検証、シェル補完生成、ドキュメント生成を提供します。ただし、設定のレイヤー化は処理しません — これは viper の仕事です。

公式リソース:

このスキルは完全ではありません。詳細情報については、ライブラリのドキュメントとコード例を参照してください。Context7 は検出プラットフォームとして役立ちます。

go get github.com/spf13/cobra@latest

Cobra vs. viper

これらのライブラリは根本的に異なることを行い、独立して使用できます。

対象cobraviper
管轄コマンドツリー、フラグ、Args検証、補完設定値の解決
ユーザー向け?Yes — サブコマンド、フラグ、ヘルプテキストNo — 純粋なキー・バリュー リゾルバー
他方なしで使用可能?Yes — フラグのみの CLI は cobra だけで十分Yes — YAML + env を読む長実行サービスは viper だけで十分
統合シームBindPFlag 経由で viper に pflag.Flag を渡すcobra フラグを最優先層として扱う

cobra のみを使用 する場合は、バイナリがフラグと Args を受け取るが、設定ファイルや環境解決が不要な場合です。viper のみを使用 する場合は、長実行サービスが YAML + env から設定を読み取るが、CLI サブコマンドがない場合です。両方が必要な場合は両方を使用し、ルートコマンド上の PersistentPreRunE でバインドします。

→ この統合の viper 側については、samber/cc-skills-golang@golang-spf13-viper スキルを参照してください。

コマンドツリー

すべての cobra CLI にはルートコマンドと、AddCommand で登録された 0 個以上のサブコマンドが存在します。ルートコマンド名はバイナリ名です。

var rootCmd = &cobra.Command{
    Use:          "myapp",
    Short:        "One-line summary",
    SilenceUsage: true,  // ✓ prevents usage wall on every error
    SilenceErrors: true, // ✓ lets you control error output format
}

AddGroup を使用してヘルプ出力でサブコマンドにラベル付けします — グループを登録してから、それらを参照する AddCommand 呼び出しを行ってください。cobra は遡ってグループを割り当てることはありません。

Run* ファミリー

Cobra コマンドには、順序に従って実行される 5 つのランフックがあります:

PersistentPreRunE → PreRunE → RunE → PostRunE → PersistentPostRunE

常に *E バリアントを使用してください — *E でないフォームはエラーを返すことができません。重要なルール:

  • ルート上の PersistentPreRunEすべてのサブコマンド前に実行されます — 設定初期化と認証チェックに使用してください。
  • 子の PersistentPreRunE は親のものを完全に置き換えます — 両方が必要な場合は親を明示的に呼び出してください。
  • PostRunERunE が成功した場合のみ実行されます。

ライフサイクル全体と継承ルールについては、commands-and-args.md を参照してください。

Args 検証

Cobra は RunE が実行される前に位置引数を検証します。RunE 内に len(args) チェックを書かないでください — cobra の標準エラーメッセージと引数カウント追跡をバイパスしてしまいます。

ビルトイン: NoArgsExactArgs(n)MinimumNArgs(n)MaximumNArgs(n)RangeArgs(min,max)OnlyValidArgsExactValidArgs(n)MatchAll(v1, v2) で構成します。カスタム検証: func(cmd *cobra.Command, args []string) error

完全な検証セット、例、MatchAll パターンについては、commands-and-args.md を参照してください。

フラグの入門

Cobra はフラグのパースを pflag に委譲します。永続フラグ (PersistentFlags()) はすべてのサブコマンドに継承されます。ローカルフラグ (Flags()) は宣言命令のみに適用されます。

rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file path") // inherited by all subcommands
serveCmd.Flags().IntVar(&port, "port", 8080, "listen port")                     // local to serveCmd only
serveCmd.MarkFlagRequired("port")
serveCmd.MarkFlagsMutuallyExclusive("json", "yaml")

pflag タイプ、カスタムフラグ値、フラググループ、viper バインディングについては、flags.md を参照してください。

補完の入門

Cobra はシェル補完を自動的に生成します。以下で拡張します:

  • ValidArgs []string — 静的な位置引数補完。
  • ValidArgsFunction — 動的: func(cmd, args, toComplete string) ([]string, ShellCompDirective)。ファイル フォールバックを抑制するには ShellCompDirectiveNoFileComp を返します。
  • RegisterFlagCompletionFunc(name, fn) — フラグ値の補完。

ShellCompDirective 値、アノテーション、テストについては、completions.md を参照してください。

コマンドのテスト

コマンドをプログラムで実行してテストします。コマンドハンドラで os.Stdout / os.Stderr を直接使用しないでください — テストが出力をリダイレクトできるように cmd.OutOrStdout() / cmd.ErrOrStderr() を使用してください。

func TestServeCmd(t *testing.T) {
    buf := new(bytes.Buffer)
    rootCmd.SetOut(buf)
    rootCmd.SetArgs([]string{"serve", "--port", "9090"})
    require.NoError(t, rootCmd.Execute())
    assert.Contains(t, buf.String(), "listening on :9090")
}

Cobra は Execute() 呼び出し間でフラグ状態を蓄積します — テストごとに新しいコマンドツリーを構築します。分離パターン、ゴールドファイル、補完のテストについては、testing.md を参照してください。

ベストプラクティス

  1. 常に RunE を使用し、Run は使用しないでくださいRun はエラーを返せません。唯一の脱出手段は os.Exit またはパニックであり、defer をバイパスします。
  2. 設定初期化を PersistentPreRunE に配置します — すべてのサブコマンド前に実行されます。viper バインディングと認証チェックに適切な場所です。
  3. 位置引数を Args で検証し、RunE 内では検証しませんArgs は cobra の標準エラーメッセージを提供します。MatchAll は検証を構成します。
  4. すべての出力に cmd.OutOrStdout() / cmd.ErrOrStderr() を使用します — 直接 os.Stdout 書き込みはテストで取得できません。
  5. テストごとにコマンドツリーを再作成します — cobra は同じインスタンス上の Execute() 呼び出し間でフラグ状態を蓄積します。

よくある間違い

間違い失敗する理由修正方法
Run の代わりに RunE を使用エラーを返せません — 唯一の脱出手段は os.Exit またはパニックであり、defer をバイパスしますRunE を使用します — エラーを返し、cobra に終了を処理させます
RunE 内に len(args) チェックを記述cobra の標準エラーメッセージ ("accepts 1 arg, received 2") をバイパスしますコマンド上で Args: cobra.ExactArgs(1) を宣言します
直接 os.Stdout に書き込むテストが出力を取得できません — OS レベルのファイルハンドルはリダイレクトできませんcmd.OutOrStdout() / cmd.ErrOrStderr() を使用します
子の PersistentPreRunE が親の沈黙を落とすCobra はチェーンしません — 子フックは親のフック全体を置き換えます子フックから parent.PersistentPreRunE(cmd, args) を呼び出します
テスト間でルートコマンドを再利用Cobra はフラグ状態を蓄積します。2 番目の Execute() は最初のフラグを見ますテストごとに新しいコマンドツリーを構築します

参考文献

  • commands-and-args.md — 完全な PreRun*/PostRun* チェーン、すべての Args 検証、PersistentPreRunE 継承ルール
  • flags.md — pflag タイプ、必須/排他的/oneRequired グループ、カスタム値タイプ、viper バインディング
  • completions.md — ShellCompDirective セット、アノテーション ベースの補完、補完のテスト
  • generators.md — man ページ、markdown、YAML、RST ドキュメント生成。cobra-cli スキャフォルダー
  • testing.md — 分離パターン、ゴールドファイル、補完のテスト、テーブル駆動コマンドテスト

相互参照

  • → 一般的な CLI アーキテクチャについては、samber/cc-skills-golang@golang-cli スキルを参照してください — プロジェクトレイアウト、終了コード、シグナル処理、I/O パターン
  • → cobra と並行して設定レイヤー化する場合は、samber/cc-skills-golang@golang-spf13-viper スキルを参照してください (フラグ → env → ファイル → デフォルト優先度)
  • → 一般的な Go テストパターンについては、samber/cc-skills-golang@golang-testing スキルを参照してください

spf13/cobra でバグまたは予期しない動作が発生した場合は、https://github.com/spf13/cobra/issues で issue をオープンしてください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
samber
リポジトリ
samber/cc-skills-golang
ライセンス
MIT
最終更新
不明

Source: https://github.com/samber/cc-skills-golang / ライセンス: MIT

関連スキル

OpenAILLM・AI開発⭐ リポ 6,054

agent-browser

AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。

by JimmyLv
汎用LLM・AI開発⭐ リポ 1,982

anyskill

AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 1,982

engram

AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。

by LeoYeAI
汎用LLM・AI開発⭐ リポ 21,584

skyvern

AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。

by Skyvern-AI
汎用LLM・AI開発⭐ リポ 1,149

pinchbench

PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。

by pinchbench
汎用LLM・AI開発⭐ リポ 4,693

openui

OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。

by thesysdev
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: samber · samber/cc-skills-golang · ライセンス: MIT