Aqutras Members' Blog

株式会社アキュトラスのメンバーが、技術情報などを楽しく書いています。

よく使っているEmacsの拡張

こんにちは、taniyuです。
私は普段、Emacsを使って開発しています。

今回は、個人的にかなりおすすめなEmacsの拡張を幾つか紹介します。
紹介する拡張は、どれも検索を支援するようなものです。というのも、開発では既に存在するプロジェクトにアサインされたり、誰かと共同で行うということが多く、他の人が書いたコードを読むということが多くなるためです。

前提(環境について)

Emacsには、helmが入っていることを前提としています。 helmについては、以下にまとめられています。

こちらでも簡単に説明しますが、helmは、「ファイル検索やバッファの切り替え等の処理を統一されたインタフェースで行える」というものです。具体的には、ユーザの入力によって、どんどん候補が絞られていくようなインタフェースを提供してくれます。

拡張機能の導入には、package.elを利用することができます。
package.elは、拡張機能を簡単に導入することができるもので、Emacs24以降であれば、デフォルトで入っています。

おすすめ拡張

今回紹介する拡張機能になります。冒頭でも説明しましたが、auto-completeやyasnippetのように、
コードを書くことを支援するものではなく、コードを読むことを支援するものを紹介します。

helm-git-grep

helm-git-grepは、git grepの結果を、helmインタフェースで利用できるようにするものです。
実際の動作例が以下になります。

f:id:tytaniyu:20160616214124p:plain

上記のように、下側のバッファに、入力した文字を含むファイルが一覧で表示されます。
今回は、booと入力しているため、booという文字が含まれるファイルが順に表示されます。
ファイル名を選択することで、該当ファイルの該当行に移動することができます。
ある関数が使われているところを調べたいという時には、helm-git-grepを使い
該当する関数名を入力することで、調べつつファイルを編集することができます。

helm-gtags

helm-gtagsは、GNU globalをhelmインタフェースで利用できるものです。
globalは、簡単に説明するとソースコードを解析し、索引を作成するようなものです。
これにより、ある関数の定義もとを調べたり、ある関数が使われている場所を調べたりすることができます。 helm-git-grepとの違いは、解析したファイル全部が検索対象となることが挙げられます。
railsを例に説明しますが、globalを使った場合には、redirect_toなどライブラリに定義されており、
gitの管理外のファイルに存在する関数であっても検索することができます。

projectile

projectileは、git等の管理ツールで管理されたプロジェクトに対して、様々な機能を提供してくれる拡張です。
以下は、一部の機能の列挙になります。その他の機能については、こちら(github)を参照すると良いです。

  • projectile-find-file: プロジェクト内のファイルを検索する
  • projectile-find-dir: プロジェクト内のディレクトリを検索する
  • projectile-find-file-in-directory: あるディレクトリ内のファイルを検索する
  • projectile-grep: プロジェクト内のファイルに対してgrepをかける

そして、以下は、projectile-find-fileによって、プロジェクト内のファイルを検索した際の動作例になります。

f:id:tytaniyu:20160616213318p:plain

下側のバッファに表示されているのは、プロジェクト内に管理しているファイルになります。
今回は、applまで入力しているため、applという文字がファイル名に含まれているものが絞りこまれています。
ファイルのパスを入力しなくても、ファイルを選択することで該当ファイルを開くことができるので、
非常に便利ですね。

ちなみに

projectile には、 projectile-railsというrails特化のようなものもあります。
projectile-railsでは、controller から該当する view や model のファイルを開いたり、逆のこともできます。
これにより、いちいち関連するファイルを捜索するという手間を省くことができます。

また、projectile-replaceというコマンドがあり、プロジェクト内のファイル全てに対して、
置換処理を行うことができます。これは、関数名の変更等、既にあるものを変更する際にかなり重宝します。

おわりに

今回は、emacsのおすすめ拡張について紹介しました。
開発では、コードを書くことも重要ですが、読むことも重要となります。
そういったことを支援できるような拡張を導入してみてはいかがでしょうか?

参考

今回は以下のサイトを参考にさせていただきました。ありがとうございます。