コマンドラインアプリケーション

なぜRustか?

チェックマーク付きの盾

堅牢かつ高速

短い書き捨てのスクリプトを書くときでも、Rustは高速でテストしやすく、役に立つ出力を与えてくれます。

Rustが保証するもの
チェックマーク付きの箱

配布が簡単

すべてをひとつのバイナリにコンパイルできます。あなたのユーザーがランタイムやライブラリをインストールする必要はありません。

Rustコードをリリースするには
メモと歯車

堅牢な設定管理

プラットフォームをまたいで設定ファイルを扱うのも簡単です。Rustが名前空間とフォーマットを管理します。

設定管理を始める
ヘルプマニュアル

マニュアル?できてます。

アプリケーションのマニュアルを自動生成できます。生成されたファイルをパッケージングするだけで完成です。

やり方を学ぶ
パイプ

データイン、データアウト

人間と話すのはもちろん、マシンと話すための優れたツールがRustにはあります。

マシンとコミュニケーションをとる
積み上げられた3本の丸太

柔軟なロギング

ロギングは簡単に追加できますし、ターゲットやスタイルの変更はもっと簡単です。

ログ、トレース、理解

保守性の高いコードベース

CLIアプリケーション構造

エラーは即座にキャッチ

設定ファイルが存在しなかったり壊れていたら?ある環境変数の値が空だったら?こういうケースは忘れやすいものです!しかし、Rustのエラーハンドリング手法とライブラリ設計は優れているため、 こういった「もしも」の事態をプログラムを実行するよりも前に指摘するでしょう。

Rustのエラーハンドリング
CLIはまったく難しくありません

後から拡張するのも簡単

Rustならコードを整理することも柔軟にできます。最初は一つのファイルで済んでいたものがより多くの機能が必要になった場合にも、何かを壊してしまう心配なくアプリケーションをリファクタリングできます。

Rustにおけるリファクタリング

はじめましょう!

コマンドラインアプリケーションを書くことは、Rustを学ぶ優れた方法です。

入力を定義する

use clap::Parser;

/// Read some lines of a file
#[derive(Debug, Parser)]
struct Cli {
    /// Input file to read
    file: String,
    /// Number of lines to read
    #[structopt(short = 'n')]
    num: usize,
}

ツールを書く

use std::{error::Error, fs::read_to_string};

fn main() -> Result<(), Box> {
    let args = Cli::parse();
    read_to_string(&args.file)?
        .lines()
        .take(args.num)
        .for_each(|line| println!("{}", line));
    Ok(())
}
CLIブックでもっと知る

本番環境での利用

sentry ロゴ
私たちがRustを気に入った理由の一つにcrates.ioのエコシステムがあります。 [...] 本当に素晴らしいコマンドラインインターフェイスを構築するための、非常に優れたインフラが数多く存在します。

– Armin Ronacher, Rust at Sentry – PolyConf 2017


このコードベースを利用していて後悔したことはありません。 [...] Rustを使ってCLIやコンソールベースのツールを作るというのは、私にとって予想外のボーナスのようなものでした。Rustは複数のターゲットシステム向けのコンパイルに非常に優れているのです。

– Fletcher Nichol, Taking Rust to Production – RustFest Kyiv

Habitat ロゴ