📄

ERB & Partials

HTML内にRubyを挿入し再利用可能な部品に分離

ERB構文:

<%= expression %>   ← 出力(結果をHTMLに挿入)
<% code %>          ← 実行のみ(出力なし)
<%# comment %>      ← コメント
<%== raw_html %>    ← HTMLエスケープなしで出力

Partial(パーシャル):
ファイル名が_で始まるビューファイルです。

<%# app/views/posts/_post.html.erb %>
<div class="post">
  <h2><%= post.title %></h2>
  <p><%= post.content %></p>
</div>

<%# 使用 %>
<%= render 'post', post: @post %>           <%# 単一レンダ %>
<%= render partial: 'post', collection: @posts %>  <%# コレクションレンダ %>
<%= render @posts %>                        <%# 省略形(規約により自動マッピング) %>

コレクションレンダリングはパーシャルを繰り返し呼び出さず一度にレンダリングするためパフォーマンスが良いです。

キーポイント

1

<%= %> — Ruby式の結果をHTMLに出力(自動エスケープ)

2

<% %> — Rubyコード実行のみ(if、each等の制御文)

3

_partial_name.html.erbファイル生成(アンダースコアで開始)

4

render "partial_name"またはrender partial: "name", locals: { ... }

5

render @collection — コレクションの各項目に対しパーシャル自動反復

6

render "shared/header" — 他フォルダのパーシャルもレンダ可能

メリット

  • HTML内で自然にRubyを使用
  • Partialでコード再利用(DRY)
  • コレクションレンダリングでパフォーマンス最適化
  • ローカル変数でパーシャルにデータ渡し

デメリット

  • ERBタグが多いと可読性低下
  • パーシャルが小さすぎるとファイル管理が複雑
  • ロジックがビューに入ると保守が困難
  • HelperやDecoratorパターンへの分離が必要

ユースケース

共通UI部品(ヘッダー、フッター、ナビゲーション) フォームパーシャル(new/editで共有) リストアイテムパーシャル エラーメッセージパーシャル