この資料は Rust 製のコマンドラインツール ripgrep について紹介するものです。
Rustの環境構築やツールのインストール方法については以下を参照してください
ripgrep はRustで実装された検索ツールで、正規表現パターンに基づいてカレントディレクトリ以下を再帰的に検索します。デフォルトでは、ripgrep は gitignore 規則をサポートし、隠しファイル/隠しディレクトリとバイナリファイルを自動的にスキップします。コマンド名は rg
です。
この例では、—colors
オプションでパスの表示色を変えていますが、これは環境変数 RIPGREP_CONFIG_PATH
に設定ファイルのパスを指定して、そのファイルに記述することができます。
RIPGREP_CONFIG_PATH=$HOME/dotfiles/.ripgreprc
$HOME/dotfiles/.
ripgreprc にオプション指定を追加
--colors=path:fg:cyan
このベンチマークテストでは、Linux カーネル ソース ツリー全体 (make defconfig && make -j8
を実行後) から [A-Z]+_SUSPEND
を検索します (一致するのはすべて単語である必要があります)。
タイミングは Intel i7-6900K 3.2 GHz を搭載したシステムで収集されました。
ベンチマークは1つだけでは不十分であることを覚えておいてください。より多くのベンチマークと分析による非常に詳細な比較は、ripgrepに関する私のブログの記事をご覧ください。
ツール | コマンド | 行数 | 時間 |
---|---|---|---|
ripgrep (Unicode) | rg -n -w '[A-Z]+_SUSPEND' | 452 | 0.136s |
https://www.kernel.org/pub/software/scm/git/docs/git-grep.html | git grep -P -n -w '[A-Z]+_SUSPEND' | 452 | 0.348s |
https://github.com/Genivia/ugrep | ugrep -r --ignore-files --no-hidden -I -w '[A-Z]+_SUSPEND' | 452 | 0.506s |
https://github.com/ggreer/the_silver_searcher | ag -w '[A-Z]+_SUSPEND' | 452 | 0.654s |
https://www.kernel.org/pub/software/scm/git/docs/git-grep.html | LC_ALL=C git grep -E -n -w '[A-Z]+_SUSPEND' | 452 | 1.150s |
https://github.com/beyondgrep/ack3 | ack -w '[A-Z]+_SUSPEND' | 452 | 4.054s |
https://www.kernel.org/pub/software/scm/git/docs/git-grep.html | LC_ALL=en_US.UTF-8 git grep -E -n -w '[A-Z]+_SUSPEND' | 452 | 4.205s |
上記と同じコーパスで、gitignoreファイルを無視し、代わりにホワイトリストで検索する別のベンチマークを示します。コーパスは先ほどのベンチマークと同じで、各コマンドに渡されるフラグは同等の処理を行うことを保証しています。