コマンド紹介シリーズ:rg
コマンド紹介シリーズ第4回は、rgというコマンドを紹介します。rgを使うとリカーシブに正規表現を使って文字列検索を行ったりすることができます。
なお、第3回は以下になりますので、ぜひご興味があればご覧ください。
※ 今回は正規表現を使った検索については省略します。基本的に他のツールと利用方法は変わりません!
rgとは?
rgとは公式の説明によると
ripgrep is a line-oriented search tool that recursively searches the current directory for a regex pattern.
ということで、正規表現を利用してカレントディレクトリからリカーシブに行単位で検索できるツールになります。例えばgrepコマンドなどでテキストファイルから特定の文字列を検索することはできると思いますが、rgを使うととてもシンプルに検索をすることができます。
使ってみる
インストール
私は例の如くmacbookを使っているので、以下のコマンドでインストールできました。
brew install ripgrep
他の方法についてもインストール方法がまとまっているので、ぜひ以下を参照ください。
文字列検索してみる
それではまずはシンプルなテキストを用意してみましょう。今回は以下のような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
検索速度について
公式ブログにて語られているのですが、他のツールと比較しても劣らない性能を持っているようです。オプションについてもとてもシンプルに設計されていることからも、利用を検討してみていいのではないでしょうか。
まとめ
今回は検索ツールのrgについて紹介しました。個人的に一番使っているものとなります(grep使うのが苦手というのは内緒です)。使っている限りとても高速に検索されますし、結果の見やすさも高いので、ぜひ皆さんも使ってみてください。また、今回正規表現からある意味逃げてしまっているので、次回、ちゃんと調べたものを共有させてもらいます。
Discussion