Create CLI
CLI 設計(構文 + 動作)、人間優先、スクリプトフレンドリー。
最初にやること
- •
agent-kit/skills/create-cli/references/cli-guidelines.mdを読んでデフォルト基準として適用 - •上流/完全ガイドライン: https://clig.dev/
- •インターフェースを決めるのに必要な最小限の確認質問のみ
確認(高速)
質問し、ユーザーが不明な場合はベストゲスのデフォルトで進む:
- •コマンド名 + 一文の目的
- •主なユーザー: 人間、スクリプト、または両方
- •入力ソース: 引数 vs stdin、ファイル vs URL、シークレット(フラグ経由は禁止)
- •出力契約: 人間用テキスト、
--json、--plain、終了コード - •対話性: プロンプト許可?
--no-input必要?破壊的操作の確認? - •設定モデル: フラグ/環境変数/設定ファイル、優先順位、XDG vs リポジトリローカル
- •プラットフォーム/ランタイム制約: macOS/Linux/Windows、単一バイナリ vs ランタイム
成果物(出力するもの)
CLI 設計時、ユーザーが実装できるコンパクトな仕様を作成:
- •コマンドツリー + USAGE 概要
- •引数/フラグ表(型、デフォルト、必須/任意、例)
- •サブコマンドの意味(各動作、冪等性、状態変更)
- •出力ルール: stdout vs stderr、TTY 検出、
--json/--plain、--quiet/--verbose - •エラー + 終了コードマップ(主な失敗モード)
- •安全ルール:
--dry-run、確認、--force、--no-input - •設定/環境変数ルール + 優先順位(フラグ > 環境変数 > プロジェクト設定 > ユーザー設定 > システム)
- •シェル補完(該当する場合)
- •5-10 の実行例(一般的なフロー、パイプ/stdin 例を含む)
デフォルト規約
- •
-h/--helpは常にヘルプを表示し他の引数を無視 - •
--versionはバージョンを stdout に出力 - •主要データは stdout、診断/エラーは stderr
- •機械出力用に
--jsonを追加、安定した行ベーステキスト用に--plainを検討 - •プロンプトは stdin が TTY の時のみ、
--no-inputでプロンプト無効化 - •破壊的操作: 対話的確認 + 非対話的は
--forceまたは明示的--confirm=...が必要 - •
NO_COLOR、TERM=dumbを尊重、--no-colorを提供 - •Ctrl-C: 高速終了、制限付きクリーンアップ、可能なら crash-only
テンプレート
CLI 仕様スケルトン
code
1. **名前**: `mycmd` 2. **一文説明**: `...` 3. **USAGE**: - `mycmd [global flags] <subcommand> [args]` 4. **サブコマンド**: - `mycmd init ...` - `mycmd run ...` 5. **グローバルフラグ**: - `-h, --help` - `--version` - `-q, --quiet` / `-v, --verbose` - `--json` / `--plain` 6. **I/O 契約**: - stdout: - stderr: 7. **終了コード**: - `0` 成功 - `1` 一般的な失敗 - `2` 無効な使用法(パース/検証) 8. **環境変数/設定**: - 環境変数: - 設定ファイルパス + 優先順位: 9. **例**: - …