RustにはCLAP(Command Line Argument Parser for Rust)という優秀なコマンドラインパーサーがあるそうなので、こいつを使って遊んでいきます。
実際のところ
導入
$ cargo add clap --features derive
とやるか、
tomlに
clap = { version = "4.5.20", features = ["derive"] }
とやると導入できます。
さて、このfeaturesで参照されるderiveというやつは、Rustの標準機能であるderiveを使いますよ、という宣言です。
deriveという言葉は「(自動的に)導出」、「自動生成」といった意味の単語で、
今回は以下の様なコード生成マクロを有効にするという意味で使われます。
#[derive(Parser)]
といった属性マクロを有効にする為のオプションとして機能します。
スクリプト
use clap::{Parser, Subcommand}; #[derive(Parser)] #[clap(author, version, about)] struct Cli { #[clap(subcommand)] command: Commands, } #[derive(Subcommand)] enum Commands { Add { #[clap(value_parser)] description: String, }, List, } fn main() { let cli = Cli::parse(); match cli.command { Commands::Add { description } => { println!("タスクを追加: {}", description); } Commands::List => { println!("タスク一覧を表示"); } } }
ためす
"cargo run"にも引数をつけないといけません
$ cargo run -- add "new task" Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.01s Running `/home/ubuntu/rustsample/grrs/target/debug/grrs add 'new task'` タスクを追加: new task