Git
GitDay 16

Git grepを便利に使う-eオプションについて

More than 5 years have passed since last update.

outline

  • git-grepの話
  • -eオプションの話
  • --andオプションの話

git-grepの話

UNIX系のOSを使ったことのある人ならみんな大好きgrepコマンド。
その拡張がgit-grepだ。

ふつうのgrepだと、指定したディレクトリ以下のファイル『全て』を検索対象としてしまうため、膨大な時間がかかることがよくある。そして時間を持て余してネットサーフィンしたりコンビニに買い物に行ったりする。そして帰ってきて見るとファイルが見つからなかったりして、貴重な労働時間をムダにするのである。

そこでgit-grepですよ

git-grepは、gitで管理しているリポジトリの範囲内でgrepするコマンドだ。
何が違うかというと、

  1. gitで管理しているリポジトリの中身「しか」検索できない
  2. その分ふつうのgrepと比べて圧倒的に速い

というところである。
もちろんふつうのgrepも、ちゃんと用法用量を理解して正しくお使いになれば、素晴らしい成果を出してくれるツールだが、個人的にはgitを使って開発する御方々には、ぜひともgit-grepを使って、何も考えずに快適にgrepしてほしいと考えている。

この記事ではgit-grepそのものについては詳しくは書かない。というかそういうのはPro Gitとかmanpageとかを読めばだいたい分かるので、そっちを参考にして欲しい。

-eオプションの話

で、git-grepgrepでもあるから、当然正規表現による絞り込みができる。例えば、こんな感じ。

$ git grep -e ‘current_user’

-eオプションの引数に文字列を渡してやると、その文字列で引っ掛けてきてくれる。
めっちゃ便利である。
もちろんスペースとかも認識してくれるので、こんな書き方もできる。

$ git grep -e ‘def current_user’

よい。
しかし、この方法だと ”検索したい文字列をそのまま” 渡さなきゃいけなくて、ちょっと不便。
正規表現だし、ちゃんとスペースとか無視したい文字列とかを上手いこと書いてやれば、期待通りの結果を返してくれるが、それをやるのはちょっと面倒くさいなぁ、ということもよくある。

なので、そんなプログラマーの三大美徳のひとつをこよなく愛する皆様には、--andオプションをおすすめしたい。

--andオプションの話

使い方はこうである。

$ git grep -e def --and -e current_user
app/controllers/company_users_controller.rb:  def set_current_user
app/controllers/users/social_media_accounts_controller.rb:  def the_user_must_be_current_user
lib/authentication.rb:    def current_user

大変簡単である。

--andでつながっている正規表現オプションが全て適用されるので、とても使い勝手が良い。
マッチしないものは表示されないし(ANDなんだから当たり前か)、これなら無精で短気な人達でも満足できるはずである。

ちなみに今試してみたら、やっぱり--orも存在した。使いドコロが難しいが、ハマれば強力なツールとして使えると思われる。

$ git grep -e def --and -e required --or -e current_user

みたいな使い方も出来る。(超個人的にはここまで複雑な検索が必要なアプリは作ったことはないが、)自分のリポジトリで色々試して遊んでみて欲しい。

しかし、gitは掘れば掘るほど色々なコマンドやオプションが登場するから、面白いなぁ。