on Rails : OSX+Emacsで快適なRails開発環境

http://blog.masuidrive.jp/articles/2006/05/23/rails-on-osx-and-emacs
http://blog.masuidrive.jp/articles/2006/05/23/rails-on-osx-and-emacs
これを実際に試そうという試み.

EmacsなのにEclipse以上の環境を作る事ができました.

そもそもEclipseよりEmacsのほうが使いやすい感がある(主観)ので,こりゃスゴい事になるかもしれんぞ.

あとは,migrationをもう少し楽にできるツールが欲しいかな.

もうEmacsとターミナルが動いているだけで良いのなら,それ以外に望むものは無い・・・.やってみる!


Subversionの恩恵は未だに受けた事が無いので,ちゃんと受けれるようになってからpsvn.elを使ってウハウハすることにする.ので,今回インストールするのは

の2つで良いか.

rails.el

まずはrails.elを入れる.RubyForgeからいちいちダウンロードするのも格好悪いので,どーかgemでインストールできるようにして頂きたい・・・.とか言いつつ,とりあえずダウンロード.
rails.el
まずはREADMEを読んでみる.フムフム.

  • WEBrick/Mongrelを管理してくれるのね.WEBrickは知ってるけどMongrelって何?って人*1は,ライド・オン・Railsの305ページを見てください.
  • ActionとViewもしくはtests,helperなどを,自動的あるいはメニューによってToggle Switch(?)してくれる.Toggle Switchはきっとカッコいいんだよ.
  • Switching to file from current line f.e. from redirect_to :controller => ネfooノ, :action => ネbarノ, swtich to this controller/action

うわ,文字化けしてる.気を取り直して次.

  • TextMate(!)みたいな断片(どのように解釈すれば良いのだろうか)
  • 自動でRAILS_ROOTにタグを作ってくれる・・・どういう意味?
  • などなど,とりあえずたくさんのFeatures!!(読むのが面倒くさくなった!)

とりあえず入れる!

== Install ==

Download:
* http://www.kazmier.com/computer/snippet.el
* http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt
and place into directory where emacs can find it.

なにぃ,仕方ない入れるか.解凍して出来たディレクトリに移動して,curlでパパっと落とす.

$ curl http://www.kazmier.com/computer/snippet.el > snippet.el
$ curl http://www.webweavertech.com/ovidiu/emacs/find-recursive.txt \
 > find-recursive.el

次に,このディレクトリをemacsが読める位置に移す.あれば~/Library/emacsに移動.

$ mv emacs-rails ~/Library/emacs/


それでは.emacs.elの編集を行う.

;; rails.elを読み込む
(setq load-path (cons "~/Library/emacs/emacs-rails" load-path))
(defun try-complete-addrev (old)
  (if (expand-abbrev) t nil))
(setq hippie-expand-try-functions-list
      '(try-complete-abbrev
	try-complete-file-name
	try-expand-abbrev))
(require 'rails)

こんな感じで良い.Mongrelを使いたい人は,

(setq rails-use-mongrel t)

と書き込めばOK.これでrails.elは終わり.ところで,どうやってワンタッチな移動をするんだろうか?
http://rubyforge.org/docman/?group_id=1484
に置いてあるReview of Emacs Rails (draft 2) [ review.zip ] をダウンロード,解凍して,中に置いてあるindex.htmlに結構詳しく書いてある・・・うわ,使いやすそう!


ECB

ECB(Emacs Code Browser)は,http://phys8.s.chiba-u.ac.jp/~kobayash/mt/r_weblog/archives/2006/06/emacs_code_brow.htmlによると,関数の一覧表示をしてくれるイカす野郎だなオイィ.


しかしこれ,タイミングが悪かったのか,http://ecb.sourceforge.net/をなかなか開いてくれなかったので,http://sourceforge.net/からECBを検索してダウンロードするのが最速だった.


落としてきたら,早速READMEを読む.
必要なパッケージに

  • Semantic
  • Eieio
  • speedbar

とあるので,しゃーない,インストールするか・・・.


http://sourceforge.net/project/showfiles.php?group_id=17886&release_id=338764
ここに,欲しいヤツはとりあえず全部置いてあるので,落とす.ただ,困った事に,一つとしてREADMEが付いてない.


とりあえず解凍して出てきたECB,Semantic,Eieio,speedbarのディレクトリを~/Library/emacsに移動してみるか.根拠は,ECBのインストールに必要なのがロードパスの指定とrequire云々って書くだけだから,他のヤツも同じテンションで出来るでしょうという勢い.

$ mv ecb-2.32 ~/Library/emacs/
$ mv semantic-1.4.4 ~/Library/emacs/
$ mv eieio-0.17 ~/Library/emacs/
$ mv speedbar-0.14beta4 ~/Library/emacs/

で,結局.emacs.elはこうなった.

(setq load-path (cons "~/Library/emacs/ecb-2.32" load-path))
(setq load-path (cons "~/Library/emacs/semantic-1.4.4" load-path))
(setq load-path (cons "~/Library/emacs/eieio-0.17" load-path))
(setq load-path (cons "~/Library/emacs/speedbar-0.14beta4" load-path))
(require 'ecb)
(require 'semantic)
(require 'eieio)
(require 'speedbar)

気持ち悪い事になっているのは,ボクがLisp(というか.elの普通の書き方)を知らないから.


最後に,F8キーでECBを起動できるように,http://blog.masuidrive.jp/articles/2006/05/23/rails-on-osx-and-emacsを参考にして以下を追加.

(setq ecb-tip-of-the-day nil)
(setq ecb-windows-width 0.25)

(defun ecb-toggle ()
  (interactive)
  (if ecb-minor-mode
      (ecb-deactivate) 
    (ecb-activate)))
(global-set-key [f8] 'ecb-toggle)

なぜF8かというと,ボクはPowerBookだから.わざわざfnキー押すのも面倒くさいという人なんです.


これで,EclipseよりもRadRailsよりもVimよりもEmacsが好き!な人にとってはたまらないRails開発環境の完成です.

副作用

いっぱいelを読み込むので,Emacsの起動が鬼(Eclipseほどでない)のように重くなります.

使ってみた結果

ちょーかっこええ.

おまけ

半透明フリークなあなたに持ってこいの設定.何処で読んだんだろう?出典失念.しかもMac限定なのかな?

;;半透明化
(setq default-frame-alist
  (append (list '(active-alpha . 0.90)
                '(inactive-alpha . 0.80)
          ) default-frame-alist))

active-alphaは,emacsのウィンドウがアクティブなときの不透明度,inactive-alphaはウィンドウがアクティブじゃない時の不透明度.

*1:そうですボクです