Home > Tags > Rails
Rails
rails.vimのファイル切り替えをRSpecに対応させる(仮)
- 2008-06-05 (Thu)
- article
rails.vimをインストールすると、RcontrollerとかRmodelコマンドでRSpecファイルからControllerやModelファイルに切り替えることができるんだけど、その逆ができないので対応させた。仮なのはVimスクリプトをちゃんと書けなくてコピペのごまかしだから。
書きかえるファイルは~/.vim/autoload/rails.vim。一応行数も書いたけどもしかしたらズレてるかもしれないので参考程度に。あと、バージョンは2.0使ってる。
まずは、:Rspec、:Rspeccontroller、:Rspecmodelを呼び出せるようにする。
1777 call s:addfilecmds("integrationtest")
1778 call s:addfilecmds("spec")
1779 call s:addfilecmds("speccontroller")
1780 call s:addfilecmds("specmodel")
1781 call s:addfilecmds("stylesheet")
なんでわざわざ3つあるのかと言うと、「:Rspec hoge」ってやった時にControllerのスペックなのか、Modelのスペックなのか判断する方法がわからなかったから。だからとりあえず「:Rspec」とやったときは、今開いているファイルに対応するスペックファイルを開き、個別に指定して開きたいときは「:Rspeccontroller hoge」もしくは「:Rspecmodel hoge」で明示的にControllerかModelかを指定するようにした。
次に「:Rspeccontroller [tab]」や「:Rspecmodel [tab]」としたときに、スペック名を補完できるようにfunctionを追加する。
1941 function! s:speccontrollerList(A,L,P)
1942 return s:autocamelize(s:relglob("spec/controllers/",s:recurse,"_controller_spec.rb"),a:A)
1943 endfunction
1944
1945 function! s:specmodelList(A,L,P)
1946 return s:autocamelize(s:relglob("spec/models/",s:recurse,"_spec.rb"),a:A)
1947 endfunction
最後に実際にファイルを開く部分。2331、2334、2340、2345の”spec”、”speccontroller”、”specmodel”が最初に設定したaddfilecmdsの引数と対応するっぽい。なのでfunction名はなんでもいいと思うけど、とりあえず他のに合わせた。
specEditは「:Rspec」に対応していて、開いたファイルがControllerかModelかで開くスペックファイルもかわる。speccontrollerEditとspecmodelEditはControllerかModelどちらか決まったものしか開かない。
2328 function! s:specEdit(bang,cmd,...)
2329 if s:model() != ''
2330 let f = s:model()
2331 return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/models/","_spec.rb")
2332 else
2333 let f = s:controller()
2334 return s:EditSimpleRb(a:bang,a:cmd,"spec",f,"spec/controllers/","_controller_spec.rb")
2335 endif
2336 endfunction
2337
2338 function! s:speccontrollerEdit(bang,cmd,...)
2339 let f = s:controller()
2340 return s:EditSimpleRb(a:bang,a:cmd,"speccontroller",f,"spec/controllers/","_controller_spec.rb")
2341 endfunction
2342
2343 function! s:specmodelEdit(bang,cmd,...)
2344 let f = s:model()
2345 return s:EditSimpleRb(a:bang,a:cmd,"specmodel",f,"spec/models/","_spec.rb")
2346 endfunction
とりあえず、現状の設定で簡易的にRSpecに対応させることができる。「:Rspec」の存在が気持ち悪いのであれば、それは消して開いているファイルがControllerかModelか自分で判断して「:Rspeccontroller」か「:Rspecmodel」を使いわければいいと思う。「:Rspec [tab]」でエラーが出るし個人的には気持ちわるいんだけど、対応させたスペックを開くことの方がおおいし、その時は短いコマンドの方が都合がいいのでここらへんは妥協。今回Viewには対応させていないけれど、同じ要領でできるはず。
rails.vimを少しよんだだけだし、実際の動作もまともに検証してないので変な動作したらごめんなさい。まぁ致命的な問題は起きないだろうけど。正式にrails.vimがRSpecに対応してくれるといいんだけどね。
- Comments: 4
- Trackbacks: 1
RE:Rails初心者はどうやって他人のRailsコードを読めばいいか
- 2008-06-04 (Wed)
- article
オレもRailsを初めて3ヶ月(もうちょいあるかも)たったので、ある程度オレの経験を元にまとめてみる。参考になるといいなー。
1. まずはアプリケーションを実際に動作させる
% ruby script/server
とりあえずコード読む前にそのアプリケーションがどんなものを把握するのが重要。コード読んでもわかるだろうけど、実際にブラウザでいじくりまわした方がはやく理解できると思う。その時にコントローラー名とアクション名もみといた方がよさげ。
2. モデル図を書く
これはid:Hash本人も重要って書いてたけど、ほんとに重要。そんなにキレイな図とかじゃなくていいから、紙とかに多対多なのか1対多なのかとか、参照名はなにかとかぐらいメモがてら書いておくと吉。モデルの関連さえ把握できれば、そのRailsアプリの半分以上理解できたも同然ってぐらい重要。
3. Logをみる
% tail -f log/development.log
開発時にも言えることだけどなるべくLogはみた方がいい。log/の下にdevelopment.log(多分ないと思うけど、productionで動作させてるならproduction.log)があるのでtailコマンドとかでみるといい。フォームのsubmit時のパラメータが見れたり、あとはlogger.infoで出力をチェックしたりとかできる。
4. script/consoleを使う
% ruby ./script/console
基本的な使い勝手はirbと同じ。irbと違うのはRails環境があらかじめロードされていること。例えば、モデルのメソッド名を呼び出したりとか。メソッドレベルで動作をみたい場合に便利。あと、2.0以降からモデル名を入力するとカラムの一覧も表示される。
>> User
=> User(id: integer, created_at: datetime, updated_at: datetime)
>> User.find(:all)
=> []
>> user = User.new
=> #
test(or spec)があれば見る *追記08/06/04*
できれば「test(or spec)があれば、見ろ」も入れて欲しい。
あれは「どういう挙動をして欲しいか」=「どう使うか」が書いてあるんだから、
どんな構造のアプリなんだか理解する助けになるよ。
てか、ならないなら書く意味ないもの。
コメント欄での指摘。このエントリを書こうと決めたときは書くつもりだったのに、実際に書いたら忘れてたっていう。
thx、faultier。
まとめとオマケ
なんかTips的なエントリになったけど、とりあえずざっと思いついたのはこんな感じ。あとはコントローラのアクションからスタートして、モデルのメソッドや一連の流れを追えばいいんじゃないかな。コントローラーのアクションも上から順に読むよりは、機能ごとの流れで追った方がいいと思う。例えば、new->create->showとかedit->update->showとか。実際はもうちょい複雑な場合もあるだろうけど。実際の流れがどんな風になってるかは実際にアプリを動かしながらURLを確認したり、ログの出力やビューのフォームのアクションを見れば大体わかるはず。
あとはオマケ的な指摘だけど、Railsが2系であればビューファイルの拡張子は「.rhtml」より「.html.erb」の方がいい。この辺はActionPackのマルチビューに関係してる。この辺は初心者のうちはとりあえず「.html.erb」にしとくぐらいでいいと思うし、なによりオレがマルチビューについてまだちゃんと理解してないので詳細ははぶく。サーセン。
respond_toは1つのアクションで複数のフォーマットを出力するときに使う。
respond_to do |format|
format.html
format.xml { render :xml => @user }
end
上記のように書くと、ブラウザからの通常アクセス時はhtmlを、WebサービスなどでXMLを指定された場合はXMLを出力する。Webアプリは、例えばブラウザからのアクセスとAPIでのアクセスで、処理は同じだけど出力が違うなんてことがあったりする。そういうときにrespond_toで指定してやることで無闇にアクションを増やさなくてすむ。
| Railsレシピブック 183の技 |
|
![]() |
高橋 征義
ソフトバンククリエイティブ 2008-05-31 |
| RailsによるアジャイルWebアプリケーション開発 第2版 |
|
![]() |
前田 修吾
オーム社 2007-10-26 おすすめ平均 |
- Comments: 2
- Trackbacks: 0
MacBookにRailsの自動テスト環境を構築した
- 2008-03-14 (Fri)
- article
なんかautotestが流行りつつある今日この頃ですが、みなさまいかがお過ごしでしょうか。とりあえず丁度うちの会社でも自動テストしようかーみたいな話がでてたので構築してみましたよ!
ZenTestのインストール
とりあえずは定番のZenTest(autotest)とRedGreen(結果の色付け)をインストールします。
$ sudo gem install ZenTest
$ sudo gem install RedGreen
次にautotestの設定ファイルの作成。example_dot_autotest.rbのパスは人によって違うと思うので適当に読み替えてください。
cp /opt/local/lib/ruby/gems/1.8/gems/ZenTest-3.9.1/example_dot_autotest.rb ~/.autotest
~/.autotestの15行目のコメントアウトを解除。
require 'autotest/redgreen'
RAILS_ROOTでautotestを実行。起動時に全部のテストを実行するのでちょっとだけ重くなるかもしれません。それ以降はテストファイルやモデル、コントローラファイルなどを修正する度に該当のテストが走ります。
$ cd RAILS_ROOT
$ autotest
実行するテストはtest/unit、もしくはRailsにRSpecが入れてあればRspecのテストを実行します。
なんかspec_serverを立ち上げておくと処理が早くなるらしいですがよくわかってないです。まぁとりあえず設定しといて損はなさそうです。
$ vi spec/spec.opts # 最下行に --drb を追記。drbでテスト用サーバへ繋ぐようになります。
$ ruby script/spec_server
テストの結果は成功なら緑色のバーが、失敗なら赤色のバーが表示されます。
結果通知用にGrowlとScreenの設定をする
これでも自動テストは走るので問題ないですが、結果を見るのがちょっと面倒ですね。ということでGrowlとScreenで結果が見えるようにしましょう。
screenの場合は角谷さんのエントリーを見るといいと思います。基本的にそのまま~/.autotestにコピペするだけで問題ないはずです。
require 'autotest/screen' # コメントアウトを外す
Autotest::HOOKS.delete(:interrupt)
Autotest::Screen.statusline = %q[|%c %m/%d|%w %=]
class Autotest::Screen
SCREEN_COLOR[:green] = 'gw'
SCREEN_COLOR[:yellow] = 'yk'
Autotest.add_hook :run_command do |at|
message 'Running' if execute?
end
Autotest.add_hook :quit do |at|
clear if execute?
end
Autotest.add_hook :ran_command do |at|
return unless execute?
results = [at.results].flatten.join("¥n")
output = results.slice(/(¥d+)¥sexamples?,¥s*(¥d+)¥s.*failures?(?:,¥s*(¥d+)¥s.*pendings?)?/)
if output
ex,fail,pend = $~.captures.map {|e| e.to_i}
if 0 < fail
message "FAIL #{ex}ex, F:#{fail} ", :red
elsif 0 < pend
message "Pend #{ex}ex, F:#{fail} P:#{pend}", :yellow
else
message "All Green #{ex}ex", :green
end
end
end
end
この設定でscreenとautotestを起動しておくと、ステータスバーの右側にテストの結果が表示されます。

