Rustは勉強中
rustでコンパイルしたバイナリに対して、実行時にパラメータやオプションを渡したい時がある。
そんなときに、clapというライブラリを使ったので書き溜め。
Clap
ClapはRust用コマンドライン引数パーサーです。
コマンドライン、コンソール、ターミナルアプリケーションを書く際に、コマンドライン引数やサブコマンドを解析するためのライブラリです。
今回使用しているバージョンは「3.0.0-beta.4」です。
cargo で追加
まずは、cargo addでライブラリを追加する。
1 |
cargo add clap |
または、Cargo.tomlに直書きする。
1 2 |
[dependencies] clap = "3.0.0-beta.4" |
Builder Patternで
今回は、Builder Patternを使った方法にします。
macroを使うなど複数の方法があるのですが、Builder Patternのほうがより細かく扱えるのでこっちをよく使う。
versionについては、Cargo.tomlから取得するようにしている。
Appのビルドと、Argのビルドが重なっているので読みづらいかも。
Appでよく使う関数
Appでよく使う関数は
./application -h を実行した際に表示される値が多い。
- version: バージョン情報を書く
- author: 著者を書く
- about: このアプリケーション情報を書く
- arg: オプションやサブコマンドを書く(Arg)
Argでよく使う関数
Argは ./application -hでも出力されるし
実際のパーサーで使用される。
- about: ヘルプ時に出力される内容を書く
- short: ショートオプション
- long: ロングオプション
- value_name: ヘルプドキュメント内のオプションや位置引数の値の名前を書く
- takes_value: 引数が実行時に値を取る場合、trueにする
- default_value: 指定されていない場合の引数の値を書く
サンプルはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
use clap::{App, Arg}; use std::env; fn main() { let matches = App::new("SampleApp") // アプリケーション名 .version(env!("CARGO_PKG_VERSION")) // バージョン情報 .author("Norio4") // 作者情報 .about("Sample Application Omohikane") // このアプリについて .arg(Arg::new("CONFIG") // 出力先を定義 .about("config file name") // ヘルプメッセージ .short('c') // ショートコマンド .long("config") // ロングコマンド .value_name("CONFIG") // ヘルプドキュメント内のオプションや位置引数の値の名前を指定します .takes_value(true) // 引数に対して値を持つ ) .arg(Arg::new("URL") .about("Requst URL") .value_name("URL") .short('u') .long("url") .takes_value(true) .default_value("https://example.com") ) .build(); } |
引数の取得方法
実際にプログラム内で引数の値を参照する方法はこんな感じ。
1 2 3 4 5 6 |
if let Some(c) = matches.value_of("CONFIG") { println!("CONFIGの値: {}", c); } if let Some(u) = matches.value_of("URL") { println!("URLの値: {}", u); } |
その他、subcommandとか拡張性がとても高いので公式をどうぞ。
じゃあね〜〜〜〜。