2 ポイント 投稿者 GN⁺ 2025-10-19 | 1件のコメント | WhatsAppで共有
  • ripgrep 15.0 は、バグ修正、性能改善、新機能の追加など、さまざまな更新を含むメジャーリリース
  • gitignore ルールの適用に関するバグが多数修正され、大容量ファイル処理時の メモリ最適化 も行われた
  • Windows aarch64 プラットフォームのサポートが追加され、powerpc64 のサポートは終了
  • 新機能として、--json と置換フラグの同時サポート、glob のネストした波括弧サポート などがある
  • 全体的な 性能改善、バグ修正、使い勝手の向上により、開発者の生産性が高まる

ripgrep 15.0 概要

ripgrep 15.0 は ripgrep の最新メジャーバージョンリリースで、主に バグ修正、軽微な 性能向上、小規模な 新機能 の追加を含む

ripgrep は、現在のディレクトリから正規表現パターンを再帰的に行単位で検索するツール
デフォルトで gitignore ルールに従い、隠しファイル/ディレクトリおよびバイナリファイルを自動的にスキップする

主な変更点

  • 複数の gitignore マッチング関連のバグ を修正
    • 親ディレクトリの gitignore ルール適用に関して頻繁に報告されていたバグを解消
  • 非常に大きな gitignore ファイル処理時に発生していた メモリ使用量増加バグ を修正
  • rg -vf file で file が空のとき、すべてにマッチするように変更
  • -r/--replace フラグが --json と一緒に正しく動作するようになった
  • 一部の Jujutsu(jj) リポジトリ も git リポジトリのように認識し、ripgrep で jj の gitignore に従う
  • glob が ネストした波括弧 をサポート

プラットフォームサポート

  • Windows 向け aarch64 のリリースバイナリを新たに提供
  • powerpc64 向けリリースバイナリの提供は終了
    • CI リリースワークフローの問題による中止であり、テストやサポートを希望する場合は要望可能
  • ripgrep バイナリは LTO(リンク時最適化) でコンパイルされており、わずかな性能向上とサイズ削減の効果がある

性能向上

  • Windows-z/--search-zip オプション未使用時、helper バイナリ探索を無効化 して性能を改善
  • Windows で ハイパーリンク出力時のパス正規化を省略 して高速化
  • -A/--after-context 使用時の 大きな値 の処理性能を改善

バグ修正

  • 親ディレクトリの gitignore 適用漏れ など、複数の gitignore 関連問題を修正
  • 空ファイルを対象にした rg -vf file コマンドがすべてにマッチするよう修正
  • .gitignore などで UTF-8 BOM マーカーを無視 する処理を追加
  • 大容量 gitignore ファイル処理時の メモリ使用を最適化
  • --stats 使用時の 検索済みバイト数の出力エラー を修正
  • . で終わる glob の処理エラーを修正
  • -m/--max-count-U/--multiline の組み合わせ使用時の マッチ数超過表示 の問題を解決
  • -r/--replace フラグ使用時に 行終端を保持 するよう変更
  • -q --files-without-match の組み合わせ使用時の 終了コード反転 バグを解決
  • -c/--count--files-with-matches のドキュメント不一致を解消
  • 大規模な正規表現および入力時にまれに発生していた panic 問題を修正
  • man page のオプションフラグ名におけるハイフンのエスケープを処理
  • macOS aarch64 リリースで PCRE2 を静的コンパイル
  • ホワイトリスト化された隠しファイル検索時の 親ディレクトリ無視フィルタ のバグを修正
  • --json フラグ使用時の 誤った要約統計 の問題を解決
  • 絶対パスおよびグローバル gitignore 検索時の gitignore 処理エラーを修正
  • -U/--multiline-r/--replace の組み合わせ使用時に発生していた panic 問題を修正

機能改善

  • デフォルトのファイルタイプセットを大幅に 拡張改善
  • -r/--replace--json と互換になるよう改善
  • fish shell の補完機能が ripgrep の 設定ファイル を反映するよう改善
  • --color で使えるスタイル属性に italic を追加
  • .jj ディレクトリを git リポジトリとして扱う
  • マルチスレッド使用時、CLI で指定したファイル順 に検索をスケジュールする機能を追加
  • Windows 向け aarch64 リリースアーティファクトを追加
  • highlight カラータイプ を追加し、マッチした行の非マッチテキストもスタイリング可能に
  • globs および globset crate に ネストした alternates 機能を追加
  • --hyperlink-format の自動補完機能を bash、fish、zsh で改善

