Rust 初学者向けの grep クローン CLI ツール。
このプロジェクトは Rust の学習を目的とした grep クローンです。 段階的に機能を追加していく設計になっています。
| Step | 機能 | 状態 |
|---|---|---|
| Step 1 | 単一ファイル検索 | ✅ 完了 |
| Step 2 | コマンドライン引数 (clap) | ✅ 完了 |
| Step 3 | ディレクトリ再帰検索 (walkdir) | ✅ 完了 |
| Step 4 | 正規表現対応 (regex) | 未実装 |
| Step 5 | カラー出力 (colored) | 未実装 |
| Step 6 | 並列検索 (rayon) | 未実装 |
cd rgrep
cargo build --release# 基本的な使い方
cargo run -- <PATTERN> <PATH>
# 単一ファイル検索
cargo run -- "hello" file.txt
# 大文字小文字を無視 (-i)
cargo run -- -i "HELLO" file.txt
# 行番号を表示 (-n)
cargo run -- -n "pattern" file.txt
# オプション組み合わせ
cargo run -- -i -n "pattern" file.txt
# ディレクトリ再帰検索
cargo run -- "fn main" ./src| オプション | 説明 |
|---|---|
-i, --ignore-case |
大文字小文字を区別しない |
-n, --line-number |
行番号を表示 |
-h, --help |
ヘルプを表示 |
-V, --version |
バージョンを表示 |
rgrep/
├── Cargo.toml # 依存関係定義
├── README.md # このファイル
├── src/
│ ├── main.rs # CLI エントリポイント
│ ├── lib.rs # 公開 API
│ ├── search.rs # 検索ロジック
│ └── walker.rs # ディレクトリ走査
└── tests/
└── integration_test.rs # 統合テスト
| クレート | バージョン | 用途 |
|---|---|---|
| clap | 4.x | コマンドライン引数解析 |
| anyhow | 1.x | エラーハンドリング |
| walkdir | 2.x | ディレクトリ再帰走査 |
| tempfile | 3.x | テスト用一時ファイル (dev) |
# 全テスト実行
cargo test
# 特定のテストのみ
cargo test test_single_file_search- ユニットテスト: 7 件 (search.rs: 4, walker.rs: 3)
- 統合テスト: 6 件
std::fs::read_to_stringによるファイル読み込みResult<T, E>と?演算子- イテレータと
filter、enumerate
- derive マクロ (
#[derive(Parser)]) - 構造体による引数定義
Option型とデフォルト値
PathBufとPathの違い- ファイル/ディレクトリの判定
- エラーのスキップ処理
regex = "1"Regex::new()でパターンコンパイルregex.is_match()でマッチ判定
colored = "2"- マッチ部分をハイライト
- ファイル名を色分け
rayon = "1"par_iter()による並列イテレーション- 大規模ディレクトリでのパフォーマンス向上
MIT