第4回 テンプレートファイルの拡張子
2007/12/22
前回のSQLite3では、Rails 2.0.2 から新たにデフォルトになった軽量データベースについて書きました。今回は、RHTMLテンプレートについてです。
Rails 2.0 での重要な変更の一つは、HTML文書を生成するためのテンプレートファイルの拡張子が .html.erb
になったことです。より正確に言うと、.erb
の部分はテンプレートシステム(テンプレートエンジン)の名前を示しています。例えば、ERB の代わりに HAML を使う場合は、拡張子を .html.haml
にします。
試しに、Rails のジェネレータでコントローラを生成してみましょう。
> script/generate controller top index
確かに、app/views/top
ディレクトリに index.html.erb
という名前のファイルができています。
もしかすると、人によっては今回のこの変更が「頭でっかち」に感じられるかもしれませんが、Rails 1.2 で始まったマルチビュー改革の自然な帰結です。しかし、この点について掘り下げるのは後回しにしましょう。
レイアウトや部分テンプレートに関しても、同じように拡張子 .html.erb
を使用します。次のような app/views/layouts/application.html.erb
ファイルを作って、ブラウザで表示してみます。
<html> <head> <title>Title</title> </head> <body> <%= yield :layout %> <hr /> <p>Powered by Ruby on Rails.</p> </body> </html>
ページの下部に水平線と「Powered by Ruby on Rails」が出ています。OKです。
今まで通り、Rails 2.0 でも .rhtml
の拡張子を持つテンプレートファイルが使えますので、1.x ベースで開発していたアプリケーションを 2.0 ベースに移行するとしても、拡張子を変更する必要はありません。もし変更したいのであれば、次の Rake タスクを使ってください。
namespace 'views' do desc 'Renames all .rhtml views to .html.erb' task 'rename' do Dir.glob('app/views/**/*.rhtml').each do |file| puts `svn mv #{file} #{file.gsub(/\.rhtml$/, '.html.erb')}` end end end
これを lib/tasks
ディレクトリに適当な名前(例:rename.rake
)で置いて、
rake views:rename
と実行すれば、該当するファイルの拡張子を一斉に変更してくれます。ただし、このタスクは Subversion でソースコードを管理していることを前提に作られています。直接ファイル名を変えてしまいたい場合は、5行目を次のように変更してください。
puts `mv -v #{file} #{file.gsub(/\.rhtml$/, '.html.erb')}`
なお、この Rake タスクは、Rails 2 Upgrade Notes を参考に作りました。
本日はここまで。