AIコーディングをしていると、たまに見知らぬコマンドを実行しようとしていることがあります。
2〜3年前であれば、「なぜそのコマンドで処理しようとするんだ?」と突っ込みたくなるようなことがよくありました。 最近はエラーが出てもよしなに別の方法でアプローチしてくれるようになったからか、あまり深く気にしていませんでした。
ふとある時、処理を眺めていると、毎回同じようにrgコマンドでエラーが出て、grepコマンドで再実行するという現象をよく見かけました。
気になって調べてみると、rg(ripgrep)はgrepのような検索ツールで、開発者曰く他のツールよりも高速だというベンチマーク結果が出ているとのことでした。
rgコマンドとは
ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern.
ripgrepは、現在のディレクトリを再帰的に検索して正規表現パターンを探す行指向の検索ツールみたいです。
インストール
ドキュメントを見ると色々な方法がサポートされているようですが、私はbrewコマンドでインストールしました。
brew install ripgrep
grepコマンドとの比較
普段何気なく使っているgrepコマンドと比べて、実際どれくらい違うのか気になったので調べてみました。
まず速度面ですが、Linuxカーネルのソースツリー(約7万5千ファイル)を対象にした正規表現検索のベンチマークでは、rgコマンドが0.082秒で完了するのに対し、grepコマンドは0.671秒かかり、約8倍の差が出るそうです。
ファイル数が多い、あるいは無視対象のディレクトリ(node_modulesなど)が多いプロジェクトほど、この差はさらに広がる傾向にあるようです。
速度以外にも、使い勝手の面でいくつか違いがありました。
- 再帰検索がデフォルト:grepの場合は-rオプションと検索対象のパスを指定する必要がありますが、rgコマンドは何も指定しなくても現在のディレクトリ以下を再帰的に検索してくれます。
- .gitignoreを自動で尊重:rgコマンドはデフォルトで.gitignoreの内容を認識し、隠しファイルやバイナリファイルも自動的に除外して検索してくれます。そのためnode_modulesのような巨大なディレクトリを毎回除外指定する必要がなく、結果的に検索も速くなります。
- ファイル種別での絞り込み:rg -tpy fooのように書けばPythonファイルだけに絞って検索するといったことも簡単にできます。
一方で、grepにも当然メリットはあります。grepはPOSIX標準として定められており、ほぼすべての環境に最初から入っているという安心感があります。rgコマンドはRust製ということもあり、環境によっては別途インストールが必要になる場面も出てきます。
AIコーディングツールとの相性という観点で言うと、Claude CodeやCursor、Codex CLIといった主要なAIコーディングエージェントの多くがコードベース理解のためにrgコマンドを主要な検索手段として採用しているそうです。1つのタスクの中で10〜30回ほどrgコマンドでの検索を実行することも珍しくなく、1回の検索が数秒かかるようだと体感速度が大きく損なわれてしまうため、この速さが地味に重要になっているとのことでした。
さいごに
最初は「なんでgrepじゃなくてrgを使おうとするんだろう」くらいの軽い疑問だったのですが、調べてみると単純な速度差だけでなく、.gitignoreを自動で読んでくれる賢さや、AIエージェントとの相性の良さまで背景にあることが分かり、腑に落ちました。
AIコーディングが失敗して別のコマンドにフォールバックする様子をただ眺めているだけでも、こうして掘り下げてみると新しい発見があるものですね。今回は検索ツールでしたが、他にも「AIがなぜかいつも使うコマンド」を探してみると、まだ知らない便利なツールに出会えそうな気がしています。
