😺

コマンド紹介シリーズ:rg

に公開

コマンド紹介シリーズ第4回は、rgというコマンドを紹介します。rgを使うとリカーシブに正規表現を使って文字列検索を行ったりすることができます。

なお、第3回は以下になりますので、ぜひご興味があればご覧ください。

https://zenn.dev/akasan/articles/5c92827ae75f3c

※ 今回は正規表現を使った検索については省略します。基本的に他のツールと利用方法は変わりません!

rgとは?

rgとは公式の説明によると

ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern.

ということで、正規表現を利用してカレントディレクトリからリカーシブに行単位で検索できるツールになります。例えばgrepコマンドなどでテキストファイルから特定の文字列を検索することはできると思いますが、rgを使うととてもシンプルに検索をすることができます。

https://github.com/BurntSushi/ripgrep

使ってみる

インストール

私は例の如くmacbookを使っているので、以下のコマンドでインストールできました。

brew install ripgrep

他の方法についてもインストール方法がまとまっているので、ぜひ以下を参照ください。

https://github.com/BurntSushi/ripgrep?tab=readme-ov-file#installation

文字列検索してみる

それではまずはシンプルなテキストを用意してみましょう。今回は以下のようなPythonファイルを用意しました。

import os

HOGE = os.environ["HOGE"]
FUGA = os.environ["FUGA"]


def calculate_something(a, b):
  hoge = int(HOGE)
  fuga = float(FUGA)
  return a * hoge + b * fuga


def show_param():
  print(HOGE)
  print(FUGA)


def main():
  calculate_something(1, 2)
  show_param()


if __name__ == "__main__":
  main()

ここで、この中からHOGEを取得してみることにしましょう。例えばgrepを使って検索するとなると以下のようになると思います。

grep -b HOGE main.py

また、現在のフォルダ内にあるファイルを対象とする場合は以下のようになります。

grep -b HOGE *

また、リカーシブに検索するには以下のようにする必要があります。

grep -br HOGE 

これだけみるとわずかなオプションだけなのでそこまで大変ではないかもしれませんね。。。

それではrgを使ってみましょう。デフォルトではrgはリカーシブに検査されます。例えば以下のように実行すると、grep -br HOGEと同じ結果になります。

rg HOGE

ただしみてもらうとわかるように、出力フォーマットが異なり、grepコマンドと比較してみやすくなっているのではないでしょうか?ファイル名がとてもみやすくなり区切りも自動的に作られるので可読性がましていると思います。

大文字小文字の区別

大文字小文字を区別する-i/--ignore-caseです。先ほどのPythonファイルではHOGEとhoge、FUGAとfugaを混ぜていましたが、このオプションを指定するとどちらも検知できます。

rg hoge -i

検索速度について

公式ブログにて語られているのですが、他のツールと比較しても劣らない性能を持っているようです。オプションについてもとてもシンプルに設計されていることからも、利用を検討してみていいのではないでしょうか。

https://burntsushi.net/ripgrep/

まとめ

今回は検索ツールのrgについて紹介しました。個人的に一番使っているものとなります(grep使うのが苦手というのは内緒です)。使っている限りとても高速に検索されますし、結果の見やすさも高いので、ぜひ皆さんも使ってみてください。また、今回正規表現からある意味逃げてしまっているので、次回、ちゃんと調べたものを共有させてもらいます。

Discussion