「node_modulesや.gitを毎回--excludeで除外するのが面倒。」
こういった不満を解消するのがripgrep(コマンド名:
rg)です。Rustベースのオープンソースのテキスト検索ツールで、grepとほぼ同じ構文で使えながら、大きなコードベースやログディレクトリでも桁違いのスピードを発揮します。この記事では、RHEL 9系/Ubuntu 24.04 LTSを想定環境として、ripgrepのインストールから基本的な使い方、よく使うオプション、grepとの使い分け、よくあるトラブルまでを解説します。
この記事のポイント
・ripgrepは.gitignoreを自動的に参照して対象外ファイルをスキップする
・rg キーワード でディレクトリ再帰検索が完結する(-r が不要)
・-t py / -t sh でファイル種別を絞り込める
・grepとの構文互換性が高く、乗り換えコストが小さい
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ripgrepとは?grepと何が違うのか
grepはLinuxに標準搭載されており、ファイル内のテキスト検索で長年使われてきたコマンドです。ただし、次のような場面で動作が遅くなりがちです。・node_modulesや.gitなどの大量ファイルを含むディレクトリを再帰的に検索するとき
・バイナリファイルを逐一開いてしまうとき
・エンコーディングが混在するファイルが含まれるとき
ripgrepはこれらの問題を構造的に解決します。主な特徴を整理します。
| 特徴 | grepとの違い |
|---|---|
| .gitignoreを自動参照 | grepは.gitignoreを参照しない(--excludeで手動指定が必要) |
| バイナリファイルを自動スキップ | grepはバイナリも開く(-Iオプションで除外できるが追記が必要) |
| デフォルトで再帰検索 | grepは-rが必要。rgはディレクトリを渡すだけで再帰する |
| マルチスレッド処理 | grepはシングルスレッド。大規模検索でripgrepが大幅に速い |
| ファイル種別フィルタ(-t) | grepにはない。-t py で.pyファイルだけを対象にできる |
ripgrepのインストール
1. RHEL 9系 / Rocky Linux / AlmaLinux
RHEL 9以降のEPELリポジトリにripgrepが含まれています。# EPELを有効化(未導入の場合) sudo dnf install -y epel-release # ripgrepをインストール sudo dnf install -y ripgrep # バージョン確認 rg --version
ripgrep 14.1.1 (rev e50df40a09)
2. Ubuntu / Debian
Ubuntu 22.04 LTS以降は標準リポジトリにripgrepが含まれています。sudo apt install -y ripgrep rg --version
基本的な使い方
1. シンプルな文字列検索
grepと同じ感覚で使えます。rg 検索文字列と打つと、カレントディレクトリ以下を再帰的に検索します。# カレントディレクトリ以下を再帰検索(-r は不要) rg 検索文字列 # 特定ディレクトリを対象に検索 rg 検索文字列 /var/log/ # 特定ファイルを対象に検索 rg 検索文字列 /etc/nginx/nginx.conf # マッチしたファイル名だけを表示(-l) rg -l 検索文字列
2. よく使うオプション
# 大文字・小文字を区別しない(-i) rg -i error /var/log/messages # マッチした前後N行のコンテキストを表示(-C) rg -C 3 "Failed password" /var/log/secure # 正規表現で検索(デフォルトで有効) rg "ERROR.*timeout" /var/log/ # 固定文字列として検索(正規表現を無効化・-F) rg -F "192.168.1.1" /var/log/ # マッチ数だけをカウント(-c) rg -c "FAILED" /var/log/secure
3. ファイル種別フィルタ(-t)
ripgrepが内部で持っているファイル拡張子の定義を使い、特定種別のファイルだけを対象にできます。grepには無い機能で、コードリポジトリを検索するときに特に便利です。# Pythonファイルだけを検索(-t py) rg -t py "import os" # シェルスクリプトだけを検索(-t sh) rg -t sh "#!/bin/bash" # 設定ファイル(.conf・.cfg)を検索(-t conf) rg -t conf "Listen 80" # 使えるファイル種別を一覧表示 rg --type-list
4. 除外パターンを指定する(-g)
-gオプションにglob形式のパターンを渡します。除外する場合は先頭に!を付けます。# 特定のディレクトリを除外 rg キーワード -g '!target/' -g '!.git/' # *.logファイルを除外 rg キーワード -g '!*.log' # バックアップファイル(~)を除外 rg キーワード -g '!*~'
5. .gitignoreと自動除外
ripgrepはデフォルトで.gitignoreを読み、そこに書かれたパターンを自動的に除外します。これによってnode_modules・dist・__pycache__などのディレクトリを毎回指定しなくても自動的にスキップされます。# .gitignoreを無視して全ファイルを検索(--no-ignore) rg --no-ignore キーワード # 隠しファイル・ディレクトリ(.始まり)も含めて検索(--hidden) rg --hidden キーワード # .gitignore無視 + 隠しファイルも含む(-u を2回重ねる) rg -uu キーワード
rg -uu キーワードは隠しファイルもバイナリも含めて検索するため、出力が非常に多くなります。通常の検索には使わず、「なぜか検索結果が出ない」ときの原因切り分け用として使ってください。よく使うオプション一覧
| やりたいこと | コマンド |
|---|---|
| 大文字・小文字を区別しない | rg -i キーワード |
| マッチしたファイル名だけを表示 | rg -l キーワード |
| ファイルごとのマッチ数を表示 | rg -c キーワード |
| 前後3行のコンテキストを表示 | rg -C 3 キーワード |
| Pythonファイルだけを検索 | rg -t py キーワード |
| 特定ディレクトリを除外して検索 | rg キーワード -g '!target/' |
| 固定文字列で検索(正規表現を無効) | rg -F キーワード |
| .gitignoreを無視して全検索 | rg --no-ignore キーワード |
| 隠しファイルも含めて検索 | rg --hidden キーワード |
| 単語単位で検索 | rg -w キーワード |
実務での活用パターン
パターン1: サーバーのログから特定エラーを探す
# /var/logディレクトリ以下のエラー行を検索 rg -i "error|failed|critical" /var/log/ # 前後5行で文脈を確認 rg -C 5 "Connection refused" /var/log/nginx/ # 日付を絞ってエラーを検索 rg "2026-10" /var/log/messages | grep -i error
パターン2: 設定ファイル内の設定値を一括確認
# /etc以下のすべての設定ファイルからListenポートを確認 rg "^Listen|^listen" /etc/ -g '*.conf' # nginx.d配下から特定のサーバーブロックを検索 rg "server_name" /etc/nginx/ -l # 設定ファイルにキーワードが含まれるか確認 rg -t conf "ServerName" /etc/httpd/
パターン3: シェルスクリプト内の関数・変数を調べる
# /usr/local/binのシェルスクリプトから関数定義を検索 rg -t sh "^function |^\w+\(\)" /usr/local/bin/ # 特定の変数名が使われているスクリプトを特定 rg -l "BACKUP_DIR" /etc/cron.d/ /usr/local/bin/
grepとripgrepの使い分け
ripgrepを導入したあとでも、grepが適している場面があります。| 場面 | 適しているコマンド | 理由 |
|---|---|---|
| コードリポジトリ内を検索 | ripgrep | .gitignoreを自動参照、高速 |
| 大量のログファイルを検索 | ripgrep | マルチスレッドで速い |
| パイプ経由で入力を受け取る | grep | rgはstdinからの検索に「-」指定が必要 |
| バイナリファイルも対象にする | grep -a | rgはバイナリを自動スキップする |
| 外部サーバーやコンテナ内で使う | grep | grepはほぼ全環境に標準搭載 |
| シェルスクリプト内での使用 | grep(推奨) | ripgrepが未導入の環境への移植性 |
「検索結果が出ない」時のトラブルシュート
1. .gitignoreに除外パターンがある場合
「ファイルが存在するはずなのにヒットしない」場合、まず--no-ignoreで試してみます。# .gitignoreを無視して再検索 rg --no-ignore キーワード # 隠しファイルも含める rg --hidden --no-ignore キーワード
2. RHEL 9系でインストールできない(dnf: No match)
EPELリポジトリが有効になっていない場合に発生します。# EPELが有効かどうか確認 dnf repolist | grep epel # 有効でなければ追加 sudo dnf install -y epel-release sudo dnf install -y ripgrep
3. バイナリファイルも検索したい
ripgrepはデフォルトでバイナリをスキップします。バイナリを含めて検索したい場合は-a(--text)を付けます。# バイナリも含めて検索 rg -a キーワード
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| カレントディレクトリ以下を再帰検索 | rg キーワード |
| 大文字・小文字を区別しない | rg -i キーワード |
| 前後3行のコンテキストを表示 | rg -C 3 キーワード |
| Pythonファイルだけを検索 | rg -t py キーワード |
| 特定ディレクトリを除外 | rg キーワード -g '!target/' |
| .gitignoreを無視して全検索 | rg --no-ignore キーワード |
| 隠しファイルも含めて検索 | rg --hidden キーワード |
| マッチしたファイル名だけ表示 | rg -l キーワード |
rg キーワードと打つだけで、grepとの速度差を体感してみてください。
コマンドの実践的な使い方からサーバー設計・セキュリティ設定まで、20年以上の現場経験をもとに2日間のハンズオンセミナーで直接指導しています。
>> Linux Master Pro Seminarの詳細はこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:ipmitoolコマンドでLinuxサーバーのハードウェアを監視・操作する方法|センサー確認・SELログ・電源制御も
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます