ERB
表示
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生成やテンプレートベースのアプリケーション開発に適しています。テンプレートが複雑化しない限り、初心者から上級者まで幅広く利用可能です。