create-cli について
create-cliは、人とスクリプトの両方を想定したコマンドラインインターフェース設計を支援するスキルです。CLIガイドラインに基づき、コマンド、入出力、安全策、設定を含む実装向け仕様をまとめます。
主な機能
- 01CLIガイドラインに沿った設計
- 02コマンドツリーと引数仕様の定義
- 03入出力とエラー処理の明確化
- 04設定の優先順位と環境変数の計画
- 05プロンプトと破壊的操作の安全策
- 06実行例の提示
活用シーン
- 01新しいコマンドラインツールの仕様策定
- 02スクリプト向け出力契約の設計
- 03プロンプトと破壊的操作の確認設計
- 04設定元と優先順位の整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jakenuts/ agent-skills --skill create-cliインストール後、Claude Code で/create-cliを入力して読み込まれたか確認します。
同梱ファイルreferences/cli-guidelines.md
詳細
CLI を設計する
人を第一に考え、スクリプトからも扱いやすい CLI のインターフェース(構文と動作)を設計します。
まず最初に行うこと
references/cli-guidelines.mdを読み、デフォルトの評価基準として適用します。- 上流の完全なガイドライン:https://clig.dev/ (変更を提案する場合:https://github.com/cli-guidelines/cli-guidelines)
- インターフェースを確定するために必要な、最小限の確認質問だけをします。
確認事項(手短に)
質問してから、ユーザーが不明な場合は妥当なデフォルトを選んで進めます。
- コマンド名と、その目的を一文で説明してください。
- 主なユーザー:人、スクリプト、または両方。
- 入力元:引数と標準入力、ファイルと URL、シークレット(フラグで渡さない)。
- 出力の仕様:人向けテキスト、
--json、--plain、終了コード。 - 対話性:プロンプトを表示してよいか、
--no-inputが必要か、破壊的な操作で確認が必要か。 - 設定モデル:フラグ/環境変数/設定ファイル、優先順位、XDG とリポジトリ内のどちらを使うか。
- プラットフォーム/ランタイムの制約:macOS/Linux/Windows、単一バイナリとランタイムのどちらを使うか。
成果物(出力する内容)
CLI を設計する際は、ユーザーが実装に使える簡潔な仕様を作成します。
- コマンドツリーと USAGE の概要。
- 引数/フラグの表(型、デフォルト、必須/任意、例)。
- サブコマンドの動作(それぞれの機能、冪等性、状態の変更)。
- 出力ルール:標準出力と標準エラー、TTY の検出、
--json/--plain、--quiet/--verbose。 - エラーと終了コードの対応表(主な失敗ケース)。
- 安全性のルール:
--dry-run、確認、--force、--no-input。 - 設定/環境変数のルールと優先順位(フラグ > 環境変数 > プロジェクト設定 > ユーザー設定 > システム設定)。
- シェル補完の方針(該当する場合):インストール/見つけやすさ、生成コマンドまたは同梱スクリプト。
- 実行例 5~10 個(よくある流れを含め、パイプや標準入力の例も含めます)。
デフォルトの規約(ユーザーから別の指定がない場合)
-h/--helpは常にヘルプを表示し、ほかの引数は無視します。--versionはバージョンを標準出力に表示します。- 主なデータは標準出力に、診断メッセージやエラーは標準エラーに出力します。
- 機械可読な出力には
--jsonを追加します。行単位で安定したテキストには--plainも検討します。 - プロンプトを表示するのは標準入力が TTY の場合のみとし、
--no-inputでプロンプトを無効にします。 - 破壊的な操作では、対話型の場合は確認を行い、非対話型の場合は
--forceまたは明示的な--confirm=...を必須にします。 NO_COLORとTERM=dumbを尊重し、--no-colorを用意します。- Ctrl-C に対応し、速やかに終了します。後処理には上限時間を設け、可能な場合はクラッシュのみで終了できるようにします。
テンプレート(回答にコピーして使用)
CLI 仕様のひな形
各項目を埋め、該当しない項目は削除します。
- 名前:
mycmd - 一文での説明:
... - USAGE:
mycmd [global flags] <subcommand> [args]
- サブコマンド:
mycmd init ...mycmd run ...
- グローバルフラグ:
-h, --help--version-q, --quiet/-v, --verbose(動作を明確に定義)--json/--plain(該当する場合)
- 入出力の仕様:
- 標準出力:
- 標準エラー:
- 終了コード:
0成功1一般的な失敗2使用方法が無効(解析/検証エラー)- (本当に役立つ場合のみ、コマンド固有のコードを追加)
- 環境変数/設定:
- 環境変数:
- 設定ファイルのパスと優先順位:
- 例:
- …
注意事項
- 言語固有のパーサーライブラリを推奨するのは、求められた場合に限ります。それ以外は言語に依存しない内容にします。
- リクエストが「パラメーターの設計」の場合、実装の話に脱線しないでください。
コメント
Markdown 対応