Ruby on Rails 2.0 日記

第4回 テンプレートファイルの拡張子

前回の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 を参考に作りました。
本日はここまで。
(2007/12/22)

Ruby on Rails 2.0 日記

Ruby on Rails トップへ