6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

ある日ふと、「rg って grep の短縮コマンドみたいでいい名前だな」と思いました。たとえば ls -alla のエイリアスを付けるような感覚に思えます。

もちろん実際には、rg(ripgrep)は grep のエイリアスではなく、まったく別のプログラムです。とはいえ操作感はほぼ同じで、しかも高速です。

さらに rg はデフォルトで

  • ディレクトリを再帰的に検索
  • .gitignore を自動で尊重
  • 隠しファイルや不要なフォルダ(例:node_modules/)を除外

という挙動になっており、コードベース全体に対する日常的な検索に向いています。

最近まで自分は grep/rg をそこまで使いこなせていませんでしたので、この機会に共通の基本オプションと使い方を整理しておきます。

共通で使える便利なオプション

オプション 意味 よくある使い方
-i, --ignore-case 大文字小文字を区別しない error / Error / ERROR を一括検索
-w, --word-regexp 単語全体で一致 User のみ(SuperUser は除外)
-F, --fixed-strings 文字列リテラル一致(正規表現無効) a.b[c] のような記号を含む検索
-v, --invert-match 不一致行を表示 ノイズ行の除外
-n, --line-number 行番号を表示 該当行を特定しエディターでジャンプ
-c, --count ファイルごとの一致数 TODO / FIXME の件数把握
-l, --files-with-matches 一致があるファイル名のみ 参照元ファイルの特定
-L, --files-without-match 一致がないファイル名のみ ライセンス表記欠如の検出など
-o, --only-matching 一致部分のみ表示 ログから URL / ID を抽出
-A N, --after-context=N 一致行の後N行を表示 エラー直後の流れを確認
-B N, --before-context=N 一致行の前N行を表示 直前の処理を確認
-C N, --context=N 一致行の前後N行を表示 文脈をまとめて確認

よく使う基本パターン

# プロジェクト全体で TODO を検索(再帰)
rg "TODO"
grep -R "TODO" .

# 大文字小文字を無視
rg -i "error"
grep -R -i "error" .

# 単語 "User" のみ(AdminUser などは除外)
rg -w "User"
grep -R -w "User" .

# 正規表現を無効化(記号を含む文字列に便利)
rg -F "a.b[c]"
grep -R -F "a.b[c]" .

# 一致しない行のみ表示(ノイズ除去)
rg -v "healthcheck" log/app.log
grep -v "healthcheck" log/app.log

# 行番号を表示
rg -n "class User"
grep -R -n "class User" .

# ファイルごとの一致数
rg -c "FIXME"
grep -R -c "FIXME" .

# 一致があるファイル名のみ
rg -l "ENV['API_KEY']"
grep -R -l "ENV['API_KEY']" .

# 一致がないファイル名のみ(不足の検出)
rg -L "SPDX-License-Identifier"
grep -R -L "SPDX-License-Identifier" .

# 一致部分のみ表示(URL や ID 抽出)
rg -o "http[s]?://[^ ]+"
grep -o -E "http[s]?://[^ ]+"

# 前後の文脈つきで検索(例:前後 3 行)
rg -C 3 "PG::Error" log/
grep -R -C 3 "PG::Error" log/

less で快適にスクロール(less -R

  • less -R は色を保持して出力をそのまま表示します。
  • パイプに流すときは、検索側で常に色を出す設定にします。
# ripgrep
rg --color=always "TODO" | less -R

# grep
grep -R --color=always "TODO" . | less -R

さいごに

-i, -w, -n, -c, -l, -L, -o, -A/B/C, -F, -v などの共通オプションを覚えておけば、greprg を同じ感覚で使い回せます。

日常の開発では高速で便利な rg をつかいつつ、必要に応じてgrepも扱えるように備えておく。それがいちばん現実的で快適な使い方だと感じています。

他にも各コマンド固有の機能がありますが、あえて覚えようとはせず、適宜ドキュメントを参照する方針でいます。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?