Grepはトモダチ

English version.

今回はちょっと実用的技術ブログエントリーになります。

言わずもがなですが、今回のタイトルにある grep は、テキストファイル内の文字列を検索するためのツールです。自分は grep (や、その派生ツールである silver searcher, ack, ripgrep 等)が本当に好きで毎日のように使っています。
エンジニアの方であれば分かることですが、エンジニアは仕事の一環で常にコードを読んでいるため、その時間の内、結構な割合を検索に費やしていると思います。例えば、

  • この関数はどこで定義されているのか?

  • この変数はどこで使われているのか?

  • この設定値はどこから来ているのか?

という問いの答えを探すために毎日検索を使っています。

今回のブログではそれを grep で行うのが便利なことを紹介します。
もちろん、普段お使いのIDE(統合開発環境)で検索できるから不要と思われる方もいるかもしれませんが、それでも grep が便利な理由をいくつか書いていきたいと思います。
(なお、厳密には自分が使っているのは ripgrep というツールですが、 grep という言葉の方が一般的なので、ここでは grep という言葉を使います。)

どんなプログラミング言語でも使える

grep はテキストファイルであればJavaのソースコードだろうが、Pythonのソースコードだろうが問題なく検索してくれます。少し上で述べたようにIDEでも行えますが、言語によってIDEは異なるがことが多く、IDEによって検索のUIが違うので、それぞれのIDEに慣れるのは結構骨が折れます。それに比べて grep は一度覚えてしまえば、どんな言語でも同じように検索できます。

ソースコード以外でも使える

grep はテキストファイルであれば何でも良いのでソースコードに限らず使えます。自分の場合は個人的なメモなどはMarkdownで書いているので、それを検索する際も grep を使いますし、開発の際の設定ファイル(YAMLやXMLなど)の検索にも利用しています。
この設定ファイルを検索できるのが意外と便利です。システムって、ソースコードだけですべてが済む場合は少なく、どうしても設定ファイルなどのソースコード以外のテキストファイルが存在したりするので、それを一括して検索できるのは強力だな、といつも感じています。IDEによってはこれらをうまく検索してくれなかったり、検索できてもUIが使いづらかったりするので、 grep のようなコマンドで手軽に検索できるのは重宝すると思います。

どこでも同じように使える

grep はMacにもWindowsにもあります。MacはBSD Unix由来のツールが入っているので、当然 grep も標準でありますし、最近のWindowsにはWindows Subsystem for Linux (WSL) があるので、そこで grep を使うことができます。
それに加えて、リモートのサーバに接続した際も、自分の環境ではリモートがLinuxマシンであることが多いので、手元のマシンと同じように使えるので効率が良いです。

使うツールが少ない方が効率が良い

なるべくいろいろなタスクで同じツールを使うことで、当然そのツールに慣れてきて効率が上がります。先ほどのIDEの話と同じなのですが、言語ごとや用途ごとにツールを変えてしまうと、そのツールの使い方を覚えるのに時間がかかってしまうので、なるべく少ないツールでタスクをこなせる方が良いです。なので、自分なんかはXcodeでiOSアプリを開発しているときでも、 grep を使って検索したりしています。
もちろん、特定のタスクに特化したツールを使うことで効率が上がる場合もありますので、そういう場合はそういうツールを使うべきです。ただ、そうでない場合は grep で十分だと思います。

今回は以上です。皆さんが grep を使ってみるきっかけになれば幸いです。
自分、他にも手放せないコマンドラインツールがいくつ狩るのですが、それはおいおい紹介できればと思います。

この記事が気に入ったらサポートをしてみませんか?