1件のコメント

 
GN⁺ 2025-10-19
Hacker Newsのコメント
  • ripgrepはここ数年で本当に大量の時間を節約してくれたツールです。新しいシステムを始めるたびに最初にインストールする必須ツールで、特に古いコードベースを探索するときには欠かせません。ひとつだけ残念なのは、-F(リテラル扱い)オプションを使うときでも、いくつかの文字が依然としてエスケープが必要な特殊文字として扱われる場合があることです。正確にどの文字だったかは覚えていません。それでも、ripgrepが更新され続けているのを見るたびにうれしくなります

    • もしどの文字で問題があったのか例を挙げてもらえれば、具体的に説明できます。-F/--fixed-stringsはパターン内の正規表現機能を100%無効にして、リテラルとしてのみ扱います。エスケープが必要だとすれば、それはおそらくシェル側で要求されているのが原因です
  • rgはまるで魔法のように感じられるツールです。実際には、卓越したエンジニアリングと継続的な改善、そして私たち全員が毎日使っている驚くべきハードウェア性能を最大限活用した結果です。また、lspのような標準を別途作らなくても、開発者がより速くコードを探索し理解できるようにした革新でもあります

    • この文脈でsmithingがどういう意味なのか本当に気になります
  • ripgrepのコードベースは、「飲み物を用意していちばん快適な椅子に座り、高品質なソフトウェアを読みふける」最高の例です。あちこちコードの隅々をクリックしながら感嘆してしまいます

  • fdと同じように、rgも本当に使っていて楽しいコマンドラインツールです。こういう新しいコマンドベースのツールが好きです

    • ripgrepとfdの作者たちがAstralで働いていると最近知りました。Astralのソフトウェアがこんなに良い理由が分かった気がします
    • どちらのツールも、特にオプションを付けなくてもデフォルトで99%自分の望む通りに動いてくれます。ものすごい時間の節約です。たとえば rg <string>fd <string> と入力するだけで十分です
  • 個人的に追加されてほしい機能は「拡張子」フラグです。-gのように動作しつつ、入力引数を拡張子として扱う機能です(例: rg -e c,h のように)。globパターンを使う目的の大半は拡張子マッチングだからです

    • -t/--type フラグを見たことがあるか聞きたいです。例のように -tc と書けます。ripgrepに存在しない拡張子なら、自分でtypeを定義することもできます
  • ripgrepは、私がrustに興味を持ち始めた主なきっかけです。あまりにも完成度高く動くので、rustで書かれていると知ってさらに興味が湧きました。何年も経った今でも毎日 rg を使っています

    • nibblesは、私がqbasicに興味を持つようになった主な理由でした。完成度が高く、qbasicで書かれていることに興味を引かれ、そのおかげでnibblesを毎日使うようになりました
  • 最近 --replace オプションを見つけて、かなり感心しました。--type と一緒に使いながら、以前はこんなに便利な機能があると知らなかったのが惜しいです。これからはリリースノートをきちんと読んで、新機能にもっと敏感に対応しようと思います。jjとの連携機能が改善されたのもうれしいです

  • 素晴らしいツールでありながら、とても使いやすいです。最初はLinuxで使い始めましたが、今ではWindowsでも使っています。このツールのおかげで、今ではwildcardの代わりに正規表現をそのまま検索に使うようになりました

    • 標準のgrepより優れていて、rg --files コマンドも便利です
  • 今週、gitが追跡しているファイルだけに対してripgrepを実行するbash関数を作りました

      rgg() {
        readarray -d '' -t FILES < <(git ls-files -z)
        rg "${@}" "${FILES[@]}"
      }
    

    バイナリファイルやdotファイルが多いディレクトリでは、かなり速く検索できます。dotファイルを検索するには-uuオプションが必要ですが、このオプションはバイナリファイルまで検索してしまいます。ファイル数が数百個になると、git ls-files自体が遅くなります

    • そうした場合に実際に速くなった具体例があるのか気になります。一般にripgrepはすでにgitignoreルールを尊重するので、git ls-filesとかなり似た挙動をします。ちなみに-uuオプションは、ripgrepにgitignoreとhiddenファイルを無視するよう指示するもので、それでもバイナリファイルはスキップされます。バイナリファイルまで含めるには-uuuが必要です。関数の最大の問題は、Linuxカーネルのリポジトリで使うとargument list too longエラーが出ることです。なのでxargsに変えてみました
        $ git ls-files -z | time xargs -0 rg APM_RESUME
        ...
      
        real  0.638
        user  0.741
        sys   1.441
        maxmem 29 MB
        faults 0
        $ time rg APM_RESUME
        ...
      
        real  0.097
        user  0.399
        sys   0.588
        maxmem 29 MB
        faults 0
      
      このような状況で、git ls-files -z | xargs -0 rg ... が単なる rg ... より速い例があれば共有してほしいです
    • この投稿を書いたあとでマニュアルを読み返して、-uuの代わりに-.フラグ(隠しファイル検索専用)を使えることを知りました。gitが追跡している隠しファイルを検索できると良いのですが、ファイル一覧を問い合わせるときのオーバーヘッドは、Rustで書いても無視できないほどです
    • 何か見落としているのかもしれませんが、ripgrepはもともとgitで追跡されていないファイルをデフォルトで無視するのではありませんか?
    • この方法が git grep より速いのか気になります
  • 毎日の仕事でripgrepを使っています。コマンドラインでも、VSCodeで検索するときでも、いつも使っています。burntsushiに感謝します