コンテンツにスキップ

ERB

出典: フリー教科書『ウィキブックス(Wikibooks)』

ERB (Embedded Ruby) ハンドブック

[編集]

ERBは、Rubyプログラム内でHTMLやその他のテキストを生成するためのテンプレートエンジンです。ERBを使うことで、Rubyコードを埋め込んだテンプレートを記述し、効率的に動的コンテンツを生成することが可能です。

基本構文

[編集]

ERBでは、Rubyコードを以下の構文で埋め込むことができます:

<% Rubyコード %>       # 実行のみ(出力なし)
<%= Rubyコード %>      # 実行結果を出力
<%# コメント %>         # テンプレート内のコメント
<%% または %%>         # <% または %> をエスケープ

以下に簡単な例を示します:

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title><%= @title %></title>
  </head>
  <body>
    <h1>ようこそ<%= @username %>さん</h1>
    <% if @messages.any? %>
      <ul>
        <% @messages.each do |message| %>
          <li><%= message %></li>
        <% end %>
      </ul>
    <% else %>
      <p>メッセージはありません</p>
    <% end %>
  </body>
</html>

使用方法

[編集]

ERBテンプレートを使用するには、ERBクラスを利用します。

require 'erb'

# テンプレート文字列
template = "<h1>Hello, <%= name %>!</h1>"

# テンプレートをERBオブジェクトに変換
erb = ERB.new(template)

# バインディングを使用して値を埋め込む
name = "山田太郎"
puts erb.result(binding)

レイアウトと部分テンプレート

[編集]

ERBでは、レイアウトファイルや部分テンプレートを活用することで、コードの再利用性を高めることができます。

レイアウトの例

[編集]
# layout.erb
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title><%= @title || 'デフォルトタイトル' %></title>
  </head>
  <body>
    <header>
      <h1>サイトのヘッダー</h1>
    </header>
    <main>
      <%= yield %>
    </main>
    <footer>
      <p>フッター</p>
    </footer>
  </body>
</html>

部分テンプレートの例

[編集]
# partial.erb
<div class="user">
  <h2><%= user[:name] %></h2>
  <p><%= user[:email] %></p>
</div>

使用例:

@users = [
  { name: "山田太郎", email: "taro@example.com" },
  { name: "鈴木花子", email: "hanako@example.com" }
]

@users.each do |user|
  puts ERB.new(File.read('partial.erb')).result_with_hash(user: user)
end

ERBのセキュリティ

[編集]

動的に生成されたコンテンツに潜むセキュリティリスク(例:XSS攻撃)に注意してください。特に、ユーザー入力をテンプレートに埋め込む場合は、適切なエスケープを行うことが重要です。 Ruby on Railsでは、hメソッドを使用してエスケープできます。

<%= h(@user_input) %>

メリットと制限

[編集]
メリット:
  • Rubyコードを直接埋め込むことが可能
  • シンプルで学習コストが低い
  • 標準ライブラリの一部として利用可能
制限:
  • テンプレートが複雑になると可読性が低下する可能性がある
  • パフォーマンスは他のテンプレートエンジン(例:Slim)と比べると劣る場合がある

結論

[編集]

ERBは、Rubyの標準ライブラリに含まれており、シンプルかつ柔軟なテンプレートエンジンです。動的なHTML生成やテンプレートベースのアプリケーション開発に適しています。テンプレートが複雑化しない限り、初心者から上級者まで幅広く利用可能です。