Emacs で Rails の開発効率を上げる Projectile Rails まとめ

# [projectile-rails](https://github.com/asok/projectile-rails) とは

Ruby on Rails 向けの Emacs 開発モードです。
[Rinari](http://rinari.rubyforge.org/) が有名っぽいのですが、インストールしてもショートカットとなる `C-c ; f' が `undefined` となってしまうので、こっちを試してみることにしました。

`「It can be a replacement for rinari.」` と謳っていますし、どんなもんなんでしょうか。期待が高まります。

# インストール

package を使ってインストールします。 El-Get とかにも対応しているみたいですが、私が使っていないので試せていません。

# 設定

`~/.emacs.d/init.el` に下記を追加します。

```
(require 'projectile)
(projectile-global-mode)
(require 'projectile-rails)
(add-hook 'projectile-mode-hook 'projectile-rails-on)
```

# コマンド

いっぱいコマンドあるみたいなので、ざっと書いてみます。他にもあるかもしれません。。

コマンド名                                 | キーバインド                                 | 説明
-----------------------------------------|--------------------------------------------|-------------------------------------------------------
projectile-rails-find-model              | <kbd>C-c r m</kbd>                         | app/models 配下のファイルを選択して開く
projectile-rails-find-current-model      | <kbd>C-c r M</kbd>                         | 対応する model を開く
projectile-rails-find-controller         | <kbd>C-c r c</kbd>                         | app/controllers 配下のファイルを選択して開く
projectile-rails-find-current-controller | <kbd>C-c r C</kbd>                         | 対応する controller を開く
projectile-rails-find-view               | <kbd>C-c r v</kbd>                         | app/views 配下のファイルを選択して開く
projectile-rails-find-current-view       | <kbd>C-c r V</kbd>                         | 対応する view を開く
projectile-rails-find-helper             | <kbd>C-c r h</kbd>                         | app/helpers 配下のファイルを選択して開く
projectile-rails-find-current-helper     | <kbd>C-c r H</kbd>                         | 対応する helper を開く
projectile-rails-find-lib                | <kbd>C-c r l</kbd>                         | lib 配下のファイルを選択して開く
projectile-rails-find-feature            | <kbd>C-c r f</kbd>                         |features 配下のファイルを選択して開く
projectile-rails-find-spec               | <kbd>C-c r p</kbd>                         | spec 配下のファイルを選択して開く
projectile-rails-find-current-spec       | <kbd>C-c r P</kbd>                         | 対応する spec を開く
projectile-rails-find-test               | <kbd>C-c r t</kbd>                         | tests 配下のファイルを選択して開く
projectile-rails-find-current-test       | <kbd>C-c r T</kbd>                         | 対応する test を開く
projectile-rails-find-migration          | <kbd>C-c r n</kbd>                         | db/migrate 配下のファイルを選択して開く
projectile-rails-find-current-migration  | <kbd>C-c r N</kbd>                         | 対応する migrate ファイルを開く
projectile-rails-find-fixture            | <kbd>C-c r u</kbd>                         | spec/fixture ファイルを選択して開く
projectile-rails-find-current-fixture    | <kbd>C-c r U</kbd>                         | 対応する fixture ファイルを開く
projectile-rails-find-javascript         | <kbd>C-c r j</kbd>                         | app/assets/javascripts 配下のファイルを選択して開く
projectile-rails-find-stylesheet         | <kbd>C-c r s</kbd>                         | app/assets/styles 配下のファイルを選択して開く
projectile-rails-find-log                | <kbd>C-c r o</kbd>                         | log 配下のファイルを選択して開き、 `auto-revert-tail-mode` を起動する
projectile-rails-find-initializer        | <kbd>C-c r i</kbd>                         | config/initializers 配下のファイルを選択して開く
projectile-rails-find-environment        | <kbd>C-c r e</kbd>                         | config/environments 配下のファイルを選択して開く
projectile-rails-find-locale             | <kbd>C-c r a</kbd>                         | config/locales 配下のファイルを選択して開く
projectile-rails-find-mailer             | <kbd>C-c r @</kbd>                         | app/mailers 配下のファイルを選択して開く
projectile-rails-find-validator          | <kbd>C-c r !</kbd>                         | validator ファイルを選択して開く
projectile-rails-find-layout             | <kbd>C-c r y</kbd>                         | app/views/layouts 配下のファイルを選択して開く
projectile-rails-find-rake-task          | <kbd>C-c r k</kbd>                         | lib/tasks 配下のファイルを選択して開く
projectile-rails-find-job                | <kbd>C-c r b</kbd>                         | app/jobs 配下のファイルを選択して開く
projectile-rails-console                 | <kbd>C-c r ! c</kbd>, <kbd>C-c r r</kbd>   | `inf-ruby` buffer の中で `rails console' を実行する
projectile-rails-server                  | <kbd>C-c r ! s</kbd>, <kbd>C-c r R</kbd>   | `rails server` を実行する
projectile-rails-rake                    | <kbd>C-c r ! r</kbd>                       | rake task を選択して実行する
projectile-rails-generate                | <kbd>C-c r ! g</kbd>                       | `rails generate` を実行する
projectile-rails-extract-region          | <kbd>C-c r x</kbd>                         | 選択した範囲を partial として切り出す
projectile-rails-goto-file-at-point      | <kbd>C-c r RET</kbd>, <kbd>C-c r g f</kbd> | カーソル位置の対応する constant、template、partial、 gem ファイルに移動する
projectile-rails-goto-gemfile            | <kbd>C-c r g g</kbd>                       | `Gemfile` を開く
projectile-rails-goto-routes             | <kbd>C-c r g r</kbd>                       | `config/routes.rb` を開く
projectile-rails-goto-schema             | <kbd>C-c r g d</kbd>                       | `db/schema.rb` を開く
projectile-rails-goto-seeds              | <kbd>C-c r g s</kbd>                       | `db/seeds.rb` を開く
projectile-rails-goto-spec-helper        | <kbd>C-c r g h</kbd>                       | `spec/spec_helper.rb` を開く

覚えておくと便利なのは <kbd>C-c r M</kbd>、<kbd>C-c r C</kbd>、<kbd>C-c r V</kbd> など、MVC の移動系でしょうか。
対応するファイルが複数あったり、うまく見つからない場合は選択形式にしてくれるので便利です。

# 感想

半年くらいつかっているのですが、サーバの起動系や `Gemfile`、`db/schema.rb` を開くコマンドなんかはほとんど使っていないです。
もともとは Atom や SublimeText のインクリメンタルサーチが羨ましくて導入したのですが、流石にアレほどは便利にならなかったです。
ただ、仕事などでプロジェクトに長く関われば関わるほどファイルがどこにあるかはわかるようになってくる気がしますので、それほど不便さは感じていません。
特に私はブランチを切って開発する際に一度 Emacs を再起動しています。その機能の開発でよく行き来するファイルなんかは <kbd>C-c b</kbd> で出てくるバッファ一覧から探せば十分というのも大きいかもですね。