| この記事の要点 |
|
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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09