Thymeleaf 変数操作のまとめ!初心者向け完全ガイド
新人
「Thymeleafで変数ってどう扱えばいいんでしょうか?初心者でもわかる基本の使い方を教えてほしいです。」
先輩
「ThymeleafはJavaのSpring MVCと組み合わせて使うことが多いから、変数の扱い方をしっかり理解することが大切だよ。基本から丁寧に説明するね。」
新人
「Spring MVCのモデルとThymeleafの変数はどう連携しているんですか?」
先輩
「モデルにセットしたデータをThymeleafのテンプレートで${}という書き方で参照するのが基本だよ。具体的に見ていこう!」
1. Thymeleafとは?変数操作の基本的な考え方
ThymeleafはJavaのテンプレートエンジンで、HTMLファイルの中に変数を埋め込んで動的なWebページを作るためのツールです。特にSpring MVCの開発環境でよく使われています。変数操作の基本は、Javaのコントローラから渡されたデータをHTML側で表示や制御に使うことです。
Thymeleafの変数は、${変数名}の形で書きます。これにより、Spring MVCのモデルに格納した値を簡単に画面に表示できます。
たとえば、次のように書くと「こんにちは、山田太郎さん!」と表示されます。
<p>こんにちは、${userName}さん!</p>
この${userName}がThymeleafの変数です。後でコントローラから値をセットして使います。
また、変数は単なる文字列だけでなく、オブジェクトのプロパティにもアクセス可能です。ドットでつなげて書くことで、例えばユーザーオブジェクトの名前やメールアドレスなどを取り出せます。
<p>ユーザー名: ${user.name}</p>
<p>メール: ${user.email}</p>
こうした変数操作の仕組みが、Thymeleafを使ったWeb開発の基礎です。
2. Spring MVCのモデルでの変数設定とThymeleafテンプレートでの基本的な変数参照方法
Spring MVCのコントローラでは、Modelオブジェクトを使ってThymeleafに渡す変数を設定します。モデルに登録した変数は、テンプレートで${}を使って参照できます。
例えば、次のようにコントローラでユーザー名をセットします。
@Controller
public class UserController {
@GetMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("userName", "山田太郎");
return "greeting";
}
}
このとき、Thymeleafのテンプレートgreeting.htmlで${userName}を使うと、モデルでセットした「山田太郎」が表示されます。
<p>こんにちは、${userName}さん!</p>
モデルに複数の変数をセットすることも可能です。年齢やメールアドレスなど、画面に表示したいデータを自由に追加できます。
model.addAttribute("age", 30);
model.addAttribute("email", "yamada@example.com");
Thymeleaf側では、次のように参照して表示できます。
<p>年齢: ${age}歳</p>
<p>メール: ${email}</p>
このように、Spring MVCモデル管理とThymeleaf変数の使い方は連携しており、変数を使いこなすことが動的Web開発のポイントとなります。Pleiades+Gradle環境で開発するときも、基本は同じです。
3. 変数のスコープ(モデル、セッション、リクエスト)の違いと使い分け
Thymeleafの変数を使うとき、まず理解したいのが変数のスコープです。スコープとは、変数がどの範囲で有効かという意味で、主にモデルスコープ、セッションスコープ、リクエストスコープの3つがあります。
モデルスコープは、Spring MVCのコントローラでModelに登録した変数のことで、HTMLがレンダリングされる1回のリクエスト内で有効です。通常、画面に表示したいデータはこのモデルスコープにセットして渡します。
@GetMapping("/profile")
public String profile(Model model) {
model.addAttribute("userName", "佐藤花子");
return "profile";
}
この場合、Thymeleafテンプレートでは${userName}で「佐藤花子」を参照できます。
セッションスコープはユーザーごとのセッションに保存され、複数のリクエスト間で変数を保持します。ログイン情報など長期間使うデータを入れるのに適していますが、過剰に使うとサーバーのメモリ負荷が高まるので注意が必要です。
@RequestMapping("/login")
public String login(HttpSession session) {
session.setAttribute("userId", 12345);
return "home";
}
Thymeleafテンプレートで${session.userId}と記述することでアクセスできます。
リクエストスコープはHTTPリクエスト単位で有効なデータで、URLパラメータやフォームデータが該当します。Thymeleafでは${param.id}のように参照します。
これらのスコープを正しく使い分けることは、Thymeleaf スコープ 管理の基本であり、パフォーマンスやメモリ管理にも影響します。必要な範囲に必要なデータだけを渡すことが重要です。
4. Thymeleafでのローカル変数の使い方とth:withの活用例
Thymeleafではテンプレート内で一時的に変数を作ることができるローカル変数があります。これはth:with属性を使って設定し、同じ計算を繰り返さず効率的に値を使うために便利です。
例えば、商品の価格に割引率をかけて割引価格を計算し、それを複数箇所で表示する場合を考えます。毎回計算を書くとパフォーマンスに影響するため、th:withでローカル変数に入れて使い回します。
<div th:with="discountedPrice=${price * 0.9}">
<p>元の価格: <span th:text="${price}">0</span>円</p>
<p>割引価格: <span th:text="${discountedPrice}">0</span>円</p>
</div>
このように、一度計算した値を変数に格納し、複数の箇所で利用できるため、Thymeleaf 変数 パフォーマンスの向上に役立ちます。
また、複数のローカル変数を同時に定義することも可能です。カンマ区切りで複数の変数を設定できるので、複雑な計算や複数の値の管理もスムーズに行えます。
<section th:with="taxRate=0.08, taxAmount=${price * taxRate}">
<p>消費税率: <span th:text="${taxRate * 100}">8</span>%</p>
<p>消費税額: <span th:text="${taxAmount}">0</span>円</p>
</section>
こうした使い方はテンプレートの可読性も向上させ、メンテナンスを楽にするのでおすすめです。
5. Spring MVCでの複雑なオブジェクトをモデルに渡す際のポイントとテンプレートでの扱い方
Spring MVCでは単純な文字列や数値だけでなく、複雑なオブジェクトをモデルにセットしてThymeleafテンプレートで扱うこともよくあります。例えば、ユーザー情報を表すUserクラスのインスタンスを渡す場合です。
public class User {
private String name;
private int age;
private String email;
// コンストラクタ、ゲッター・セッターは省略
}
@Controller
public class UserController {
@GetMapping("/userDetail")
public String userDetail(Model model) {
User user = new User();
user.setName("田中次郎");
user.setAge(40);
user.setEmail("tanaka@example.com");
model.addAttribute("user", user);
return "userDetail";
}
}
Thymeleafテンプレート側では、ドット記法でオブジェクトのプロパティにアクセスします。
<p>名前: ${user.name}</p>
<p>年齢: ${user.age}歳</p>
<p>メール: ${user.email}</p>
複雑なオブジェクトを渡すときは、必要な情報だけをモデルにセットすることがパフォーマンス向上のコツです。不要な情報まで渡すとテンプレートの処理が重くなるため、Spring MVC モデル 使い方では、軽量かつ必要最低限のデータを心がけましょう。
また、リストやマップなどのコレクションもモデルに渡して、Thymeleafの繰り返し処理(th:each)で表示可能です。こうした使い方をマスターすると、より柔軟な画面構築ができるようになります。
6. Thymeleafテンプレートでのパフォーマンス改善テクニック(変数の再計算回避など)
Thymeleafテンプレートで変数を使う際に注意したいのが、同じ計算や処理が何度も行われることによるパフォーマンス低下です。例えば、テンプレート内で複雑な式を繰り返し書くと、その都度計算が発生し、レンダリング時間が長くなってしまいます。
この問題を防ぐには、th:withを使って一度計算した結果をローカル変数に保存し、繰り返し利用する方法が有効です。これにより、無駄な再計算を避け、Thymeleaf パフォーマンス 最適化に繋がります。
<div th:with="discountedPrice=${price * discountRate}">
<p>元の価格: <span th:text="${price}">0</span>円</p>
<p>割引率: <span th:text="${discountRate * 100}">0</span>%</p>
<p>割引後価格: <span th:text="${discountedPrice}">0</span>円</p>
</div>
上記の例では、価格と割引率から割引後価格を一度だけ計算し、ローカル変数discountedPriceに保存しています。これを複数回参照できるため、テンプレートの処理が軽くなります。
また、テンプレート内で複数の計算や値の加工が必要な場合も、th:withでまとめて変数を宣言すると読みやすく効率的です。
<section th:with="taxRate=0.08, taxAmount=${price * taxRate}">
<p>消費税率: <span th:text="${taxRate * 100}">8</span>%</p>
<p>消費税額: <span th:text="${taxAmount}">0</span>円</p>
</section>
このテクニックを使うと、Thymeleaf 変数 効率的な使い方が実現でき、テンプレートのパフォーマンスを高めることができます。
7. よくある変数操作のパフォーマンス問題とその解決策
ThymeleafとSpring MVCを使った開発で、変数操作に関するパフォーマンス問題は初心者でもよく遭遇します。ここでは代表的な問題と解決策を紹介します。
問題1:同じ計算式の繰り返し
テンプレート内で複雑な式を複数回書くと、毎回計算が走り処理が重くなります。解決策は先ほど紹介したth:withで一度計算結果をローカル変数に保存し、使い回すことです。
問題2:大量の不要な変数をモデルに渡してしまう
Spring MVCのモデルに不必要な大量のデータをセットすると、レンダリング時の処理負荷が上がります。Spring MVC モデル パフォーマンスを意識し、必要最低限のデータだけを渡すことが重要です。
問題3:セッションスコープの過剰利用
セッションスコープに多くの大きなデータを長期間保持すると、サーバーのメモリ消費が増えパフォーマンスが悪化します。必要な情報だけに限定してセッションを使うべきです。
問題4:テンプレート内で変数の再代入や加工を試みる
Thymeleafの変数はイミュータブルなので、テンプレート内で値を変更できません。変数の加工や計算は必ずコントローラやサービス層で行い、ビューは表示専用にする設計がパフォーマンスと保守性の両方で望ましいです。
これらのポイントを押さえることで、ThymeleafとSpring MVCの組み合わせでスムーズにパフォーマンスを最適化できます。
8. 今後の学習に役立つThymeleaf変数操作とSpring MVCモデル管理のポイントまとめ
この記事では、初心者がつまずきやすいThymeleaf変数の基本から応用まで、Spring MVCのモデル管理と連携した使い方を解説しました。今後の学習や開発に役立つポイントをまとめます。
- 変数のスコープを理解して適切に使い分けること。モデルスコープはリクエスト単位、セッションスコープは長期保持に使うなど役割を明確にしましょう。
- テンプレート内で繰り返される計算はth:withでローカル変数に格納し再利用することで、Thymeleaf パフォーマンス 最適化が図れます。
- Spring MVCのモデルには必要最低限のデータだけを渡すことでテンプレートの負荷を軽減し、効率的な画面表示を実現できます。
- 変数の加工や複雑な処理はコントローラやサービス層で行い、ビューは表示専用にすることが保守性・性能向上に有効です。
Pleiades+Gradle環境でのSpring MVC+Thymeleaf開発では、これらのポイントを意識して実装することで、快適で効率的なWebアプリケーション作りが可能になります。今後はさらにSpringのキャッシュ機能や非同期処理、Thymeleafのフラグメント活用なども学んでいくと、より高度なパフォーマンス改善が行えます。
ぜひこの記事の内容を参考に、Thymeleafの変数操作とSpring MVCモデル管理の基本をしっかり身につけてください。