テキスト検索といえば長年使われてきた grep が定番ですが、より高速で使いやすい検索ツールとして注目されているのが ripgrep(rg) です。Rust製でマルチスレッド処理に対応しており、大規模なコードベースやログファイルでも驚くほど速く検索できます。さらに .gitignore を自動的に考慮するため、不要なディレクトリを手動で除外する手間も減らせます。
本記事では 「ripgrepとは?」 という基本から、各OSでのインストール方法、よく使う検索オプション、無視ルールや除外設定、そして実務で役立つ活用例までをまとめました。VS Codeをはじめ多くの開発ツールにも組み込まれているため、導入すれば開発効率を大きく高めることができます。
「grepを使っているけど遅い」「大規模リポジトリを効率よく検索したい」「VS Codeの検索をもっと理解したい」といった方にとって、ripgrepは強力な選択肢になるでしょう。
ripgrepとは
ripgrep(rg) は、Rustで実装された高速テキスト検索ツールです。標準の grep と同様に正規表現検索ができますが、デフォルトで再帰検索・.gitignore を自動考慮・マルチスレッドなど、開発現場向けの実用機能が最初から備わっています。
grepとの違い(要点)
- 検索範囲の初期値:
grepは非再帰が基本、ripgrepは ディレクトリを渡すと再帰検索がデフォルト。 - 無視ファイルの扱い:
ripgrepは.gitignore/.ignore/.rgignoreを自動で尊重(node_modules等を勝手に除外)。grepは明示オプションでの除外が前提。 - 速度と並列化:
ripgrepは マルチスレッド+ディレクトリ走査の最適化で大規模リポジトリでも速い。 - 使い勝手の初期設定:色付き出力・行番号・ファイル見出しなど見やすい既定挙動が充実。
- 正規表現エンジン:既定はRust実装の高速RE。必要に応じて PCRE2(
-P) で後方参照や先読み等の高度機能も利用可(環境依存)。 - タイプ指定:
--type/-t(例:-t rust,-t js)で 言語/拡張子ベースの絞り込みが簡単。
高速な理由と特徴(.gitignore対応 など)
- 検索対象を減らす賢さ
.gitignoreなどの 無視ルールを最初に適用し、不要ディレクトリを走査しない。- ファイルタイプ/グロブ(
--type,--glob)で早い段階から対象を絞り込める。
- 並列ディレクトリ走査
- マルチスレッドで I/Oとマッチングを並列化。大規模コードベースでもスループットが落ちにくい。
- 高速な正規表現実装
- Rust製の効率的なオートマトン/リテラル最適化により、一次フィルタが非常に高速。
- 実務で効く既定値
- 再帰検索が標準、色付き・行番号、見出し表示など、出力を読み取りやすくする工夫が初期状態で有効。
- 柔軟な拡張性
~/.ripgreprcによる 既定オプションの保存、PCRE2対応(-P)、JSON出力(--json)でツール連携もしやすい。
ひとことで言うと:「検索対象を最初に賢く削る」×「並列化と高速RE」×「開発者向けの初期設定」で、
grepより“速く・実用的に”使えるのが ripgrep です。インストール方法
ripgrep は主要なOS向けにパッケージが用意されており、手軽に導入できます。以下では代表的な環境ごとの手順を紹介します。
Linux(Ubuntu / Debian)
# 公式リポジトリからインストール sudo apt update sudo apt install ripgrep※ 古いバージョンの場合は
ppa:agornostal/rgなどのPPAを追加するか、GitHubのリリースページ から最新バイナリを取得します。macOS(Homebrew)
brew install ripgrep更新は
brew upgrade ripgrepで行えます。Windows(winget / scoop)
# winget winget install BurntSushi.ripgrep # scoop scoop install ripgrepChocolateyを使う場合は
choco install ripgrepでも導入可能です。
構文(Syntax)
rg [オプション] <パターン> [パス...]
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
<パターン> | 指定した正規表現にマッチする行を検索 | rg TODO |
<パス> | 検索対象ディレクトリやファイルを指定 | rg error ./logs |
-i | 大文字小文字を無視して検索 | rg -i error |
-w | 単語単位で検索 | rg -w main |
-F | 正規表現ではなく文字列として検索 | rg -F "a+b" |
-c | マッチ数をカウント | rg -c TODO |
-l | マッチしたファイル名のみ表示 | rg -l TODO |
-n | 行番号を表示(デフォルトで有効) | rg -n TODO |
-v | マッチしない行を表示 | rg -v DEBUG |
--files | 検索対象ファイル一覧を表示 | rg --files |
--hidden | 隠しファイルも対象にする | rg --hidden secret |
--no-ignore | .gitignore を無視して検索 | rg --no-ignore node_modules |
--glob "PATTERN" | 特定のパターンを含めたり除外 | rg --glob "*.rs" |
基本の使い方
ripgrep(rg)は grep と同じ感覚で使えますが、デフォルトで再帰検索する点や .gitignore を自動的に考慮する点が便利です。ここではよく使う基本的な検索方法を紹介します。
単純検索と正規表現
# カレントディレクトリ以下から「main」を検索
rg main
# 正規表現で関数定義を検索
rg '^def\s+\w+' *.py
ripgrepはデフォルトで正規表現をサポートしているため、複雑なパターン検索も可能です。-F を付ければ正規表現ではなく「固定文字列検索」として使えます。
大文字小文字を無視する
# 大文字小文字を区別せず検索
rg -i error
大文字・小文字の区別を無視して検索したい場合は -i を指定します。ログ検索などで便利です。
拡張子・ディレクトリ指定
# 拡張子を指定して検索(例: .jsファイル)
rg "fetch" --glob "*.js"
# ディレクトリを指定して検索
rg "pattern" src/
# 複数のディレクトリをまとめて検索
rg "pattern" src/ tests/
--glob で拡張子やパターンを指定できます。大規模リポジトリでは対象を絞ることで検索がさらに速くなります。
実用例と便利オプション
ripgrep の強みは、単純な文字列検索だけでなく、無視ルールの活用や出力の整形などによって、実務でそのまま使える便利な機能が揃っている点です。ここでは代表的な例を紹介します。
.gitignore の自動反映と無視ルール
ripgrep は .gitignore / .ignore / .rgignore を自動的に読み込みます。そのため、node_modules/ や dist/ のような不要なディレクトリはデフォルトで無視されます。
# 無視ルールを無効化(すべて検索対象にする)
rg --no-ignore "pattern"
# 独自の無視ルールファイルを使う
rg --ignore-file .myignore "password"
ディレクトリ除外の例
特定のディレクトリだけ検索対象から外したい場合は、--glob を使います。
# logs ディレクトリを除外
rg "ERROR" --glob '!logs/**'
出力整形(色・行番号・一致部分のみ)
ripgrep は見やすい出力がデフォルトで有効ですが、さらに調整も可能です。
# 一致部分のみを表示
rg -o "https?://[^\s]+"
# 色や行番号を制御
rg --color=always --line-number "TODO"
前後の文脈表示
マッチした行の前後も確認したい場合は -C オプションを使います。
# マッチした行の前後2行を表示
rg "main" -C 2
JSON出力(ツール連携用)
機械処理に使いたい場合は --json で出力可能です。
rg "ERROR" --json | jq .
コード検索(関数・TODO抽出)
開発現場でよく使う検索例です。
# Pythonの関数定義一覧を抽出
rg '^def\s+\w+' *.py
# TODOコメントを一覧化
rg "TODO"
ログ解析(エラーやIP検出)
大規模ログからの抽出にも便利です。
# エラーログを抽出
rg "ERROR" /var/log/syslog
# IPv4アドレスを抽出
rg -o '\b\d{1,3}(\.\d{1,3}){3}\b' access.log
VS Codeとの関係
Visual Studio Code の「検索機能」は内部的に ripgrep を利用しています。
そのため、VS Code の検索結果の挙動を理解するうえでも ripgrep の仕様を知っておくと役立ちます。
grepとの比較・乗り換えポイント
ripgrep は grep とコマンドの書き方が似ているため、基本的な検索であればそのまま置き換え可能です。ただし挙動や標準機能に違いがあるため、乗り換えの際に意識しておくとスムーズです。
grepからの書き換え例
# grep
grep -r "pattern" src/
# ripgrep (再帰検索はデフォルトなので -r は不要)
rg "pattern" src/
# grep: 大文字小文字を無視
grep -i "error" logfile
# ripgrep
rg -i "error" logfile
# grep: 行番号を付ける
grep -n "TODO" *.py
# ripgrep (デフォルトで行番号表示あり)
rg "TODO" *.py
まとめると:
- ripgrep は再帰検索・行番号表示・色付きが最初から有効
- 除外対象は
.gitignoreを自動利用 - 固定文字列検索は
grep -Fと同様にrg -F
他ツール(ag, ack)との違い
| ツール | 特徴 | 現状の立ち位置 |
|---|---|---|
| grep | 標準コマンド、環境を問わず利用可 | どこでも使えるが機能は最小限 |
| ack | Perl製、プログラマ向けに拡張 | Perl依存があり近年は利用減 |
| ag (The Silver Searcher) | grepより高速、.gitignore対応 | 一時期人気だったがメンテナンス停滞気味 |
| ripgrep (rg) | Rust製、最速クラス、活発に開発中 | VS Code など主要ツールにも採用 |
ripgrep は 「ag の速さ+grep の安心感+現代的な機能」 を兼ね備えており、今後の標準ツールとして利用が広がっています。
→ grep から移行する場合は、まず rg を普段の検索に置き換えるだけで大きなメリットが得られます。慣れてきたら ignore 設定や JSON 出力など ripgrep 独自機能を活用するとさらに効率化できます。
関連コマンド
まとめ・参考リンク
ripgrep(rg)は、従来の grep をそのまま置き換えて使えるだけでなく、高速性・.gitignore 対応・開発者フレンドリーな既定値によって、現代の開発環境に最適化された検索ツールです。
- 大規模コードベースやリポジトリ検索 →
.gitignoreが効くため不要なディレクトリを自動スキップ - ログ解析や正規表現検索 → マルチスレッドと正規表現最適化で速い
- エディタ連携(VS Codeなど) → ripgrep の挙動を理解すると内部検索の仕組みも理解しやすい
日常的な検索を grep から rg に置き換えるだけでも効率化でき、さらに ignore 設定や JSON 出力を活用すれば CI/CD や自動化にも応用可能です。
公式・外部ドキュメントリンク
- GitHub(公式リポジトリ)
https://github.com/BurntSushi/ripgrep - ripgrep Book(公式ドキュメント)
https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md - Qiita記事(導入・活用例)
https://qiita.com/takiguchi-yu/items/1a3ecb3f103f5239fb04 - gihyo.jp(Ubuntuでの導入手順)
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0579 - Zenn(実践例やTips)
https://zenn.dev/uchitaka/articles/d671cf3f33b701

コメント