RustでCLIツールを作る
Rustはメモリ安全性とゼロコスト抽象化を特徴とするシステムプログラミング言語です。 CLIツール開発においてもRustは人気で、高速かつシングルバイナリで配布できる点が魅力です。
プロジェクトの作成
cargo new my-cli
cd my-cli
clapで引数を解析する
clapはRustで最も使われているCLI引数パースライブラリです。
# Cargo.toml
[dependencies]
clap = { version = "4", features = ["derive"] }
use clap::Parser;
#[derive(Parser)]
#[command(name = "myapp", about = "ファイルを処理するツール")]
struct Cli {
/// 入力ファイルのパス
input: String,
/// 詳細出力を有効にする
#[arg(short, long)]
verbose: bool,
}
fn main() {
let cli = Cli::parse();
println!("入力: {}", cli.input);
if cli.verbose {
println!("詳細モード有効");
}
}
エラーハンドリング
Rustでは Result 型を使ってエラーを明示的に扱います。
use std::fs;
fn read_file(path: &str) -> Result<String, std::io::Error> {
fs::read_to_string(path)
}
fn main() {
match read_file("input.txt") {
Ok(content) => println!("{}", content),
Err(e) => eprintln!("エラー: {}", e),
}
}
リリースビルド
# 最適化された実行ファイルをビルド
cargo build --release
# ./target/release/my-cli に生成される
まとめ
Rustで作ったCLIツールはGCなしで高速に動作し、シングルバイナリで配布できます。 clapを使えば引数パースのコードも少なく済みます。ぜひ日常のツール作りにRustを試してみてください。