Skip to content

sotaheavymetal21/rgrep

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rgrep - Rust grep Clone

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 件

学んだ Rust の概念

Step 1: 基本 I/O

  • std::fs::read_to_string によるファイル読み込み
  • Result<T, E>? 演算子
  • イテレータと filterenumerate

Step 2: clap によるCLI

  • derive マクロ (#[derive(Parser)])
  • 構造体による引数定義
  • Option 型とデフォルト値

Step 3: walkdir によるディレクトリ走査

  • PathBufPath の違い
  • ファイル/ディレクトリの判定
  • エラーのスキップ処理

今後の実装予定

Step 4: 正規表現対応

regex = "1"
  • Regex::new() でパターンコンパイル
  • regex.is_match() でマッチ判定

Step 5: カラー出力

colored = "2"
  • マッチ部分をハイライト
  • ファイル名を色分け

Step 6: 並列検索

rayon = "1"
  • par_iter() による並列イテレーション
  • 大規模ディレクトリでのパフォーマンス向上

ライセンス

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages