ripgrep

ripgrep (rg) は高速(こうそく) なテキスト検索(けんさく) ツールで、grep の機能(きのう)現代的(げんだいてき)使用体験(しようたいけん)()() わせています。

基本検索

簡単な検索

rg pattern                    # 現在のディレクトリで検索
rg pattern path/              # 指定ディレクトリで検索
rg pattern file.txt           # 指定ファイルで検索
rg "multi word"               # 複数単語を検索

大文字小文字の制御

rg -i pattern                 # 大文字小文字を無視 (case-insensitive)
rg -s pattern                 # 大文字小文字を区別 (case-sensitive)
rg -S pattern                 # スマートケース (大文字があれば区別)

完全一致

rg -w word                    # 完全な単語一致
rg '\bword\b'                 # 正規表現の単語境界を使用

パターンマッチング

正規表現

rg '^pattern'                 # 行頭マッチ
rg 'pattern$'                 # 行末マッチ
rg 'pat.*tern'                # 任意の文字マッチ
rg 'pattern\d+'               # 数字マッチ
rg -P 'pattern'               # PCRE2 エンジンを使用

リテラル文字列

rg -F 'literal.string'        # 固定文字列検索 (正規表現を解析しない)
rg -F -f patterns.txt         # ファイルから複数の固定文字列を読み取り

複数パターン検索

rg -e pattern1 -e pattern2    # OR 検索で複数パターン
rg 'pattern1|pattern2'        # 正規表現の OR を使用

出力制御

表示形式

rg -n pattern                 # 行番号を表示 (デフォルト)
rg -N pattern                 # 行番号を非表示
rg -H pattern                 # ファイル名を表示 (デフォルト)
rg --no-filename pattern      # ファイル名を非表示
rg -l pattern                 # ファイル名のみ表示
rg -c pattern                 # 各ファイルのマッチ数のみ表示

コンテキスト表示

rg -A 3 pattern               # 後の 3 行を表示 (After)
rg -B 3 pattern               # 前の 3 行を表示 (Before)
rg -C 3 pattern               # 前後各 3 行を表示 (Context)

出力スタイル

rg --color always pattern     # 強制カラー出力
rg --color never pattern      # カラーなし出力
rg --pretty pattern           # 整形出力 (行番号、見出し含む)
rg --vimgrep pattern          # Vim 形式出力
rg --json pattern             # JSON 形式出力

マッチ部分のみ表示

rg -o pattern                 # マッチしたテキストのみ表示
rg -r '$1' 'pat(tern)'        # 置換して表示

ファイルフィルタリング

ファイルタイプ

rg -t go pattern              # Go ファイルのみ検索
rg -T go pattern              # Go ファイルを除外
rg --type-list                # サポートされるファイルタイプを一覧表示

カスタムファイルタイプ

rg --type-add 'web:*.{html,css,js}' -t web pattern
rg -g '*.go' pattern          # glob パターンを使用
rg -g '!*.min.js' pattern     # glob パターンを除外

ファイルパスフィルタリング

rg pattern -g 'src/**'        # src ディレクトリ下のみ検索
rg pattern -g '!test/**'      # test ディレクトリを除外
rg pattern -g '*.{go,rs}'     # 複数の拡張子

隠しファイルと無視ルール

rg -. pattern                 # 隠しファイルを含む
rg -u pattern                 # .gitignore を無視 (u 一回)
rg -uu pattern                # 隠しファイル含む + .gitignore を無視
rg -uuu pattern               # すべてのファイルを検索 (バイナリ含む)

検索範囲

検索を制限

rg -m 5 pattern               # 各ファイル最大 5 マッチ
rg --max-depth 2 pattern      # 最大ディレクトリ深度
rg --max-filesize 1M pattern  # ファイルサイズを制限

逆検索

rg -v pattern                 # マッチしない行を表示
rg --files-without-match pat  # マッチを含まないファイルを表示

ファイルリスト

rg --files                    # 検索対象ファイルを一覧表示
rg --files -g '*.go'          # 特定タイプのファイルを一覧表示

