Microsoftが公開したOSSツール「tgrep」は、trigram(3文字組)インデックスとクライアント/サーバー方式を組み合わせることで、大規模コードベースでの正規表現検索を高速化するツールです。サーバーを一度起動しておけば以降の検索は瞬時に行え、ファイル変更も自動検出してインデックスを更新します。並列検索とインデックス構築にはRustのrayonフレームワーク、正規表現解析にはregex-syntax、ファイル監視にはnotifyクレートが使われています。
ripgrepとの比較ベンチマークでは、gecko-dev(388Kファイル、macOS)でripgrepの33,402msに対しtgrepは643msで51.9倍、chromium(504Kファイル、Windows)で24,576ms対1,396msで17.6倍、linux(96Kファイル、macOS)で5,390ms対256msで21.0倍という高速化が示されています。Rust製・MITライセンスで公開されています。
出典が伝えている要点
- tgrepは「Trigram-indexed grep with a client/server architecture」と説明されるツールである。
- tgrepは大規模コードベースでの高速な正規表現検索を目的としている。
- tgrepはクライアント/サーバーモデルを採用しており、サーバーを一度起動すればその後の検索は瞬時に実行できる。
- サーバーはファイル変更を自動的に検出し、インデックスを更新する機能を持つ。
- 並列検索とインデックス構築にRustのrayonフレームワークを用いている。
- 正規表現解析にはregex-syntaxを用いている。
- ファイル監視にはnotifyクレートを使用している。
- バックグラウンドインデクサーは500ファイルのバッチで並列にインデックスを構築する。
- インデックスは50Kファイルごと、または5分ごとにディスクへ定期的にフラッシュされる。
- ライセンスはMITライセンスである。
- インストール方法として、cargo install、Homebrew (brew install tgrep)、GitHub Releasesからの事前構築バイナリの3通りが提供されている。
- ベンチマークでは、gecko-dev(388Kファイル、macOS)でripgrepの33,402msに対しtgrepは643msで51.9倍高速、chromium(504Kファイル、Windows)で24,576ms対1,396msで17.6倍高速、linux(96Kファイル、macOS)で5,390ms対256msで21.0倍高速という実測値が示されている。
原文より
Trigram-indexed grep with a client/server architecture for fast regex search in large codebases locally
出典: github.com