Ripgrep、grep、ag、Git grep、ucg、pt、siftより高速な検索技術(2016年)
(blog.burntsushi.net)要約: 新しいコマンドライン検索ツール ripgrep の紹介
ripgrepは、The Silver Searcher の使いやすさと GNU grep の性能を組み合わせた新しいコマンドライン検索ツールです。- Linux、macOS、Windows 向けのバイナリを提供しており、Rust で書かれています。
- 単一ファイルおよび大規模ディレクトリ検索において、性能と正確性の面で優れています。
- Unicode サポートが非常に優れており、メモリマップを使用するツールより一般的に高速です。
ripgrep の紹介
長所
- 他の検索ツールより高速で、
.gitignoreによって無視されるファイルは検索しません。 - 特定のファイルタイプだけを検索したり除外したりする機能を提供します。
grepの多くの機能をサポートし、Unicode を常にサポートします。- PCRE2 正規表現エンジンをオプションで使用できます。
- さまざまなテキストエンコーディングと圧縮ファイルの検索をサポートします。
- 任意の入力前処理フィルタをサポートします。
反対意見
- POSIX 標準には準拠しておらず、
grepほど普遍的ではありません。 - 他のツールにある特定の機能やバグが ripgrep には存在しない場合があります。
- 性能の特定のエッジケースでは、ripgrep が他のツールより遅いことがあります。
インストール
ripgrepのバイナリ名はrgであり、さまざまなプラットフォームでインストールできます。- Homebrew、Arch Linux、Rust プログラマ向けのインストール方法が用意されています。
- ソースから直接ビルドすることも可能です。
クイックツアー
ripgrepのコマンドラインでの使い方は、他の類似ツールと大きくは変わりません。- ターミナル出力、色、行番号表示などを自動でサポートします。
- さまざまな検索オプションとパターンを使って検索できます。
ripgrep の構造
背景
grepとackの派生ツール群の違いと共通点を説明します。ripgrepは、grepの大容量ファイル検索能力とackの「スマートな」検索デフォルト設定を組み合わせています。
ファイル検索の準備
- 高速なディレクトリイテレータの使用とファイルパスのフィルタリングが重要です。
.gitignoreファイルの規則を高速に適用することが性能に影響します。
検索
- 高速な正規表現エンジンとリテラル最適化が重要です。
- ファイル全体ではなく行ごとに検索するのではなく、大きなバッファを一度に検索します。
出力
- 検索結果をメモリバッファに書き込み、それを
stdoutにシリアライズして出力します。
方法論
概要
- ユーザーが解決しようとしている問題に焦点を当て、公正なベンチマークに努めています。
- さまざまなツールをベンチマークし、各ツールの基本動作の違いを考慮して比較します。
GN⁺ の意見
この文章で最も重要なのは、ripgrep が既存の検索ツールと比べてどのような長所を持っているかを詳しく説明している点です。特に、高速な性能、Unicode サポート、さまざまなファイル形式やエンコーディングへの対応は、ユーザーにとって魅力的な理由になり得ます。この文章が興味深いのは、新しいツールが既存ツールとどう異なるのか、そしてその違いが実際のユーザーにどのような影響を与え得るのかを理解する助けになるからです。
1件のコメント
Hacker Newsのコメント
gitignoreルールを自動適用する機能を便利に使っている。