タイトル: eRuby
SEOタイトル: eRuby とは?Ruby のテンプレートエンジン(ERB / Erubi 構文・タグ・サンプル)
| この記事の要点 |
|
eRuby とは
eRuby (embedded Ruby) は、HTML や設定ファイルなどのテキスト中に Ruby コードを埋め込むためのテンプレート技術の総称です。<% %> のような特殊タグでマークアップ中にロジックを書き、結果のテキストを生成します。
代表実装に Ruby 標準の ERB、高速な Erubi / Erubis があります。Ruby on Rails のビュー (.html.erb) では現在 Erubi が使われています。
4 種類のタグ
| タグ | 意味 | 出力 |
|---|---|---|
<% Ruby %> | Ruby コードを実行(結果は出力しない) | なし |
<%= 式 %> | 式の結果を文字列として出力 | あり |
<%# コメント %> | テンプレート上のコメント | なし |
<%- -%> | 前後の余分な改行・空白を抑制 | 抑制 |
基本サンプル (ERB)
require 'erb'
template = <<~ERB
<%= title %>
<% items.each do |i| %>
- <%= i %>
<% end %>
ERB
title = "果物リスト"
items = ["りんご", "みかん", "ぶどう"]
erb = ERB.new(template)
puts erb.result(binding)
果物リスト
- りんご
- みかん
- ぶどう
ファイルからテンプレートを読む
# template.html.erb
# こんにちは、<%= name %> さん!
template = File.read('template.html.erb')
name = "Alice"
puts ERB.new(template).result(binding)
余白制御 (trim_mode)
ERB.new の第 2 引数 (Ruby 2.6+ は trim_mode: キーワード) で改行・空白の扱いを指定できます。
# "-" モード: <%- -%> で改行抑制
erb = ERB.new(template, trim_mode: '-')
# ">" モード: %> 直後の改行を削除
erb = ERB.new(template, trim_mode: '>')
# "<>" モード: 行頭/行末の余分な改行を削除
erb = ERB.new(template, trim_mode: '<>')
# "%" モード: 行頭 % で始まる行を Ruby とみなす
erb = ERB.new(template, trim_mode: '%')
Rails での使い方
Rails のビューは app/views/コントローラ名/アクション名.html.erb に置きます。コントローラのインスタンス変数 (@user 等) がそのままビューで使えます。
# app/controllers/users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
<%= @user.name %>
Email: <%= @user.email %>
<% if @user.admin? %>
管理者です
<% end %>
<%# このコメントはレンダリングされない %>
自動エスケープ (XSS 対策)
Rails の .html.erb では <%= %> が自動で HTML エスケープされます。ユーザー入力をそのまま表示しても " が入っていても安全 %>
名前: <%= @user.name %>
<%# 意図的にエスケープしない (信頼できる HTML のみ) %>ERB vs Erubi vs Erubis
| 実装 | 特徴 | 主な利用 |
|---|---|---|
| ERB | Ruby 標準ライブラリ。シンプル | スクリプト / メールテンプレ |
| Erubi | Erubis の後継。高速 + 自動エスケープ | Rails 5.1+ のデフォルト |
| Erubis | 歴史的に高速。メンテ終了 | 古い Rails アプリ |
主な用途
- Rails / Sinatra のビュー: HTML 出力の定番
- メール本文の生成: ActionMailer の
.text.erb/.html.erb - 設定ファイルのテンプレート化: Chef / Puppet などの構成管理ツールが採用
- 静的サイトジェネレータ: Middleman など
- コード生成: Rails の
generateがスキャフォールドに ERB を使う
FAQ
Q: ERB と Haml / Slim どちらを使う?
A: ERB は HTML 知識がそのまま使え学習コストが低い。Haml/Slim は記述量が少ないが独自記法の学習が必要。新規 Rails は ERB がほぼ標準。
Q: パフォーマンスは?
A: 標準 ERB は遅め。Rails の本番運用なら Erubi に切り替わっておりキャッシュも効くので体感は十分高速。
Q: テンプレート内で複雑なロジックを書きたい
A: アンチパターン。ヘルパーやプレゼンター (Draper など) にロジックを移すべき。ビューは表示のみが理想。