Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Clapクレートをつかって、Rustでコマンドライン引数をつかう

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

参考もと

clap - Rust