これ貼ってから気づいたけど、Terminalから透けてみえる絵がなんかあれですなw
次にGlowlの設定ですが、Leopardではruby-growlのインストールが必要っぽいです。とりあえずmacportsからインストールしておきましょう。それとGrowlの設定でリモートを許可しておきましょう。
$ sudo port install ruby-glowl

Growlで結果を通知するにはgrowlnotifyのインストールが必要です。もしインストールしていなければ本家からdmgファイルをDLし、その中にあるinstall.shを実行します。
$ cp -r /Volumes/Growl\ 1.1.2/Extras/growlnotify ~/tmp
$ cd ~/tmp/growlnotify
$ sudo ./install.sh
$ growlnotify -m "hoge" # growlの通知が表示されればインストール完了
~/.autotestを修正し、glowlで結果が通知されるようにします。
require 'autotest/glowl' # コメントアウトを解除
これでテストが失敗したとき、失敗から成功になったときにGrowlが通知してくれます。Growlの見た目を変更しようと思ったけれど、個人的にscreenだけで十分だったので今回はナシ。
とりあえず自動テストはテストを書くのが楽しくなりますな。オススメ。
- Comments: 3
- Trackbacks: 1
VimでRuby on Railsの開発する為の環境構築
- 2008-02-15 (Fri)
- article
ちょこっとだけ環境整えたので忘備録エントリとして。
Vim/Rubyのインストール
Ruby(.rb)とeruby(.rhtml)ファイルでシンタックスハイライトとオムニ補完が有効になる拡張。gemからインストール可能。
$ sudo gem install vim-ruby
$ vim-ruby-install.rb
vim-ruby-install.rbを実行するとインストール先の選択肢が表示される。1が自分のみ、2が全体へのインストールになる。基本的にどちらでもいいと思うけど、今回は1を選択しといた。
オムニ補完の
set nocompatible
syntax on
filetype on
filetype indent on
filetype plugin on
"omni
function InsertTabWrapper()
if pumvisible()
return "\"
endif
let col = col('.') - 1
if !col || getline('.')[col -1] !~ '\k\|< \|/'
return "\"
elseif exists('&omnifunc') && &omnifunc == ''
return "\ "
else
return "\ \ "
endif
endfunction
inoremap =InsertTabWrapper()
" rubycomplete.vim
let g:rubycomplete_buffer_loading = 1
let g:rubycomplete_rails = 1
let g:rubycomplete_classes_in_global = 1
Rails.vimのインストール
rails.vim まとめ – 川o・-・)<2nd lifeを参考にインストール。インストール方法は・・・リンク先参照でw
.vimrcに以下を追記。
" rails.vim let g:rails_level=4 let g:rails_default_file="app/controllers/application.rb"
対応ファイル切り替えがかなり便利。
まだ補完と対応ファイル切り替えぐらいしか機能を使えてないので、追々使い方を学んでいこうと思う。
追記: 2/18 omni補完でvimが落ちる問題
omni補完をするとvimが落ちる問題が発生している。
im: Caught deadly signal ABRT
Vim: preserving files...
Vim: Finished.
普通のRubyプログラム上では問題なく補完できる。(例えば10.toで
- Comments: 0
- Trackbacks: 0
RetrospectivaをMacBookに設置してみた
- 2007-12-05 (Wed)
- article
どんなものか試しに設置してみた。あくまで試しなのでSQLite、WEBrickで。まずは必要なソフトのインストールから。
SQLite3のインストール
MacPortsを使ってSQLiteを、RubyGemsを使ってSQLiteを扱うライブラリをインストール。
% sudo port install sqlite3
% sudo gem install sqlite3-ruby
retrospectivaの設置
Quick Install – wiki . retrospectivaを参考にしつつ。
% svn export http://retrospectiva.googlecode.com/svn/branches/1-0 retrospectiva
% cd restrospectiva
リポジトリからファイルを持ってきたら、DBの設定がMySQLになっているのでSQLiteの設定に変更。
% mv config/database.yml.todo config/database.yml
% vim config/database.yml
database.yml
development:
adapter: sqlite3
database: retrospectiva_development
test:
adapter: sqlite3
database: retrospectiva_test
production:
adapter: sqlite3
database: retrospectiva
rakeは試しなのでdevelopment(引数なし)で。特にエラーがでないようならWEBRickを起動してhttp://localhost:3000/にアクセス。
% rake db:retro:load
% ruby script/server
IDとパスワードを聞かれるので admin / passwordを入力。
適当にプロジェクトを作ってみた感じが以下のキャプチャ。

SVNの連携とかはまたそのうち。Rails環境があれば、とりあえず起動するのはラクチン。
- Comments: 0
- Trackbacks: 0
MacBookにRubyOnRailsをインストールする
- 2007-09-28 (Fri)
- article
Railsを試すためにMacBookにRubyOnRailsをインストールしてみました。MacPortsは既にインストールされてるものとして話を進めるので、インストールしていない人はGoogleで調べるなりしてインストールしてくださいな。と言ってもRubyGemsのインストールでしか今回は使いませんけど。
まずはRubyGemsをインストール
MacPortsを利用してRubyGemsを入れます。rb-rubygemsという名前で登録されているはずです。
% sudo port install rb-rubygems
というかRubyGemsってなに?
いわゆるパッケージマネージャーってやつです。Perlで言うところのCPANみたいなものです。Rubyはまだ標準のパッケージマネージャーはありませんが、Railsがインストールできるということもあってか大抵はRubyGemsが使われるようです。
- Rubyist Magazine – シリーズ パッケージマネジメント 【第 1 回】 RubyGems (1)
- 川o・-・)<2nd life – RubyGems パッケージの作り方 – rubyforge 登録まで
- RubyGems Manuals
gemからRailsをインストール
% sudo gem install rails
gemをインストールしてしまえば、コマンド一発でRailsがインストール出来てしまいます。簡単ですね。
プロジェクトを作ってみる
% rails hello
gemでRailsをインストールしたら、プロジェクトを作ってみましょう。helloというディレクトリが出来て、その中にappディレクトリやRakefileとかが作られていれば問題ありません。ちなみにhelloというのはプロジェクト名です。
おまけ
キャプチャのMelchiorっていうのはエヴァネタです。マギシステムの。痛い子ですみません。
- Comments: 0
- Trackbacks: 0
Home > Tags > Rails
- Feeds
- Meta
- Others
-









