0Pricing
Learn Rust Coding · レッスン

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 の基礎を学びました。

  • derive feature を付けて追加します
  • 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. clapの基礎
  2. サブコマンド
  3. Derive API
  4. 検証とヘルプ
← Learn Rust Codingに戻る