◉CLAUDE LABEN
●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした
記事一覧/Claude Code
⟐ Claude Code/2026-10-14上級

Grep の先頭250行は、一致した183ファイルのうち42ファイルしか見ていませんでした

記事リポジトリで「hook」を探したところ、一致は1,312行・183ファイル。ripgrep・git grep・grep の速さは11〜35 msで差がなく、効いたのは出力の量と順番でした。先頭250行の取りこぼしを事前に見積もるスクリプトと、探索の順番を実測値つきでまとめます。

Claude Code263Grepripgrepコンテキスト7ベンチマーク

✦ プレミアム記事

検索コマンドの速さを測るつもりで、表を作っておりました。ripgrep、git grep、昔ながらの grep。同じ語を同じフォルダで7回ずつ走らせて、中央値を並べます。

表ができあがって、手が止まりました。時間の列は、どれも11〜35 msに収まっています。差を論じる意味がありません。目を引いたのは、隣の「出力バイト数」の列でした。同じ語の検索なのに、15,207 バイトから 771,629 バイトまで、50倍ほど開いています。

個人開発で運用している Web サイトの記事リポジトリ(MDX を日英で各893本)での測定です。検索ツールの比較で見るべきは速さではなく、返ってくる量と、その量の切り取られ方でした。その記録をお伝えします。

測った条件

環境と手順を先に書いておきます。再現していただく際の手がかりになれば幸いです。

  • 作業用の Linux 環境(4 コア)、ripgrep 13.0.0、GNU grep、git
  • 対象は content/articles/ja(893ファイル)。語は hook(大文字小文字を区別しない)
  • 各コマンドを7回走らせ、実行時間は中央値。出力は標準出力のバイト数と行数、最長の1行を記録
  • トークン数は測っておりません。ここでの「量」はバイトと行数です

測定に使った Python は、次のとおりです。そのまま貼って動きます。

import os
import statistics
import subprocess
import time
 
os.chdir(os.path.expanduser("~/repos/claudelab.net"))  # 自分のリポジトリに置き換えてください
 
def run(cmd, n=7):
    times, out = [], b""
    for _ in range(n):
        t = time.perf_counter()
        # rg は 0 件だと exit 1 を返すので、check=True にはしません
        out = subprocess.run(cmd, shell=True, capture_output=True).stdout
        times.append((time.perf_counter() - t) * 1000)
    lines = [l for l in out.split(b"\n") if l]
    longest = max((len(l) for l in lines), default=0)
    return statistics.median(times), len(out), len(lines), longest
 
COMMANDS = [
    ("rg -n", "rg -n -i hook content/articles/ja"),
    ("rg -l", "rg -l -i hook content/articles/ja"),
    ("rg -n -m1", "rg -n -m1 -i hook content/articles/ja"),
    ("git grep -n", "git grep -n -i hook -- content/articles/ja"),
    ("grep -rn", "grep -rn -i hook content/articles/ja"),
]
 
print("label\tms\tbytes\tlines\tlongest")
for label, cmd in COMMANDS:
    ms, size, count, longest = run(cmd)
    print(f"{label}\t{ms:.0f}\t{size}\t{count}\t{longest}")

check=True を付けないのは、ripgrep が「一致なし」を終了コード1で返すためです。ここで例外にすると、0件の日に測定そのものが止まってしまいます。

結果1:速さは、選ぶ理由になりませんでした

実際の数字は次のとおりです。

コマンド中央値出力バイト行数最長の1行
rg -n(リポジトリ全体)27 ms771,6293,4431,010
rg -n(ja のみ)17 ms305,3091,3121,010
git grep -n19 ms305,3091,3121,010
grep -rn30 ms305,3091,3121,010
rg -l14 ms15,207183113
rg -c16 ms15,611183116

3つのツールは、出力のバイト数が一致しました(どれも305,309 バイト)。速さの差は最大でも13 msです。Claude に検索を任せる場面で、この差が体感に出ることはまずありません。

意外だったのは、リポジトリ全体を対象にした一行目です。範囲を content/articles/ja に絞らないだけで、出力は771,629バイトまで膨らみました。英語版と src が混ざるためです。時間は10 ms増えただけで、量は2.5倍になっています。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦一致が多い検索で、見落としを出さずに文脈の消費も抑える探索の順番を、自分のリポジトリで決められるようになる
✦読み込む前に、一致数と「先頭250行で触れられるファイルの割合」を数秒で見積もれるようになる(手元で動くスクリプト付き)
✦検索ツールの速さ比べに時間を使わずに済み、効く場所(出力の絞り方)から直せるようになる
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-08-14
生成物1ファイルが手書きコード70本より重いので、Claude Code に読ませる範囲を決め直しました
運用中のリポジトリを対象に、どの領域が文脈をどれだけ食うかを数え直しました。生成物の除外・探索パターンの選び方・settings.json での固定まで、実際に決めた運用ルールとその根拠をまとめます。
⟐ Claude Code2026-10-13
「cd して git add して commit」の承認が毎回出る — 設定の抜けではなく、仕様だと分かるまでにたどった道
cd /path && git add && git commit のような複合コマンドで、許可ルールを入れても承認が繰り返し出る。公式の権限ドキュメントと GitHub の報告を突き合わせると、cd と git の組み合わせは設計上プロンプトが出ると分かりました。原因の切り分け順と、手数を減らす4つの直し方を並べます。
⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。