20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsのERBとJavaのthymeleafにおけるオブジェクト反復処理の違い

Posted at

はじめに

Railsを2年くらいやってたエンジニアがJavaをキャッチアップしてみた所感をまとめた投稿です。

Ruby(Rails)では何となく書いても動いた、ある種の黒魔術的な仕組みについて、Javaを学ぶことで紐解いていきます。

対象者

  • RubyonRailsの初学者
  • Javaの初学者

基本構文の違い

RailsのERBとJavaのThymeleafでは、オブジェクトの反復処理に以下のような違いがあります。

テンプレート 基本構文 特徴
ERB (Rails) <% @items.each do item %> Rubyのeachメソッドを使用。ブロック変数で要素を取得
Thymeleaf th:each="item : ${items}" HTML属性として記述。自然なテンプレートを維持

インデックス取得方法

ERB:

<% @items.each_with_index do |item, index| %>
  <%= index %>: <%= item.name %>
<% end %>

Thymeleaf:

<tr th:each="item, iterStat : ${items}">
  <td th:text="${iterStat.index}">0</td>
  <td th:text="${item.name}">Item</td>
</tr>

状態変数(iterStat)で追加情報取得可能:

種類 特徴
index 0始まりインデックス
count 1始まりインデックス
size コレクションサイズ
first/last 最初/最後の要素判定

条件分岐との連携

ERB:

<% @items.each do |item| %>
  <% if item.active? %>
    <%= item.name %>
  <% end %>
<% end %>

Thymeleaf:

<div th:each="item : ${items}" 
     th:if="${item.active}">
  <span th:text="${item.name}"></span>
</div>

(補足)状態変数の違い

  • ERBは状態変数を自前で用意
    (each_with_indexなど)する必要があり、得られるのは主にインデックスのみ。

  • Thymeleafは組み込みのステータス変数(例:iterStat)があり、インデックスだけでなく、カウント・サイズ・先頭/末尾判定など多彩な情報を1行で取得できる

主な特長比較

特徴 ERB Thymeleaf
構文タイプ 埋め込み式 属性ベース
静的プレビュー 不可 可能(自然テンプレート)
状態変数 自前実装 組み込み(iterStat)
スコープ ブロック内 要素内
HTML整合性 崩れやすい 維持される

パフォーマンス面

ERB:Rubyの実行環境に依存
Thymeleaf:キャッシュ機構を活用可能

// キャッシュ設定例(Thymeleaf)
templateResolver.setCacheable(true);

大きな違いは?

  • Thymeleaf
    HTML構造を保ちつつ状態管理が容易である。

  • ERB
    Rubyの柔軟性を活かした記述が可能。

プロジェクトの要件に応じて、適切なテンプレートエンジンを選択することが重要です。

まとめ

インデックス管理などに関しては、ERB(Rails)では自動で管理してくれていたので気にしなかったこともあり、Thymeleaf(Java)を触ってから考えることが多くなりました。

完全に主観ですが、Javaを学んでると、点と点が線で繋がるような体験をたまに味わいますね。

参考記事

【保守性抜群】Thymeleafマスター講座:Java開発者のための完全ガイド2024

20
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?