高度な機能

複数行検索

rg -U 'pattern1.*pattern2'    # 行をまたいで検索 (multiline)
rg -U 'start.*\n.*end'        # 複数行の内容にマッチ

文字列置換 (表示)

rg 'pattern' -r 'replacement' # 置換後の結果を表示
rg '(\w+)@(\w+)' -r '$2:$1'   # キャプチャグループを使用

統計と分析

rg --count pattern            # 各ファイルのマッチカウント
rg --count-matches pattern    # 総マッチ数
rg --stats pattern            # 検索統計情報を表示

前処理と圧縮

rg -z pattern file.gz         # 圧縮ファイルを検索
rg --pre cat pattern          # プリプロセッサを使用
rg --pre-glob '*.pdf' --pre 'pdftotext' pattern

パフォーマンス最適化

並列処理

rg -j 4 pattern               # 4 スレッドを使用
rg -j 1 pattern               # シングルスレッドで実行

メモリ制御

rg --mmap pattern             # メモリマッピングを使用 (デフォルト)
rg --no-mmap pattern          # メモリマッピングを使用しない

キャッシュとインデックス

rg --no-ignore-vcs pattern    # .gitignore を読み取らない
rg --no-ignore-parent pattern # 親ディレクトリの無視ファイルを読み取らない

特殊な用途

特定の内容を検索

rg -t go 'func \w+' -o        # すべての関数名を抽出
rg -t js 'import.*from'       # すべての import 文を検索
rg 'TODO|FIXME|XXX'           # コードコメントマーカーを検索

バイナリファイル

rg -a pattern                 # バイナリファイルを検索
rg --binary pattern           # 同上
rg --text pattern             # バイナリをテキストとして扱う

エンコーディング処理

rg -E auto pattern            # エンコーディングを自動検出
rg -E utf-8 pattern           # UTF-8 エンコーディングを指定
rg -E none pattern            # エンコーディング変換なし

ファイル内容タイプを検索

rg --type-add 'config:*.{yml,yaml,toml,json}' -t config pattern
rg --iglob '**/*.{log,txt}' pattern

デバッグ

デバッグ情報

rg --debug pattern            # 詳細なデバッグ情報を表示
rg --trace pattern            # トレース情報を表示
rg --files --debug            # ファイルリストのデバッグ

テストと検証

rg --pcre2-version            # PCRE2 バージョンを表示
rg --type-list                # すべてのタイプ定義を一覧表示

設定ファイル

設定ファイルを使用

# ~/.ripgreprc またはプロジェクトの .ripgreprc
--smart-case
--colors=path:fg:green
--max-columns=150
export RIPGREP_CONFIG_PATH=~/.ripgreprc
rg pattern                    # 設定を自動読み込み

実用例

# Go ファイルの TODO をすべて検索
rg -t go 'TODO|FIXME' -C 2

# API エンドポイント定義を検索
rg -t go 'router\.(GET|POST|PUT|DELETE)' -o

# 大きな関数を検索 (50 行以上)
rg -U '^func .*\{$' -A 50 | rg '^}$' -c

# SQL インジェクションリスクを検索
rg -t go 'Exec\(.*\+'

# 未使用の変数を検索 (簡略化)
rg -t go '^\s+\w+\s+:=' --no-filename | sort | uniq -c

# 2 つのブランチの差分を比較
rg -l 'pattern' > /tmp/current.txt
git checkout other-branch
rg -l 'pattern' > /tmp/other.txt
diff /tmp/current.txt /tmp/other.txt

# 重複コードを検索
rg -C 3 'pattern' | sort | uniq -d

# パフォーマンス分析:遅いクエリを検索
rg -t sql 'SELECT.*FROM.*WHERE' --stats

使用のヒント

  1. 他のツールと組み合わせrg pattern | fzf (ファジー検索)
  2. パイプ処理rg -l pattern | xargs sed -i 's/old/new/g'
  3. バージョン管理統合rg --files | entr rg pattern (自動再検索)
  4. エイリアス設定alias rgg='rg --pretty --context 3'