コード検索といえば長らく正規表現(regex)の独壇場だった。grep、そして高速化したripgrep(rg)——その系譜に真っ向から「オワコン宣言」を突きつけるツールが登場し、Hacker Newsで話題になっている。その名はfff(Fast File Finder)。作者はDmitro Kovalenkoで、「正規表現なし・ripgrepより最大100倍速」を謳う。

ffsとは何が違うのか

fff最大の特徴は**永続インデックス(Persistent Index)**だ。ripgrepはクエリのたびにファイルシステムを全走査する。高速ではあるが、大規模リポジトリになるほどレイテンシが積み重なる。fffは非同期バックグラウンド処理でインデックスを構築・更新し、2回目以降の検索を劇的に高速化する。ベンチマークによればripgrepが6秒前後かかるクエリをほぼ瞬時に返せるという。

もう一つの柱がSmith-Watermanスコアリングだ。これはもともとDNA配列のローカルアラインメントに使われるバイオインフォマティクスのアルゴリズム。コード検索への応用により、タイポや文字の欠落があっても意図したシンボルを高精度で見つけられる。「useEfectと打ってもuseEffectがヒットする」ようなファジーマッチを、正規表現に頼らず実現している。

AIエージェントこそが本命ターゲット

重要なのは、このツールがAI エージェント向けに最適化されている点だ。リポジトリ名もfff.nvimで、Neovimとのインテグレーションを主眼に置いているが、README にはClaude Code・Codex・OpenCodeといったAIコーディングエージェントとの連携を明示している。

AIエージェントがコードを読む際のボトルネックは2つ——時間トークン数だ。fffは「平均10%の実行時間削減・17%のトークン削減」をfff-aiモードで実現すると主張する。アクセス頻度、Gitステータス、ファイルサイズなどを加味したスマートなソートで、エージェントが最初に見るべきファイルを上位に並べる。

つまりfff は「人間が使う検索ツール」ではなく、「AIが使う検索ツール」として設計されている。この発想の転換が従来の類似ツールと一線を画す。

実務への影響

エンジニアへのヒント

  • 現在のワークフロー評価から始める: rg/fzf で体感速度に不満があるなら試す価値あり。特にモノリポや大規模リポジトリで効果が大きい
  • Neovim利用者は即導入候補: fff.nvimとして提供されており、Neovimとのインテグレーションが最も洗練されている
  • AIエージェントの速度チューニングとして: Claude Codeなどのエージェントがファイル探索に詰まっている場合、fff連携でトークン・時間を節約できる可能性がある

IT管理者・アーキテクトへのヒント

  • コード検索の「永続インデックス」はセキュリティ上の注意点も伴う。インデックスファイルの保存先と権限管理は運用前に設計すること
  • ripgrepはリアルタイム性(インデックス不要で最新状態を即座に検索)が強み。fffは繰り返し検索の高速化が強み。用途によって使い分けが現実的

筆者の見解

正直に言う。このツールが今すぐripgrepを置き換えるかといえば、そうは思わない。Hacker Newsのコメント欄でも「34倍という数字はどのベンチマーク条件?」「インデックスの鮮度保証は?」という疑問が相次いでいる。ベンチマーク競争は往々にして恣意的な条件設定になりがちで、鵜呑みにするのは危険だ。

ただ、着眼点は完全に正しい

AIエージェントが自律的にコードを読み・修正し・検証するループを回す時代において、「ファイル検索のコスト」は無視できない摩擦になっている。人間なら多少遅くても慣れで済む話だが、エージェントが1日に数百回クエリを投げるなら話が違う。検索の遅延とトークン消費は、ハーネスループ全体のスループットに直撃する。

fff が主張する「AIエージェントのためのファイル検索」という方向性は、次の1〜2年で確実に主流になる。バイオインフォマティクスのアルゴリズムをコード検索に応用するという発想も面白い——シンボル名のファジーマッチはDNA配列マッチングと構造的に似ているという観察は鋭い。

ripgrepは当分死なない。正規表現は強力すぎる。だが「正規表現しか選択肢がない」という状況は確実に変わる。fffが標準になるかはともかく、この方向性をウォッチしておくことは必須だ。Claude Codeを使い倒している立場からも、エージェントの検索効率を上げる仕組みには今後もアンテナを張り続けたい。


出典: この記事は The future of code search is not regex – 100x faster than ripgrep の内容をもとに、筆者の見解を加えて独自に執筆したものです。