ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
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 など) にロジックを移すべき。ビューは表示のみが理想。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- 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 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?