5 ポイント 投稿者 GN⁺ 2023-12-01 | 1件のコメント | WhatsAppで共有

要約: 新しいコマンドライン検索ツール ripgrep の紹介

  • ripgrep は、The Silver Searcher の使いやすさと GNU grep の性能を組み合わせた新しいコマンドライン検索ツールです。
  • Linux、macOS、Windows 向けのバイナリを提供しており、Rust で書かれています。
  • 単一ファイルおよび大規模ディレクトリ検索において、性能と正確性の面で優れています。
  • Unicode サポートが非常に優れており、メモリマップを使用するツールより一般的に高速です。

ripgrep の紹介

長所

  • 他の検索ツールより高速で、.gitignore によって無視されるファイルは検索しません。
  • 特定のファイルタイプだけを検索したり除外したりする機能を提供します。
  • grep の多くの機能をサポートし、Unicode を常にサポートします。
  • PCRE2 正規表現エンジンをオプションで使用できます。
  • さまざまなテキストエンコーディングと圧縮ファイルの検索をサポートします。
  • 任意の入力前処理フィルタをサポートします。

反対意見

  • POSIX 標準には準拠しておらず、grep ほど普遍的ではありません。
  • 他のツールにある特定の機能やバグが ripgrep には存在しない場合があります。
  • 性能の特定のエッジケースでは、ripgrep が他のツールより遅いことがあります。

インストール

  • ripgrep のバイナリ名は rg であり、さまざまなプラットフォームでインストールできます。
  • Homebrew、Arch Linux、Rust プログラマ向けのインストール方法が用意されています。
  • ソースから直接ビルドすることも可能です。

クイックツアー

  • ripgrep のコマンドラインでの使い方は、他の類似ツールと大きくは変わりません。
  • ターミナル出力、色、行番号表示などを自動でサポートします。
  • さまざまな検索オプションとパターンを使って検索できます。

ripgrep の構造

背景

  • grepack の派生ツール群の違いと共通点を説明します。
  • ripgrep は、grep の大容量ファイル検索能力と ack の「スマートな」検索デフォルト設定を組み合わせています。

ファイル検索の準備

  • 高速なディレクトリイテレータの使用とファイルパスのフィルタリングが重要です。
  • .gitignore ファイルの規則を高速に適用することが性能に影響します。

検索

  • 高速な正規表現エンジンとリテラル最適化が重要です。
  • ファイル全体ではなく行ごとに検索するのではなく、大きなバッファを一度に検索します。

出力

  • 検索結果をメモリバッファに書き込み、それを stdout にシリアライズして出力します。

方法論

概要

  • ユーザーが解決しようとしている問題に焦点を当て、公正なベンチマークに努めています。
  • さまざまなツールをベンチマークし、各ツールの基本動作の違いを考慮して比較します。

GN⁺ の意見

この文章で最も重要なのは、ripgrep が既存の検索ツールと比べてどのような長所を持っているかを詳しく説明している点です。特に、高速な性能、Unicode サポート、さまざまなファイル形式やエンコーディングへの対応は、ユーザーにとって魅力的な理由になり得ます。この文章が興味深いのは、新しいツールが既存ツールとどう異なるのか、そしてその違いが実際のユーザーにどのような影響を与え得るのかを理解する助けになるからです。

1件のコメント

 
GN⁺ 2023-12-01
Hacker Newsのコメント
  • ripgrep と fzf の組み合わせは非常に高速で、これを活用する PowerShell 関数の例が示されている。この関数は ripgrep で検索した後、fzf を使ってファジー検索を行い、bat で結果のコンテキストを表示する。この方法は、複数のリポジトリにまたがるプロジェクトで特定の内容の場所をすばやく見つけるのに役立つ。
  • Emacs の project.el パッケージと dumb-jump パッケージを使って ripgrep を活用する方法が紹介されている。dumb-jump は特定のプロジェクトディレクトリ内で現在のファイル種別に対する検索へ自動的に絞り込み、ag という別の高速ツールにも対応している。
  • ripgrep が Node.js ラッパー経由で VS Code の検索機能を提供しているという点が興味深い。
  • ripgrep の利用者は、grep と比べた使いやすさと速度向上を主な理由として挙げており、特に gitignore ルールを自動適用する機能を便利に使っている。
  • ripgrep や ag のような並列化された grep 代替ツールは grep よりはるかに高速なため、速度差は大きな評価基準にならず、別の観点で評価すべきだと述べられている。
  • ripgrep の最初の発表が 2016 年だったことを指摘し、タイトルに年号表記が必要だと提案している。
  • qgrep はインデックスを使って高速性を実現するが、UTF-8 の複数行マッチが必要な場合には ripgrep が遅くなることがあると述べられている。
  • Emacs 内で ripgrep を使う Consult パッケージを通じて、プロジェクト全体を編集する便利なワークフローが共有されている。
  • ripgrep-all バージョンは PDF や doc ファイルのような他の文書形式にも対応するという情報が提供されている。
  • grep がなぜ置き換えられたり改善されたりしないのかという疑問が提示され、この話題はやや古いとも評されている。