📝
Ruby on Railsでの <%= %> と <% %> の使い方
はじめに
Ruby on Railsでは、テンプレート内にRubyコードを埋め込むために ERB(Embedded Ruby) を使用します。その中でもよく登場するのが <%= %>
と <% %>
です。
一見似ているこの2つには、明確な使い分けがあります。本記事では、それぞれの違いと使い分けのポイントを解説します。
<%= %>
:出力あり
1.
- jsの言葉だと return値あり
<%= %>
は Rubyコードを評価し、その結果をHTMLとして出力する ために使います。
つまり、画面に何かを表示したいときは、必ずこちらを使います。
<%= @user.name %>
上記は、@user.name
の値をHTMLとして出力します。
<% %>
:出力なし(実行のみ)
2.
- jsの言葉だと
void
:return値なし
<% %>
は Rubyコードを実行するけれど、出力はしない 場合に使います。
例えば、条件分岐やループ処理など、HTMLの構造制御に使われます。
<% if @user.admin? %>
管理者
<% end %>
このコードは、@user
が管理者だった場合のみ「管理者」と表示されます。
ただし、if
や end
自体は表示されません。
form_tag
はどっちを使う?
🤔 少し紛らわしいのが form_tag
のような ブロック構文を取るヘルパーメソッド です。
一見「表示しない処理っぽい」ので <% %>
を使いたくなりますが、実は form_tag
は <form>
タグを出力する メソッドなので、正しくは <%= %>
を使います。
new.html.erb
<%= form_tag("/posts/create") do %>
<textarea name="content"><%= @post.content %></textarea>
<input type="submit" value="投稿">
<% end %>
<%= form_tag %>
:フォームタグ全体の出力(開始・終了タグ含む)<%= @post.content %>
:フォーム内の初期値を出力<% end %>
:これはブロックの終わりを示すだけなので出力しない
まとめ
書き方 | 用途 | 出力される? |
---|---|---|
<%= %> |
値を画面に表示する | ✅ はい |
<% %> |
処理だけ行う(if, eachなど) | ❌ いいえ |
ERBテンプレートでは、「画面に表示したいかどうか」 を基準に使い分けましょう。
これを正しく使い分けることで、より読みやすく、意図が明確なテンプレートを作成できます。
Discussion