Linuxコマンド - rg
概要
ripgrep (コマンド名: rg) は、Rust で実装された高速な行指向のテキスト検索ツールである。
日常的なソースコード検索、設定ファイル調査、ログ解析、複数リポジトリの横断検索に広く利用されている。
ディレクトリを再帰的に走査し、正規表現パターンに一致する行を検索して表示する。
デフォルトで gitignore のルールを尊重し、隠しファイルやバイナリファイルを自動的にスキップする。
この自動フィルタリングを完全に無効化するには rg -uuu コマンドを使用する。
再帰検索がデフォルトであるため、明示的に -r オプションを指定する必要がない。
検索速度が非常に高く、特に大規模なコードベースや UTF-8 テキストの検索で優位性を持つ。
Windows、MacOS、Linuxをはじめとする主要プラットフォームをサポートしている。
各リリースのバイナリが GitHub Releases で提供されている。
デフォルトの正規表現エンジンは Rust の regex クレートであり、Unicodeサポートが常に有効である。
オプションでPCRE2エンジンに切り替えることができ、後読みや後方参照等の高度な正規表現が使える。
PCRE2は -P、--pcre2、--engine pcre2 等で利用できる。
grep、The Silver Searcher (ag)、ack 等の検索ツールと類似しているが、速度と使いやすさで差別化されている。
ファイル種別による絞り込み (-t)、圧縮ファイルの検索 (-z)、設定ファイルによる既定値の管理等の機能を持つ。
単一ファイルだけでなく、巨大なソースツリーやログディレクトリを横断して検索する用途に向いている。
検索対象を細かく絞り込みたい場合は、ファイル種別、隠しファイル、ignore ルール、圧縮ファイル等をオプションで制御できる。
インストール方法も多く、Linuxのパッケージ管理システム、GitHub Releases、cargo install 等が利用できる。
ソースコードからビルドする場合は、Rust 1.85.0以降のstableツールチェインが必要である。
公式配布バイナリの多くはPCRE2を含んでいるが、Linuxディストリビューションのパッケージでは構成が異なる場合がある。
rgのインストール
多くのLinuxディストリビューションでは、パッケージ管理システムでripgrepをインストールすることができる。
RHEL
sudo dnf install ripgrep
RHELでは、EPEL、CRB、CodeReady Builder 等の追加リポジトリ設定が必要になる場合がある。
ビルド済みパッケージが利用できない環境では、後述のソースコードからのビルドを利用するとよい。
SUSE
sudo zypper install ripgrep
その他のインストール方法
Homebrew (MacOS、Linux)、Chocolatey (Windows)、cargo等でもインストール可能である。
また、最新バイナリは GitHub Releases から直接ダウンロードできる。
ソースコードからインストール
ripgrepはRustで記述されており、ソースコードからビルドするにはRustツールチェインが必要である。
ビルドには、Rust 1.85.0以降が必要である。
Rustのインストール方法については インストール - Rust を参照すること。
RHEL
まず、ビルドに必要なツールをインストールする。
sudo subscription-manager repos --enable codeready-builder-for-rhel-$(rpm -E %rhel)-$(arch)-rpms sudo dnf install gcc curl
Rustツールチェインをrustupでインストールする。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y . "$HOME/.cargo/env" rustup toolchain install stable rustup default stable
PCRE2サポートを有効にする場合は、追加で開発パッケージをインストールする。
sudo dnf install pkgconf-pkg-config pcre2-devel
MUSLによる静的リンクビルドを行う場合は、MUSLツールチェインを追加する。
sudo dnf install musl-gcc rustup target add x86_64-unknown-linux-musl
SUSE
まず、ビルドに必要なツールをインストールする。
sudo zypper install gcc curl rustup
Rustツールチェインを設定する。
rustup toolchain install stable rustup default stable . "$HOME/.cargo/env"
PCRE2 サポートを有効にする場合は、追加で開発パッケージをインストールする。
sudo zypper install pkg-config pcre2-devel
MUSL による静的リンクビルドを行う場合は、MUSLツールチェインを追加する。
sudo zypper install musl-devel rustup target add x86_64-unknown-linux-musl
ビルド手順
ソースコードを取得してビルドする。
git clone https://github.com/BurntSushi/ripgrep.git cd ripgrep
標準的なビルドは以下のコマンドで行う。
cargo build --release
PCRE2サポートを有効にする場合は、featuresを指定する。
cargo build --release --features 'pcre2'
MUSLターゲットで静的リンクビルドを行う場合は、ターゲットを指定する。
cargo build --release --target x86_64-unknown-linux-musl
ビルドが完了すると、生成物はビルド条件に応じた target 以下のディレクトリに配置される。
通常のビルドでは実行ファイルは target/release/rg に生成される。
--target x86_64-unknown-linux-musl オプションを指定した場合は、target/x86_64-unknown-linux-musl/release/rg に生成される。
rgコマンドの基本
rgコマンドの基本動作
ripgrepは、指定したパターンをファイルやディレクトリから検索するコマンドである。
デフォルトで再帰検索を行い、gitignore のルールに従ってファイルを自動的に除外する。
基本的な構文は次の通りである。
rg <検索パターン> [パス]
パスを省略した場合、現在のディレクトリが再帰的に検索される。
以下の例では、カレントディレクトリ以下の全ファイルからfooという文字列を検索している。
rg foo
特定のディレクトリのみを検索対象にする場合は、パスを指定する。
rg foo src/
行番号を付加して結果を表示するには -n オプションを使用する。
rg -n foo
隠しファイルや.gitignoreで無視されているファイルも含めて検索するには -uuu オプションを使用する。
rg -uuu foo
圧縮ファイル (gzip等) も検索対象にするには -z オプションを使用する。
rg -z foo
ファイル種別による絞り込み
ripgrepは、ファイルの拡張子や種別に応じて検索対象を絞り込める。
-t オプションで特定のファイル種別のみを対象とする。
rg -tpy foo
上記の例では、Pythonファイルのみからfooを検索する。
-T オプションで特定のファイル種別を除外する。
rg -Tjs foo
上記の例では、JavaScriptファイルを除外して検索する。
--type-list オプションでサポートされているファイル種別の一覧を表示できる。
rg --type-list
rgコマンドの主要オプション
-iオプション : 大文字と小文字を区別せず検索する
-i オプションを付加すると、大文字と小文字を区別せずに検索できる。
rg -i foo
-nオプション : 行番号を表示する
-n オプションは、検索結果に行番号を付加して表示する。
ripgrepではデフォルトで行番号が表示されるが、明示的に指定することもできる。
rg -n foo
-lオプション : ファイル名のみ表示する
-l オプションは、パターンに一致したファイル名のみを表示する。
rg -l foo
-vオプション : 一致しない行を表示する
-v オプションは、パターンに一致しない行を表示する。
rg -v foo
-cオプション : 一致した行数を表示する
-c オプションは、各ファイルにおける一致した行数をカウントして表示する。
rg -c foo
-Cオプション : 一致箇所の前後を表示する
-C オプションは、一致した行の前後に指定した行数を表示する。
rg -C 2 foo
-wオプション : 単語単位で一致させる
-w オプションは、単語境界で囲まれた完全一致のみを検索する。
rg -w foo
-Fオプション : 正規表現を使わず文字列として検索する
-F オプションは、パターンをリテラル文字列として扱い、正規表現の解釈を無効にする。
rg -F 'foo.bar'
-eオプション : 複数パターンを指定する
-e オプションを複数回使用すると、複数のパターンをOR検索できる。
rg -e foo -e bar
-uオプション : フィルタリングの解除
-u オプションを重ねて指定することで、自動フィルタリングを段階的に解除できる。
通常、ripgrepは、ignoreルール、隠しファイル、バイナリファイルを自動的に除外する。
-uオプション- ignoreルールを無視する。
-uuオプション- ignoreルールに加えて隠しファイルも検索対象に含める。
-uuuオプション- バイナリファイルも検索対象に含める。
rg -uuu foo
-zオプション : 圧縮ファイルを検索する
-z オプションは、gzip、bzip2、lzma、xz、lz4、zstd等の圧縮ファイルを展開して検索する。
rg -z foo
--engineオプション : 正規表現エンジンの切り替え
--engine オプションで使用する正規表現エンジンを指定できる。
rg --engine default foo
指定可能な値は以下の通りである。
- default
- デフォルトのRust regexエンジンを使用する。
- pcre2
- PCRE2エンジンを使用する。
- 後読みや後方参照が使用できる。
- auto
- パターンに応じて自動的にエンジンを切り替える。
--auto-hybrid-regex オプションは --engine auto オプションと同等である。
PCRE2対応
ripgrepは、デフォルトでRustの正規表現エンジンを使用する。
このエンジンは高速だが、後読み (look-behind) や 後方参照 (backreference) 等の高度な機能には対応していない。
PCRE2エンジンを使用すると、これらの高度な正規表現機能が利用できる。
PCRE2の有効化
ビルド時にPCRE2サポートを有効にしている場合、実行時に以下に示す方法でPCRE2を使用できる。
-P オプションを使用する。
rg -P '(?<=foo)bar'
--pcre2 オプションを使用する。
rg --pcre2 '(?<=foo)bar'
--engine pcre2 オプションを使用する。
rg --engine pcre2 '(?<=foo)bar'
--auto-hybrid-regex オプションを使用すると、必要に応じて自動的にPCRE2が選択される。
rg --auto-hybrid-regex '(?<=foo)bar'
PCRE2の制限
PCRE2は、デフォルトエンジンより速度が低下する場合がある。
ただし、全てのパターンでPCRE2が必要なわけではないため、必要な場合のみ使用するとよい。
--auto-hybrid-regex オプション または --engine auto オプションを使用すると、ripgrepが自動的に最適なエンジンを選択する。
関連情報
- ripgrep GitHubリポジトリ
- ripgrep User Guide
- ripgrep FAQ
- Rust regex構文リファレンス
- Linuxコマンド - grep
- インストール - Rust