【Rust実践】外部クレートで爆速開発!CLIツール作成と「トレイト」の基本

この記事は約5分で読めます。
スポンサーリンク

前回は「エラー処理」や「コレクション」といった、Rustの堅牢さを支える仕組みを学びました。

「基礎はわかったけど、そろそろ何か役に立つものを作りたい!」

そんなあなたのために、今回は「外部クレート(ライブラリ)」を組み合わせて、WindowsのPowerShellやコマンドプロンプトでガシガシ使える「爆速ファイル検索ツール」を作っていきます。


1. Rustのエコシステム「crates.io」は宝の山

Rustには、世界中のエンジニアが公開している便利な部品が集まるcrates.ioというサイトがあります。

Windowsでの開発でも、これを使わない手はありません。 「コマンドラインの引数を解析したい」「文字に色をつけたい」といった要望は、すでに誰かが超高性能なライブラリ(クレート)として解決してくれています。

2. 「トレイト」:型にスキルを装備させる

本格的なコードを書く前に、Rustの重要ワード「トレイト(Trait)」をさらっと押さえておきましょう。

トレイトは、一言でいうと「その型ができること」の定義です。

  • Displayトレイト:画面に表示できるスキル
  • Debugトレイト:開発者向けに中身を覗けるスキル

今回のコードでも、「構造体にコマンド解析スキルを与える」ためにトレイトの仕組みが登場します。「特定のルールに従わせるための共通規格」だと思えばOKです!

3. 実践!検索ツール「Simple Search (ss)」の作成

WindowsのPowerShellから呼び出せる、簡易版grep(ファイル内検索)ツールを作ってみましょう。

使うクレート

  1. clap: Windowsの複雑なコマンド引数も簡単に扱える定番ツール。
  2. colored: 無機質なターミナルの文字に色をつけて見やすくします。

ステップ1:プロジェクト準備

PowerShellを開いて、プロジェクトを作成します。

cargo new simple_search
cd simple_search

生成されたファイル内のCargo.tomlを開き、[dependencies]に以下を追加します。

[dependencies]
clap = { version = "4.0", features = ["derive"] }
colored = "2.0"

ステップ2:Windowsのパスも安心なコードを書く

src/main.rsを以下のように書き換えます。

use clap::Parser;
use colored::*;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::path::PathBuf; // Windowsのパス記法を柔軟に扱う

/// シンプルなファイル検索ツール
#[derive(Parser)]
#[command(name = "ss", version = "1.0", about = "指定したファイルから文字列を検索します")]
struct Cli {
    /// 検索したい文字列
    pattern: String,
    /// ファイルのパス (C:\Users\... のような形式もOK)
    path: PathBuf,
}

fn main() {
    // 1. 引数をパース(clapが自動でエラーチェックもしてくれます)
    let args = Cli::parse();

    // 2. ファイルを開く
    let file = File::open(&args.path).expect("ファイルが見つかりません。パスを確認してください。");
    let reader = BufReader::new(file);

    println!("Searching for '{}' in {}...", args.pattern.cyan(), args.path.display());

    // 3. 検索実行
    for (line_num, line) in reader.lines().enumerate() {
        let content = line.expect("読み込みに失敗しました");
        if content.contains(&args.pattern) {
            println!("{}: {}", (line_num + 1).to_string().yellow(), content);
        }
    }
}

ステップ3:ビルドと実行

適当なテキストファイル(例:memo.txt)を用意して、実行してみてください。

cargo run -- "検索文字" memo.txt

今回試したmemo.txtは以下です。

こんにちは
今日も寒いですね。
もう2月の中頃にさしかかるので、ぼちぼちあったかくなってきてほしいですね。
検索文字 

今回の実行結果です。
4行目に文字があることを検出してくれています。

4. Windowsユーザーに嬉しいポイント

パス操作が楽! (PathBuf)

Windowsではパスの区切りが \ ですが、RustのPathBufを使うと、OSの違いを吸収してくれます。将来的にLinuxなどで動かしたくなった時も、コードを書き換える必要はありません。

clapによる自動ヘルプ生成

cargo run -- --help と打ってみてください。自分で何も書いていないのに、Windowsのツールらしい綺麗なヘルプ画面が表示されるはずです。これも外部クレートの強力な恩恵です。

以下私の環境での実行結果です。

まとめ:Rustの本当の力がここから始まる

第5回、お疲れ様でした! これまでの学習は「材料を揃える段階」でしたが、今回でついに「動く道具」を作り上げることができました。

  • 外部クレートを使えば、Windowsツール開発が爆速になる。
  • トレイトは型に能力を授ける便利な仕組み。
  • Cargoがライブラリ管理を全部やってくれる。

ここまでの知識があれば、次は「計算機」や「タスク管理ツール」など、自分の欲しいツールを自在に作れるようになりますよ!

コメント

タイトルとURLをコピーしました