📝

Ruby on Railsでの <%= %> と <% %> の使い方

に公開

はじめに

Ruby on Railsでは、テンプレート内にRubyコードを埋め込むために ERB(Embedded Ruby) を使用します。その中でもよく登場するのが <%= %><% %> です。
一見似ているこの2つには、明確な使い分けがあります。本記事では、それぞれの違いと使い分けのポイントを解説します。

1. <%= %>:出力あり

  • jsの言葉だと return値あり

<%= %>Rubyコードを評価し、その結果をHTMLとして出力する ために使います。
つまり、画面に何かを表示したいときは、必ずこちらを使います。

<%= @user.name %>

上記は、@user.name の値をHTMLとして出力します。

2. <% %>:出力なし(実行のみ)

  • jsの言葉だと voidreturn値なし

<% %>Rubyコードを実行するけれど、出力はしない 場合に使います。
例えば、条件分岐やループ処理など、HTMLの構造制御に使われます。

<% if @user.admin? %>
  管理者
<% end %>

このコードは、@user が管理者だった場合のみ「管理者」と表示されます。
ただし、ifend 自体は表示されません。

🤔 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