2009-01-10
emacsとRinariで快適Rails開発!
emacsでRails開発をする際、emacs-railsを使っている方が多いと思います。emacs-railsはとても便利なelispなのですが、最近は更新頻度が低く、rhtml→html.erbの対応も一部されていなかったりします。あとRspecの対応もイマイチ。emacs使いの人たちは一体どうやってRails開発しているのでしょうか?
そこでRinariですよ
Rails On Emacs | Google グループを見ると最近は"Rinari"の話題で持ち切りなようです。Rinariはemacs-railsとは違いコア部分を小さく保って、プラグインで拡張していくタイプのelispです。
Rinari: Ruby on Rails Minor Mode for Emacs
基本的には上記に全部書いてあるのですが、整理する意味でまとめてみます。
コア部分のインストール
git clone git://github.com/eschulte/rinari.git
cd rinari
git submodule init
git submodule update
.emacsに下記のように書けばコア部分の設置は完了です。
;; Interactively Do Things (highly recommended, but not strictly required) (require 'ido) (ido-mode t) ;; Rinari (add-to-list 'load-path "~/path/to/your/elisp/rinari") (require 'rinari)
上のほうでrequireしているido-modeですが、これはC-x C-fなどした時にファイル名の一覧をミニバッファに表示してくれ、さらにファイル名を補完できるモードです。ファイル名の一部を入力するか、C-sまたはC-rでファイルを選択して開く事が出来ます。最初はちょっと戸惑うかもしれませんが、慣れたら便利です。
ido-modeの使い方
詳しくは下記参照なのですが、こちらも簡単に整理してみます。
EmacsWiki: Interactively Do Things
- C-sで次のファイルを選択、C-rで前のファイルを選択
- tabで補完一覧表示。一覧が一つしかない時はそのファイルを開く。
- C-fすると通常のC-x C-fの状態に戻る
- //でルートディレクトリへ
- C-x C-dでDired
Rhtmlオプションのインストール
次にrhtml(erb.html)を編集するときに使うelispをインストールします。rhtml(erb.html)用のマイナーモードは3種類から選べるようになっています。
- nXhtml-Mode
- MuMaMo-Mode
- rhtml-Mode
nXhtml-ModeとMuMaMo-Modeは外部のプロジェクト。rhtml-ModeはRinariプロジェクトで作っているらしいので、僕はrhtml-Modeをインストールしてみました。GitHubからダウンロードして、.emacsに下記のようにすれば設定完了です。
;;; rhtml-mode (add-to-list 'load-path "~/path/to/your/elisp/rhtml") (require 'rhtml-mode) (add-hook 'rhtml-mode-hook (lambda () (rinari-launch)))
rhtml-Modeは、htmlタグやerbのタグをインデントしてくれるminor-modeです。他にも機能があるかもしれません。が、erbのタグがきちんとインデントされるようになっただけで僕は今のところ幸せです。
Rinariのキーバインド(Navigation系)
C-c ; fがプレフィックスで、続くキーに対応するディレクトリをfindします。また、各ファイル間の関連にも対応しており、例えばUsersController.rb編集していてC-c ; f mとすると、app/models/User.rbを探し開きます。存在しない場合はapp/models/配下のファイルから選択します。
| キーバインド | findするディレクトリ |
|---|---|
| C-c ; f f | RAILS_ROOT/ |
| C-c ; f c | app/controller/ |
| C-c ; f m | app/models/ |
| C-c ; f v | app/views/ |
| C-c ; f h | app/helper/ |
| C-c ; f i | db/migrate/ |
| C-c ; f n | config/ |
| C-c ; f e | config/environment/ |
| C-c ; f j | pubic/javascript/ |
| C-c ; f l | vendor/plugin/ |
| C-c ; f o | log/ |
| C-c ; f p | public/ |
| C-c ; f s | script/ |
| C-c ; f t | test/ |
| C-c ; f w | lib/workers/ |
| C-c ; f x | test/fixtures/ |
| C-c ; f y | public/stylesheets/ |
| C-c ; f r | spec/ |
| C-c ; f z | spec/fixtures |
Rinariのキーバインド(その他)
部分テンプレート作成
view編集時に、範囲選択してC-c ; x するとその部分を部分テンプレートにできます。
rgrep
C-c ; gすると、railsプロジェクト上のファイルをgrepできます。.svn/配下のファイルは対象外なので地味に便利。
<%= %>の挿入
C-c ; eとすると<%= %>が挿入されます。snippetを設定したら必要ないかも。
部分テンプレートへ移動?
C-c ; ;とすると、<%= render の部分を探して、指しているテンプレートへ飛べるらしいのですが・・・僕の環境ではうまく動きません。解決法ご存知の方いたら教えてください><
(追記)
renderメソッドを使用している行でC-c ; pとすると、指しているテンプレートへ飛べます。
scriptの実行
C-c ; sとして、さらにscriptの名前を指定してやると対応するscriptを実行できます。
ちなみにこのキーバインドや、ここより下のキーバインドを試したときに、「Missing the Rails gem.」のようなエラーが出る方はEmacsのPATHの設定を修正する必要があります。僕は下記のようにして解決しました。
;; PATHの追加 (dolist (dir (mapcar 'expand-file-name '("/usr/local/bin"))) (setenv "PATH" (concat dir ":" (getenv "PATH"))) (setq exec-path (append (list dir) exec-path)))
Mac 以外の方は.profileにPATHを設定してやるとうまくいくらしいです。詳しくは下記参照。
execution problem - Rails On Emacs | Google グループ
sqlのコンソールを開く
C-c ; q として、その後ユーザ名やらパスワードをいれるとsqlのコンソールを開けます。
テストの実行
C-c ; t とするとテストの実行が出来るようです(rspec使いなので未検証)
Rakeの実行
C-c ; r として、rakeタスクを続けて書く事でタスクを実行できます。
script/consoleの実行
C-c ; c とすると、script/consoleが実行されます。
webサーバの起動
C-c ; w とすると、script/serverを実行したのと同じようにwebサーバが起動します。
snippet
Rinari本体にはsnippet機能はないようなので、別途elispをインストールしてやる必要があります。
eschulte’s yasnippets-rails at master ― GitHub
上記からyasnippetとyasnippets-railsをダウンロードして適当な場所に展開します。その後.emacsに下記のように設定してやります。
;; load-pathにyasnippetのパスを通す (setq load-path (cons (expand-file-name "/path/to/yasnippet") load-path)) ;; yasnippetのロード (require 'yasnippet) (yas/initialize) (yas/load-directory "/path/to/yasnippets-rails/rails-snippets")
snippetがたくさん定義されました。やったね。
まとめ
現段階でもemacs-railsとほぼ同等の機能をもっており、今後も開発が継続されるはず(多分)なので、emacs-rails使いの方は乗り換えを検討してみてもよいのではないでしょうか。
- おもしろWEBサービス開発日記 - Carbon Emacsにデフォルトで入って...
- transparency1979の日記 - Railsのお勉強 (0) 環境構築
- Hatena::Diary::Ubuntu - Railsアプリ開発のために書いたEmacs Lisp...
- I am Cruby! - EmacsでのRails開発にrinariを使い始めた
- 量子ドラム - Meadowパッケージリスト[p〜z]
- HAINI’s diary - emacsにrinariを導入
- 超学習帳 - Ruby On Rails 開発用に Emacs に Rinari を導入しました
- rinariでサーバー起動ができない場合
- 刺身☆ブーメランのはてなダイアリー - rhtml-mode をいれた
- ふわふわRuby on Rails - 【Emacs】EmacsLisp 超基礎
- 牌語備忘録 - pygo - 『Rinari』を使ってみる -- EmacsでRails環境
- 岡山県北でがんばるフリーエンジニアのメモ - Rails 3.1 メモ
- 19 http://reader.livedoor.com/reader/
- 7 http://b.hatena.ne.jp/entrylist
- 5 http://www.google.co.jp/reader/view/
- 4 http://fastladder.com/reader/
- 4 http://twitter.com/home
- 4 http://www.google.com/reader/view/
- 3 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=BcI&q=rails+cookies+取得&btnG=検索&lr=lang_ja
- 2 http://b.hatena.ne.jp/entrylist?sort=hot
- 2 http://b.hatena.ne.jp/t/rails?mode=rss&sort=eid&threshold=3
- 2 http://ezsch.ezweb.ne.jp/search/?sr=0101&query=脳にいいこと




