ripgrep (rg)の使い方完全ガイド【インストールから応用まで】
大規模なコードベースや膨大なログファイルから、特定の文字列を探す作業は、開発者にとって日常茶飯事です。もし、この検索に何十秒もかかったり、ファイルの種類をいちいち指定しなければならなかったりしたらどうでしょうか。開発の流れは止まり、フラストレーションが溜まる一方でしょう。
従来の検索ツール、例えばgrepでは、特に大きなプロジェクトでその遅さに悩まされることがありました。必要な情報にたどり着くまでに時間がかかり、思考が中断されてしまう。そんな経験はありませんか?
しかし、もし検索が瞬時に終わり、必要な情報がすぐに手に入る世界があったら、あなたの開発体験は劇的に変わるでしょう。この記事で紹介するripgrepは、まさにその「速い検索」を実現し、あなたの開発ワークフローを加速させるための強力なツールです。
ripgrep (rg)とは
ripgrep(通称rg)は、高速なファイル検索を実現するコマンドラインツールです。Rust言語で書かれており、従来のgrepはもちろん、The Silver Searcher (ag)やackといった他の人気ツールと比較しても、圧倒的な検索速度を誇ります。公式ベンチマークでは、grepの10倍から100倍速いと報告されています。
このツールの最大の特長は、単に速いだけでなく、開発者の使いやすさを追求している点です。デフォルトで.gitignoreファイルを尊重し、隠しファイルやバイナリファイルを自動的にスキップします。これにより、余計なファイルが検索結果に混ざることなく、本当に必要なコードだけを見つけ出すことができます。
ripgrepは、既存の検索ツールのパフォーマンスや機能に不満を感じた開発者が、より高速でモダンなツールを目指して開発しました。特に大規模なリポジトリやログファイルを扱う際に、その真価を発揮します。
インストール方法
ripgrepは主要なOSで利用可能です。それぞれのOSに合わせたインストール方法を紹介します。
macOS
Homebrewを利用すると簡単にインストールできます。
brew install ripgrep
Linux
Linuxディストリビューションに応じて、以下のコマンドを使用します。
Debian/Ubuntu系
sudo apt install ripgrep
Fedora/CentOS系
sudo yum install ripgrep
または
sudo dnf install ripgrep
Arch Linux
sudo pacman -S ripgrep
Snap
sudo snap install ripgrep --classic
RustのCargo
Rustがインストールされている場合、cargoコマンドでインストールすることも可能です。
cargo install ripgrep
Windows
Windowsでは、Scoop、Chocolatey、winget、またはCargoを使ってインストールできます。
Scoop
scoop install ripgrep
Chocolatey
choco install ripgrep
winget
winget install BurntSushi.ripgrep
RustのCargo
cargo install ripgrep
バイナリのダウンロード
各リリースのGitHubページから、OSに合わせたバイナリファイルを直接ダウンロードして利用することもできます。 ripgrep Releases
基本的な使い方
ripgrepの基本的なコマンドは非常にシンプルです。まずはこれだけ知っておけば、すぐに高速検索の恩恵を受けられます。
ここでは、以下のようなファイル構成を想定してコマンド例を示します。
.
├── src/
│ ├── main.rs
│ └── utils.rs
├── tests/
│ └── test_main.rs
├── .gitignore
└── README.md
1. 基本検索
現在のディレクトリ以下を再帰的に検索し、指定したパターンにマッチする行を表示します。
例えば、「fn main」という文字列を検索する場合。
rg "fn main"
出力例:
src/main.rs
1:fn main() {
2. 行番号を表示する
検索結果に行番号を追加して表示するには、-nオプションを使います。
rg -n "fn main"
出力例:
src/main.rs
1:fn main() {
3. マッチしたファイル名のみを表示する
パターンにマッチした行ではなく、ファイル名だけを知りたい場合は、-l(小文字のL)オプションを使用します。
rg -l "fn main"
出力例:
src/main.rs
4. 大文字小文字を区別しない検索
パターンが大文字と小文字を区別しないように検索するには、-iオプションを使います。
例えば、「main」という単語を大文字小文字を区別せずに検索します。
rg -i "main"
出力例:
src/main.rs
1:fn main() {
tests/test_main.rs
3: assert_eq!(2 + 2, 4, "main test failed");
5. 特定のファイルタイプのみを検索する
--typeまたは-tオプションを使うと、特定のファイルタイプに限定して検索できます。
例えば、Rustファイル (.rs) のみから「fn」という文字列を検索します。
rg -t rs "fn"
出力例:
src/main.rs
1:fn main() {
src/utils.rs
1:fn greet(name: &str) -> String {
tests/test_main.rs
1:#[test]
2:fn test_basic_addition() {
便利な使い方・応用例 3選
ripgrepは、基本的な検索だけでなく、様々なオプションを組み合わせることで、より高度な検索が可能です。実際の開発シーンで役立つ応用例を3つ紹介します。
1. 特定のディレクトリやファイルを検索から除外する
node_modulesやtargetのような、自動生成された巨大なディレクトリは検索対象から除外したいことが多いでしょう。ripgrepは.gitignoreをデフォルトで尊重しますが、明示的に除外したい場合は--ignore-fileや--globオプションを使用します。
例えば、node_modulesディレクトリと.logファイルを検索対象から除外して「Error」を検索します。
rg "Error" --glob '!node_modules/*' --glob '!*.log'
--glob '!PATTERN' は、指定したパターンにマッチするファイルを検索から除外します。
複数の--globオプションを組み合わせることで、複雑な除外ルールを設定できます。
2. マッチした行の前後数行も表示する
コードのコンテキストを理解するために、マッチした行だけでなく、その前後の行も表示したい場合があります。-Cオプション(--context)を使うと、指定した行数をコンテキストとして表示できます。
例えば、「login_user」という関数を検索し、その前後の3行も表示します。
rg -C 3 "login_user"
出力例(例えば):
src/auth.rs
10-pub fn login_user(username: &str, password: &str) -> Result<User, AuthError> {
11- // ユーザー認証ロジック
12- if authenticate(username, password) {
13: Ok(User { username: username.to_string(), role: "user".to_string() })
14- } else {
15- Err(AuthError::InvalidCredentials)
16-}
3. バイナリファイルを強制的に検索する
ripgrepはデフォルトでバイナリファイルをスキップします。しかし、何らかの理由でバイナリファイル内を検索したい場合もあるでしょう。-aオプション(--text)を使うと、バイナリファイルをテキストファイルとして扱い、強制的に検索対象に含めることができます。
例えば、PDFファイルや実行ファイルの中に特定の文字列が含まれているか確認したい場合。
rg -a "secret_key"
このコマンドは、バイナリファイルであっても、テキストとして解釈できる部分から「secret_key」を検索します。
他ツールとの組み合わせ
ripgrepは単体でも強力ですが、他のCLIツールと組み合わせることで、その力をさらに引き出すことができます。
1. fzfとの連携でインタラクティブなファイル選択
fzfは、強力なファジー検索機能を持つインタラクティブなフィルターです。ripgrepで検索した結果をfzfにパイプで渡すことで、高速な絞り込みとファイルオープンが可能になります。
例えば、プロジェクト内のすべてのRustファイルをripgrepで探し、fzfで絞り込んで、選択したファイルをVimで開くコマンドです。
rg -l -t rs "" | fzf --preview 'bat --color=always {}' | xargs -r vim
rg -l -t rs "": すべてのRustファイルのリストを生成します。fzf --preview 'bat --color=always {}':fzfでリストをインタラクティブに絞り込みます。--previewオプションで選択中のファイルをbatでプレビュー表示します。xargs -r vim:fzfで選択されたファイル名をvimに渡して開きます。
2. エディタ(Vim/Neovim)での統合
VimやNeovimでは、grepprgオプションを設定することで、grepの代わりにripgrepを内部検索ツールとして利用できます。これにより、エディタ内で:grepコマンドを使ったときに、ripgrepの高速な検索が適用されます。
.vimrcやinit.vimに以下の設定を追加します。
set grepprg=rg\ --vimgrep\ --no-heading\ --color=never
set grepformat=%f:%l:%c:%m
--vimgrep: Vimのquickfixリストに適した形式で結果を出力します。--no-heading: ファイルごとのヘッダーを非表示にします。--color=never: 色付けを無効にし、余計な制御文字が含まれないようにします。
設定後、Vim内で:grep <pattern>を実行すると、ripgrepが使われます。
3. batで検索結果を美しく表示
batは、シンタックスハイライトやGitの変更表示機能を備えたcatコマンドの代替です。ripgrepの検索結果をbatにパイプで渡すことで、より視覚的に分かりやすい出力を得られます。
例えば、Rustファイルから「struct」を検索し、batでシンタックスハイライトして表示します。
rg "struct" -t rs | bat --plain --language rust
--plain:bat自身のヘッダーや行番号を非表示にし、ripgrepの出力をそのまま表示します。--language rust: Rust言語としてシンタックスハイライトします。
よくある設定・カスタマイズ
ripgrepは、設定ファイルや環境変数を使って、デフォルトの挙動をカスタマイズできます。これにより、自分好みの検索体験を構築できます。
1. エイリアスの設定
シェルスクリプトのalias機能を使って、よく使うオプションをまとめて短縮コマンドを作成できます。
例えば、常に大文字小文字を区別せず、行番号を表示するrgiというエイリアスを設定する場合。
# ~/.bashrc または ~/.zshrc に追加
alias rgi='rg -ni'
この設定を読み込んだ後、rgi "pattern"と入力するだけで、rg -ni "pattern"と同じ結果が得られます。
2. 設定ファイルの利用
ripgrepは、デフォルトのオプションを記述できる設定ファイルをサポートしています。
設定ファイルは、以下のパスに配置されます。
- Linux/macOS:
~/.config/ripgrep/ripgreprc - Windows:
%APPDATA%\ripgrep\ripgreprc
または、どのOSでも~/.ripgreprcも使用可能です。
例えば、常に--no-heading(ファイルごとのヘッダーを非表示)と--color=always(常に色付け)を有効にしたい場合、ripgreprcファイルに以下のように記述します。
# ~/.config/ripgrep/ripgreprc
--no-heading
--color=always
これで、rg patternと入力するだけで、これらのオプションが自動的に適用されます。
3. 環境変数 RG_PREFIX
ripgrepは、RG_PREFIXという環境変数にデフォルトの引数を設定することもできます。これは、設定ファイルよりも手軽に一時的なオプションを付与したい場合に便利です。
例えば、RG_PREFIXに--max-depth 5を設定して、検索の深さを5階層までに制限する場合。
export RG_PREFIX="--max-depth 5"
rg "pattern"
この設定は、現在のシェルセッションにのみ影響します。永続的にしたい場合は、.bashrcや.zshrcにexportコマンドを記述します。
今日からできる実行プラン
ripgrepの導入は非常に簡単です。以下の3ステップで、今日からあなたの開発ワークフローを改善しましょう。
ステップ1: ripgrepをインストールする
まずは、あなたのOSに合わせた方法でripgrepをインストールしてください。上記の「インストール方法」セクションを参考に、最も簡単な方法を選びましょう。
# 例えばmacOSの場合
brew install ripgrep
ステップ2: grepの代わりにrgを使ってみる
普段grepを使っている場面で、一度rgを試してみてください。簡単な検索から始めて、その速度を体感してみましょう。
# 例えば、grepの代わりに
rg "TODO"
最初は慣れないかもしれませんが、すぐにその快適さに気づくはずです。
ステップ3: よく使うオプションをエイリアスや設定ファイルに登録する
rg -nやrg -iなど、あなたがよく使うオプションがあれば、エイリアスや設定ファイルに登録しましょう。これにより、毎回オプションを入力する手間が省け、さらにスムーズに作業を進められます。
# ~/.bashrc や ~/.zshrc に追加
alias rgn='rg -n'
alias rgi='rg -i'
これらのステップを踏むことで、あなたはripgrepの強力な検索能力を最大限に活用し、開発効率を飛躍的に向上させることができるでしょう。
参考文献
- BurntSushi/ripgrep - GitHub
- ripgrep User Guide - GitHub
- ripgrep: An in-depth code search tool - burntsushi.net
- junegunn/fzf - GitHub
- sharkdp/bat - GitHub