outline
-
git-grep
の話 -
-e
オプションの話 -
--and
オプションの話
git-grep
の話
UNIX系のOSを使ったことのある人ならみんな大好きgrep
コマンド。
その拡張がgit-grep
だ。
ふつうのgrep
だと、指定したディレクトリ以下のファイル『全て』を検索対象としてしまうため、膨大な時間がかかることがよくある。そして時間を持て余してネットサーフィンしたりコンビニに買い物に行ったりする。そして帰ってきて見るとファイルが見つからなかったりして、貴重な労働時間をムダにするのである。
そこでgit-grep
ですよ
git-grep
は、gitで管理しているリポジトリの範囲内でgrep
するコマンドだ。
何が違うかというと、
- gitで管理しているリポジトリの中身「しか」検索できない
- その分ふつうの
grep
と比べて圧倒的に速い
というところである。
もちろんふつうのgrep
も、ちゃんと用法用量を理解して正しくお使いになれば、素晴らしい成果を出してくれるツールだが、個人的にはgitを使って開発する御方々には、ぜひともgit-grep
を使って、何も考えずに快適にgrep
してほしいと考えている。
この記事ではgit-grep
そのものについては詳しくは書かない。というかそういうのはPro Gitとかmanpageとかを読めばだいたい分かるので、そっちを参考にして欲しい。
-e
オプションの話
で、git-grep
はgrep
でもあるから、当然正規表現による絞り込みができる。例えば、こんな感じ。
$ 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は掘れば掘るほど色々なコマンドやオプションが登場するから、面白いなぁ。