[Rails] emacs での grep-gems コマンド

今日は、emacsRails でのコーディングをする上での tips を紹介します。

その名も grep-gems コマンドです。

これを実行することで、/usr/lib/ruby/gems/1.8/gems/ 以下のディレクトリに対して再帰的に grep を実行します。

私はメソッドの定義や、テストプログラムでのそのメソッドの使われ方を調べるときによく利用しています。

正直言って、現在でも Ruby On Rails ではかなり多くのメソッドは、まだ、充分にドキュメントが整備されているとはいえない状況です。

そのため、今でもソースを読み込むことが自分がやりたいことが可能かどうかを調査する一番優れた方法となってしまっています。Rails のソースを全文検索することはどうしても必要不可欠な作業です。

しかしながら、繰り返し行っていると、生産性が落ちます。DRY の原則にも反します。だいたい単純に面倒です。というわけで、せっかく emacs を使っているのだから、M-x grep や M-x grep-find をベースにして gems ディレクトリ以下を全文検索するように再定義したのが grep-gems 関数です。

関数の定義は次のとおりです。

(defun grep-gems (command-args)
  (interactive
   (progn
     (unless grep-find-command
       (grep-compute-defaults))
     (list (read-from-minibuffer "Run find (like this): "
                                 grep-find-command nil nil
                                 'grep-find-history))))
  (cd "/usr/lib/ruby/gems/1.8/gems/")
  (let ( (null-device nil)) ; see grep
    (grep command-args)))

見てもらえればすぐに分かるとおり、emacs で標準に添付されている grep-find コマンドをカレントディレクトリを変更してから実行しているだけです。

これを .emacs に書いておけば、M-x grep-gems と実行するだけで gems ディレクトリを全文検索できます。