clapの基礎
引数の解析
「clapの基礎」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。
clap を使う理由
clap(Command Line Argument Parser)は、Rust で CLI を構築するための事実上の標準クレートです。
- 引数、フラグ、オプションを解析します
--helpと--versionを自動生成します- 入力を検証し、分かりやすいエラーを報告します
clap がなければ、std::env::args() を手動で反復処理し、あらゆる例外的なケースにも自分で対応する必要があります。
手作業で args を読む
clap を使う前に、基本的な方法を確認しておくと役立ちます。std::env::args() はイテレーターを返し、最初の要素はプログラム名です。
fn main() {
let args: Vec<String> = std::env::args().collect();
println!("Program: {}", args[0]);
println!("Got {} extra arg(s)", args.len() - 1);
}Cargo.toml への clap の追加
clap を使うには、依存関係として宣言します。derive feature により、マクロベースの API が使えるようになります。
cargo add clap --features derive
この手順はターミナルで実行し、プロジェクトファイルを編集するため、ここでは実行しません。
[dependencies]
clap = { version = "4", features = ["derive"] }builder API
clap には2つのスタイルがあります。builder API は、メソッド呼び出しをチェーンして実行時に Command を構築します。
use clap::{Command, Arg};
fn main() {
let cmd = Command::new("greet")
.arg(Arg::new("name"));
let matches = cmd.get_matches();
// access values from matches
}位置引数
位置引数は、フラグではなく順序によって指定する引数です。ここでは name がコマンドラインから直接読み取られます。
greet Aliceは name を Alice に設定します
use clap::{Command, Arg};
fn main() {
let m = Command::new("greet")
.arg(Arg::new("name").required(true))
.get_matches();
let name = m.get_one::<String>("name").unwrap();
println!("Hello, {}!", name);
}オプションのフラグ
フラグは、真偽値を切り替えるスイッチです。ArgAction::SetTrue を使うと、フラグの存在によって bool が true になります。
--loudはフラグを有効にします
use clap::{Command, Arg, ArgAction};
fn main() {
let m = Command::new("greet")
.arg(Arg::new("loud").long("loud").action(ArgAction::SetTrue))
.get_matches();
let loud = m.get_flag("loud");
println!("loud = {}", loud);
}値を持つオプション
オプションは、--count 3 のように値を受け取ります。使いやすいように short 名と long 名を指定します。
use clap::{Command, Arg};
fn main() {
let m = Command::new("greet")
.arg(Arg::new("count").short('c').long("count"))
.get_matches();
if let Some(c) = m.get_one::<String>("count") {
println!("count = {}", c);
}
}デフォルト値
default_value を使うと、引数にデフォルト値を設定して省略できるようにできます。
--countがない場合は 1 になります
use clap::{Command, Arg};
fn main() {
let m = Command::new("greet")
.arg(Arg::new("count").long("count").default_value("1"))
.get_matches();
let count = m.get_one::<String>("count").unwrap();
println!("count = {}", count);
}結果のシミュレーション
clap をインストールしていなくても、解析後の値がどのようになるかをモデル化できます。これは clap が行う処理を示す、素の Rust による代替例です。
fn main() {
let name = "Alice";
let count: u32 = 3;
for _ in 0..count {
println!("Hello, {}!", name);
}
}ヘルプの自動生成
clap は、引数のメタデータから --help を自動的に構築します。about と help の文字列を追加すると、より役立つ内容になります。
use clap::{Command, Arg};
fn main() {
Command::new("greet")
.about("Greets a person")
.arg(Arg::new("name").help("Who to greet"))
.get_matches();
}バージョンフラグ
バージョンを一度設定すれば、clap が --version を用意します。crate_version! マクロは Cargo.toml からバージョンを取得します。
use clap::Command;
fn main() {
Command::new("greet")
.version("1.0.0")
.get_matches();
}理解度チェック
clap の基本を理解できているか確認しましょう。
まとめ
clap の基礎を学びました。
derivefeature を付けて追加します- builder API は
CommandとArgを使用します - 位置引数は順序で指定し、フラグには
SetTrueを使い、オプションは値を受け取ります default_valueはデフォルト値を提供します--helpと--versionは自動生成されます
次は、サブコマンドを使ってより大きな CLI を構成します。
よくある質問
「clapの基礎」レッスンは無料ですか?
はい。「clapの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。
「clapの基礎」で何を学びますか?
引数の解析 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「clapの基礎」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- clapの基礎
- サブコマンド
- Derive API
- 検証とヘルプ