💻

RustでCLIツールを作る

clap + serdeで素早く作る実践コマンドラインツール

Rust製有名CLIツール:ripgrep(grep代替)、fd(find代替)、bat(cat代替)、exa(ls代替)。既存ツールより速い理由がある。

シングルバイナリで配布可能 — Pythonのようにランタイムをインストールする必要がない。起動時間がミリ秒単位でシェルスクリプトから呼んでも体感遅延がない。

基本構造

use clap::Parser;

#[derive(Parser)]
struct Cli {
    #[arg(short, long)]
    input: String,
}

clapのderiveマクロで引数パースが構造体定義だけで完了。serdeでJSON/TOML/YAML入出力も一行。

キーポイント

1

cargo new mytoolでプロジェクト生成

2

clap deriveでCLI引数構造体を定義

3

serdeで設定ファイル/データをシリアライズ

4

cargo build --releaseで最適化バイナリ生成

メリット

  • シングルバイナリ — デプロイがファイル1つ
  • 起動時間~1ms — シェルスクリプトから呼んでも速い

デメリット

  • コンパイル時間が長い — 依存性が多いと数分
  • クロスコンパイルがC依存性があると複雑になる

ユースケース

ripgrep — 数十GBコードベースを秒単位で検索 データパイプライン — JSON/CSV変換CLI