第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 を参考に作りました。
本日はここまで。