Rust は『現代CLIツールの第一選択肢』
ripgrep/fd/bat/exa など Rust 製 CLI ツールが標準を塗り替えています。本記事では編集部の視点で、CLI ツール開発の実践を公開情報をもとに整理します。Rust 本番運用 もご参考に。
clap の使い方
(1) derive マクロ:構造体ベース。(2) subcommand:階層的コマンド。(3) flag/option/positional引数。(4) 自動 --help。(5) shell completion:bash/zsh/fish 等。小さなコードで本格的なCLIになります。
エラー処理
(1) anyhow:アプリ向け簡易エラー。(2) thiserror:ライブラリ向け定型。(3) exit code:1〜127 で使い分け。(4) カラー出力:エラー強調。(5) logging:env_logger/tracing。
入出力の効率化
(1) BufRead/BufWrite:バッファリング。(2) 並列処理:rayon。(3) 非同期 I/O:tokio。(4) カラー出力:colored / termcolor。(5) プログレスバー:indicatif。
配布の仕組み
(1) cargo install:Rust ユーザー向け。(2) cargo-dist:マルチプラットフォーム配布。(3) Homebrew/Scoop:パッケージマネージャ統合。(4) GitHub Releases:プリビルドバイナリ。(5) Docker:コンテナ配布。Docker イメージ最適化 もご参考に。
クロスコンパイル
(1) cross:cargo cross。(2) x86_64/aarch64 Linux:標準対応。(3) macOS Universal:Intel/Apple Silicon両対応。(4) Windows MSVC/GNU。(5) 静的リンク:musl で。
テストとCI
(1) cargo test:単体テスト。(2) assert_cmd:CLI 統合テスト。(3) snapshot test (insta):出力比較。(4> CI でマルチプラットフォーム。(5) cargo audit:依存セキュリティ。CI/CD 実践 もご参考に。
失敗しがちなパターン
(1) 所有権でハマる:clone 連発。(2) panicで強制終了:適切なエラー処理なし。(3) 遅いI/O:バッファ未使用。(4) 配布の悩み:cargo install のみ。(5) テスト不足:CLI 出力の品質低下。対策は、(1)Cow/&str 活用、(2)Result 徹底、(3)BufRead/BufWrite、(4)cargo-dist、(5)snapshot test、です。