コマンドライン引数を取得するコマンドライン引数を取得する。 まずはパッケージを作成する。 $ cargo new hello-command-line 標準ライブラリを使ってコマンドライン引数を取得するコマンドライン引数の取得は標準ライブラリのenvを使えば簡単にできる。 use std::env; fn main() { // へぇー、main関数の引数じゃないんだね let args: Vec このコードを試してみるには、cargo runコマンドに引数(ただし、-の付いた引数はcargoコマンド側が解釈してしまうので不可)を渡せば、実行モジュールに引数が渡される。因みにインデックス0はプログラム名となっているので、コマンドライン引数はインデックス1からとなる。 $ cargo run test 123 ["target/debug/hello-command-line", "test", "123"] もちろん、cargoコマンドは使わずに、生成されたバイナリを直接起動することもできる。デバッグビルドのバイナリはtarget/debugディレクトリ、リリースビルドのバイナリはtarget/releaseディレクトリに生成されているはずだ。 $ ./hello-command-line test 123 ["./hello-command-line", "test", "123"] Clapを使ってコマンドライン引数をパースする簡単なコマンドライン引数なら標準ライブラリだけで問題はないが、オプション引数も設けたいならClapが便利だ。Clapは多機能なコマンドラインパーサーで、各種のコマンドライン引数のパースはもちろん、ヘルプ等も生成できる。 Clapを使うにはCargo.tomlに依存関係を追加する。 [dependencies] clap = "2" そして、以下のコードを書くだけで--helpオプションと--versionオプションが用意される。 use clap::App; fn main() { App::new("コマンドライン引数サンプル") .version("1.0.0") .get_matches(); } cargoコマンドにも--helpオプションが存在するために、このコードはcargo buildコマンドでビルドして、生成されたバイナリを直接実行しよう。リリースビルドにしたい場合は--releaseオプションを指定しても良い。 $ cargo build --release バイナリのあるディレクトリに移動し、以下のコマンドを実行してみる。 $ ./hello-command-line --version コマンドライン引数サンプル 1.0.0 $ ./hello-command-line --help コマンドライン引数サンプル 1.0.0 USAGE: hello-command-line FLAGS: -h, --help Prints help information -V, --version Prints version information 例えば、オプションでなく処理に必要なファイル名等の引数はarg()で追加する。これらファイル名やオプションは、get_matches()の戻り値ArgMatchesからvalue_of()等で取得できる。 また、--helpオプションで表示される--helpオプション、及び--versionオプションの説明は、それぞれhelp_message()、version_message()で変更できる。 use clap::{App, Arg}; fn main() { let matches = App::new("コマンドライン引数サンプル") .version("1.0.0") .version_message("バージョンを表示する") .help_message("ヘルプを表示する") .arg(Arg::with_name("INPUT").help("ファイル名")) .get_matches(); if let Some(input) = matches.value_of("INPUT") { println!("ファイル名は{}です。", input); } else { println!("ファイル名が指定されていません。"); } } $ ./hello-command-line --help コマンドライン引数サンプル 1.0.0 USAGE: hello-command-line [INPUT] FLAGS: -h, --help ヘルプを表示する -V, --version バージョンを表示する ARGS: <INPUT> ファイル名 $ ./hello-command-line sample.txt ファイル名はsample.txtです。 $ ./hello-command-line ファイル名が指定されていません。 この他にも、Clapには様々な機能が用意されているので、ドキュメントを参照して活用していただきたい。 (2021/01/20)
Copyright© 2004-2021 モバイル開発系(K) All rights reserved.
[Home]
|