ripgrepは、オープンソースコミュニティで行われているRIIR(Rustで書き直し)の取り組みの優れた成果です。これは、従来のgrepコマンドの優れた代替品となることを目的としています。
ripgrepを使用するための構文は次のとおりです。
rg <pattern> [files/directories]
ripgrepを使用すると、ファイル名を指定する必要はありません。ファイル名が指定されていない場合は、すべてのファイルが検索されます。これは、検索するパターンがどのファイルに含まれているかわからない場合に非常に役立ちます。
grepを使用してすべてのファイルを検索することもできますが、ripgrepは追加の作業なしで検索を実行します。
ripgrepとは何ですか?
ripgrepは、gitignoreを考慮する再帰的な正規表現パターンマッチングツールです。 gitignoreに特定のファイル、拡張子、またはディレクトリがある場合、ripgrepはそれらを無視し、実行時間を短縮します。
ripgrepを際立たせるいくつかの機能は次のとおりです。
- ディレクトリ内でパターンを再帰的に検索します
- 出力での色の強調表示
- UTF-8、SHIFT_JISなどのさまざまなエンコード形式をサポートします
- 圧縮されたzipファイルを検索する機能
- デフォルトで非表示のファイルを無視し、検索を高速化するためにgitignoreファイルを使用します
これはgrepと考えることができますが、主にgrepが処理する生のバイトストリームではなく、ファイル/ファイルのコンテンツを検索することを目的としています。
ripgrepをインストールする
grepはほとんどのLinuxシステムにプリインストールされていますが、ripgrepにはその特権がありません。
ただし、すべての主要なLinuxディストリビューションのリポジトリで利用可能であり、パッケージマネージャーを使用してインストールできます。
Arch Linuxのユーザーであれば、パッケージのインストール方法をすでに知っています:pですが、それでも、使用する必要のあるコマンドは次のとおりです。
pacman -S ripgrep
Gentooユーザーは次のコマンドでripgrepをインストールできます:
emerge sys-apps/ripgrep
FedoraまたはRedHatを使用している場合は、ターミナルで次のコマンドを入力するときに帽子を少し傾けてください。
sudo dnf install ripgrep
openSUSEユーザー(15.1以降)は、ターミナルで次のコマンドを使用する必要があります。
sudo zypper install ripgrep
Debian Buster(v10)以降を使用しているユーザーには、aptを使用してください。 Ubuntu Cosmic Cuttlefish(18.10)以降も、ディストリビューションの公式リポジトリを使用できます。
sudo apt install ripgrep
ripgrepコマンドの使用
grepコマンドの使用法に精通している場合は、ripgrepも同様に機能することがわかります。検索文字列とファイル名を指定すると、ファイルが検索され、入力文字列がファイルの内容と一致した場所が表示されます。
このチュートリアルでは、dustプロジェクトのリポジトリのクローンを作成し、クローンされたリポジトリ内でコマンドを実行します。
Cargo.htmlファイル内の単語の説明のサンプル検索:
$ rg description Cargo.toml
3:description = "A more intuitive version of du"
53:extended-description = """\
予想どおり、ripgrepツールは指定したファイルを検索し、テキストと行番号が一致するファイルを表示しました。

検索するファイルを複数指定すると(ファイルを指定しない場合はすべて検索されます)、ripgrepは内容が一致するファイル名も判別します。

または、一致させるパターンを含む「--file」オプションを使用することもできます。一致するパターンのセットを定期的に検索する場合は、それをファイルに保存し、「-file」オプションを使用して指定できます。

特にコードリポジトリで検索する場合は、一致する行のコンテキストがあると便利な場合があります。ここでは、「-C」または「--context」オプションが役立ちます。このオプションは数値を受け入れ、一致の前後の行を表示します。

一致した行を含め、上記の数行だけを表示したい場合があります。場合によっては、一致したものも含めて、下の行だけが必要になることがあります。
オプション「-A」、「-after-context」の略、および数値を使用して、各一致後の行を表示できます。

また、各一致の前の行には、オプション「-B」、「-before-context」の略、数値を使用できます。

ripgrepが提供する列に関するいくつかのオプションがあります。
vimユーザーの場合は、「-column」フラグを高く評価します。一致したテキストの「line:column」をファイルに出力します。

列に関連する別のオプションは、「-M」または「--max-columns」です。これは、列の最大数の数値を取ります。一致した行の列がを超えると、特定の行が端末への出力から省略されたことが通知されます。

ripgrepで使用できるオプションがいくつかあります。
'-s'または'--case-sensitive'オプションを使用して、テキストと大文字と小文字を区別できます。

大文字と小文字を区別しないようにする場合は、「-i」または「--ignore-case」フラグを使用できます。

巨大なコードベースがある場合は、パターンマッチングに複数のスレッドを使用できます。 '-j'または'--threads'オプションを使用して手動でスレッドを指定できます。数値を受け入れます。
$ rg -j 4 TODO
検索結果からパターンを除外したい場合があります。これを行うには、「-v」または「--invert-match」を使用して、指定されたパターンを除外します。

ripgrepは、「-z」または「--search-zip」フラグを使用して、圧縮アーカイブ(圧縮ファイルがテキストファイルの場合)内のテキストを検索できます。このフラグには通常、バイナリファイルをテキストファイルとして扱う「-a」フラグが付いています。

ripgrepは、特にUNIXライクな環境のプログラマーとして活用できる素晴らしいツールです。
ripgrepは、名前が別のことを示唆している場合でも、動作が異なるため、grepを置き換えることを意図していません。それでも、どちらのツールも役立ちます。ユースケースによって異なります。