ripgrep (rg) – 高速な全文検索コマンド

検索・フィルタ
スポンサーリンク

テキスト検索といえば長年使われてきた 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 ripgrep

Chocolateyを使う場合は 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標準コマンド、環境を問わず利用可どこでも使えるが機能は最小限
ackPerl製、プログラマ向けに拡張Perl依存があり近年は利用減
ag (The Silver Searcher)grepより高速、.gitignore対応一時期人気だったがメンテナンス停滞気味
ripgrep (rg)Rust製、最速クラス、活発に開発中VS Code など主要ツールにも採用

ripgrep は 「ag の速さ+grep の安心感+現代的な機能」 を兼ね備えており、今後の標準ツールとして利用が広がっています。

→ grep から移行する場合は、まず rg を普段の検索に置き換えるだけで大きなメリットが得られます。慣れてきたら ignore 設定や JSON 出力など ripgrep 独自機能を活用するとさらに効率化できます。

関連コマンド

  • grep : 従来のテキスト検索コマンド。
  • fd : 高速なファイル検索コマンド。
  • ack : 開発者向けの grep 代替。

まとめ・参考リンク

ripgrep(rg)は、従来の grep をそのまま置き換えて使えるだけでなく、高速性・.gitignore 対応・開発者フレンドリーな既定値によって、現代の開発環境に最適化された検索ツールです。

  • 大規模コードベースやリポジトリ検索.gitignore が効くため不要なディレクトリを自動スキップ
  • ログ解析や正規表現検索 → マルチスレッドと正規表現最適化で速い
  • エディタ連携(VS Codeなど) → ripgrep の挙動を理解すると内部検索の仕組みも理解しやすい

日常的な検索を grep から rg に置き換えるだけでも効率化でき、さらに ignore 設定や JSON 出力を活用すれば CI/CD や自動化にも応用可能です。

公式・外部ドキュメントリンク

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント