| この記事の要点 |
|
eRuby とは
eRuby (embedded Ruby) は、HTML や設定ファイルなどのテキスト中に Ruby コードを埋め込むためのテンプレート技術の総称です。<% %> のような特殊タグでマークアップ中にロジックを書き、結果のテキストを生成します。
代表実装に Ruby 標準の ERB、高速な Erubi / Erubis があります。Ruby on Rails のビュー (.html.erb) では現在 Erubi が使われています。
4 種類のタグ
| タグ | 意味 | 出力 |
|---|---|---|
<% Ruby %> | Ruby コードを実行(結果は出力しない) | なし |
<%= 式 %> | 式の結果を文字列として出力 | あり |
<%# コメント %> | テンプレート上のコメント | なし |
<%- -%> | 前後の余分な改行・空白を抑制 | 抑制 |
基本サンプル (ERB)
require 'erb'
template = <<~ERB
<h1><%= title %></h1>
<ul>
<% items.each do |i| %>
<li><%= i %></li>
<% end %>
</ul>
ERB
title = "果物リスト"
items = ["りんご", "みかん", "ぶどう"]
erb = ERB.new(template)
puts erb.result(binding)<!-- 出力 -->
<h1>果物リスト</h1>
<ul>
<li>りんご</li>
<li>みかん</li>
<li>ぶどう</li>
</ul>
ファイルからテンプレートを読む
# template.html.erb
# <h1>こんにちは、<%= name %> さん!</h1>
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<!-- app/views/users/show.html.erb -->
<h1><%= @user.name %></h1>
<p>Email: <%= @user.email %></p>
<% if @user.admin? %>
<p><strong>管理者です</strong></p>
<% end %>
<%# このコメントはレンダリングされない %>
自動エスケープ (XSS 対策)
Rails の .html.erb では <%= %> が自動で HTML エスケープされます。ユーザー入力をそのまま表示しても <script> が挿入できません。
<%# user.name に "<script>alert(1)</script>" が入っていても安全 %>
<p>名前: <%= @user.name %></p>
<!-- 出力: <p>名前: <script>alert(1)</script></p> -->
<%# 意図的にエスケープしない (信頼できる HTML のみ) %>
<div><%= raw @article.body_html %></div>
<div><%== @article.body_html %></div> <!-- == は raw のショートカット -->
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 など) にロジックを移すべき。ビューは表示のみが理想。
子ページ
子ページはありません
同階層のページ
- JSP
- eRuby
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38