domain-cli
CLIツール開発時に、引数解析やサブコマンド、インタラクティブな操作、カラフルな表示、設定ファイル、シェル補完など、コマンドラインアプリケーションに必要な機能を効率的に構築するSkill。
📜 元の英語説明(参考)
Use when building CLI tools. Keywords: CLI, command line, terminal, clap, structopt, argument parsing, subcommand, interactive, TUI, ratatui, crossterm, indicatif, progress bar, colored output, shell completion, config file, environment variable, 命令行, 终端应用, 参数解析
🇯🇵 日本人クリエイター向け解説
CLIツール開発時に、引数解析やサブコマンド、インタラクティブな操作、カラフルな表示、設定ファイル、シェル補完など、コマンドラインアプリケーションに必要な機能を効率的に構築するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o domain-cli.zip https://jpskill.com/download/9253.zip && unzip -o domain-cli.zip && rm domain-cli.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9253.zip -OutFile "$d\domain-cli.zip"; Expand-Archive "$d\domain-cli.zip" -DestinationPath $d -Force; ri "$d\domain-cli.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
domain-cli.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
domain-cliフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
CLI Domain
レイヤー3: ドメイン制約
ドメイン制約 → 設計への影響
| ドメインルール | 設計制約 | Rust での実装 |
|---|---|---|
| ユーザーエルゴノミクス | 明確なヘルプ、エラー | clap の derive マクロ |
| 設定の優先順位 | CLI > 環境変数 > ファイル | 階層化された設定のロード |
| 終了コード | エラー時は非ゼロ | 適切な Result のハンドリング |
| 標準出力/標準エラー出力 | データ vs エラー | エラーには eprintln! |
| 割り込み可能 | Ctrl+C を処理 | シグナルハンドリング |
重要な制約
ユーザーコミュニケーション
ルール: エラーは標準エラー出力へ、データは標準出力へ
理由: パイプ可能な出力、スクリプト化
RUST: エラーには eprintln!、データには println!
設定の優先順位
ルール: CLI 引数 > 環境変数 > 設定ファイル > デフォルト値
理由: ユーザーの期待、オーバーライド機能
RUST: clap + figment/config による階層化された設定
終了コード
ルール: エラーが発生した場合は非ゼロを返す
理由: スクリプト統合、自動化
RUST: main() -> Result<(), Error> または明示的な exit()
トレースダウン ↓
制約から設計へ (レイヤー2):
"引数のパースが必要"
↓ m05-type-driven: 引数のための構造体を Derive する
↓ clap: #[derive(Parser)]
"設定の階層化が必要"
↓ m09-domain: 設定をドメインオブジェクトとして扱う
↓ figment/config: レイヤー化されたソース
"進捗状況の表示が必要"
↓ m12-lifecycle: RAII としてのプログレスバー
↓ indicatif: ProgressBar
主要なクレート
| 目的 | クレート |
|---|---|
| 引数パース | clap |
| インタラクティブなプロンプト | dialoguer |
| プログレスバー | indicatif |
| 色付き出力 | colored |
| ターミナル UI | ratatui |
| ターミナル制御 | crossterm |
| コンソールユーティリティ | console |
デザインパターン
| パターン | 目的 | 実装 |
|---|---|---|
| 引数構造体 | 型安全な引数 | #[derive(Parser)] |
| サブコマンド | コマンド階層 | #[derive(Subcommand)] |
| 設定レイヤー | オーバーライドの優先順位 | CLI > 環境変数 > ファイル |
| 進捗状況 | ユーザーフィードバック | ProgressBar::new(len) |
コードパターン: CLI 構造
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "myapp", about = "My CLI tool")]
struct Cli {
/// Enable verbose output
#[arg(short, long)]
verbose: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Initialize a new project
Init { name: String },
/// Run the application
Run {
#[arg(short, long)]
port: Option<u16>,
},
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Init { name } => init_project(&name)?,
Commands::Run { port } => run_server(port.unwrap_or(8080))?,
}
Ok(())
}
よくある間違い
| 間違い | ドメイン違反 | 修正 |
|---|---|---|
| 標準出力へのエラー出力 | パイプ処理を壊す | eprintln! |
| ヘルプテキストがない | UX が悪い | #[arg(help = "...")] |
| エラー時のパニック | 悪い終了コード | Result + 適切なハンドリング |
| 長い処理に対する進捗表示がない | ユーザーの不安 | indicatif |
レイヤー1へのトレース
| 制約 | レイヤー2のパターン | レイヤー1の実装 |
|---|---|---|
| 型安全な引数 | Derive マクロ |
clap Parser |
| エラーハンドリング | Result の伝播 |
anyhow + 終了コード |
| ユーザーフィードバック | 進捗状況の RAII |
indicatif ProgressBar |
| 設定の優先順位 | ビルダーパターン | レイヤー化されたソース |
関連スキル
| いつ | 参照 |
|---|---|
| エラーハンドリング | m06-error-handling |
| 型駆動の引数 | m05-type-driven |
| 進捗状況のライフサイクル | m12-lifecycle |
| 非同期 CLI | m07-concurrency |
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
CLI Domain
Layer 3: Domain Constraints
Domain Constraints → Design Implications
| Domain Rule | Design Constraint | Rust Implication |
|---|---|---|
| User ergonomics | Clear help, errors | clap derive macros |
| Config precedence | CLI > env > file | Layered config loading |
| Exit codes | Non-zero on error | Proper Result handling |
| Stdout/stderr | Data vs errors | eprintln! for errors |
| Interruptible | Handle Ctrl+C | Signal handling |
Critical Constraints
User Communication
RULE: Errors to stderr, data to stdout
WHY: Pipeable output, scriptability
RUST: eprintln! for errors, println! for data
Configuration Priority
RULE: CLI args > env vars > config file > defaults
WHY: User expectation, override capability
RUST: Layered config with clap + figment/config
Exit Codes
RULE: Return non-zero on any error
WHY: Script integration, automation
RUST: main() -> Result<(), Error> or explicit exit()
Trace Down ↓
From constraints to design (Layer 2):
"Need argument parsing"
↓ m05-type-driven: Derive structs for args
↓ clap: #[derive(Parser)]
"Need config layering"
↓ m09-domain: Config as domain object
↓ figment/config: Layer sources
"Need progress display"
↓ m12-lifecycle: Progress bar as RAII
↓ indicatif: ProgressBar
Key Crates
| Purpose | Crate |
|---|---|
| Argument parsing | clap |
| Interactive prompts | dialoguer |
| Progress bars | indicatif |
| Colored output | colored |
| Terminal UI | ratatui |
| Terminal control | crossterm |
| Console utilities | console |
Design Patterns
| Pattern | Purpose | Implementation |
|---|---|---|
| Args struct | Type-safe args | #[derive(Parser)] |
| Subcommands | Command hierarchy | #[derive(Subcommand)] |
| Config layers | Override precedence | CLI > env > file |
| Progress | User feedback | ProgressBar::new(len) |
Code Pattern: CLI Structure
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "myapp", about = "My CLI tool")]
struct Cli {
/// Enable verbose output
#[arg(short, long)]
verbose: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Initialize a new project
Init { name: String },
/// Run the application
Run {
#[arg(short, long)]
port: Option<u16>,
},
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
match cli.command {
Commands::Init { name } => init_project(&name)?,
Commands::Run { port } => run_server(port.unwrap_or(8080))?,
}
Ok(())
}
Common Mistakes
| Mistake | Domain Violation | Fix |
|---|---|---|
| Errors to stdout | Breaks piping | eprintln! |
| No help text | Poor UX | #[arg(help = "...")] |
| Panic on error | Bad exit code | Result + proper handling |
| No progress for long ops | User uncertainty | indicatif |
Trace to Layer 1
| Constraint | Layer 2 Pattern | Layer 1 Implementation |
|---|---|---|
| Type-safe args | Derive macros | clap Parser |
| Error handling | Result propagation | anyhow + exit codes |
| User feedback | Progress RAII | indicatif ProgressBar |
| Config precedence | Builder pattern | Layered sources |
Related Skills
| When | See |
|---|---|
| Error handling | m06-error-handling |
| Type-driven args | m05-type-driven |
| Progress lifecycle | m12-lifecycle |
| Async CLI | m07-concurrency |