カテゴリ: Thymeleaf 更新日: 2025/07/13

Thymeleaf 変数 定義の方法を初心者向けに解説

Thymeleaf 変数 定義の方法を初心者向けに解説
Thymeleaf 変数 定義の方法を初心者向けに解説

新人と先輩の会話形式で理解しよう

新人

「Thymeleafで変数定義ってどうやるんですか?Javaの変数と違うんですか?」

先輩

「Thymeleaf変数はHTMLテンプレート内専用の一時変数で、@Controllerから渡すモデルとは別扱いだよ。表示や計算用の補助として柔軟に使えるんだ。」

新人

「具体的な書き方や使い方を例で見せてくれますか?」

先輩

「もちろん。GradleとPleiadesでの基本構成前提で、th:with を中心に丁寧に解説するよ!」

1. Thymeleafの変数の基本とは?

1. Thymeleafの変数の基本とは?
1. Thymeleafの変数の基本とは?

ThymeleafはSpring Frameworkで人気のあるサーバーサイドのテンプレートエンジンです。HTMLファイルにth:with属性を使って変数を定義すれば、ページ描画中だけに使える一時的なテンプレート変数を保持でき、表示内容や計算結果を簡単に扱えます。

たとえば、画面内で挨拶文や合計値を表示したいとき、@Controllerから渡すモデル変数に加えて、一時変数で補助計算を行えます。これにより、HTMLがすっきりし、モデル側の処理もシンプルに保てます。

初心者にとって理解しやすいのは、Thymeleaf変数はテンプレートごとに限定され、Javaの変数とはスコープが異なるという点です。テンプレート内で完結するため、コードの可読性と保守性も向上します。

2. 変数の定義方法(th:withを中心に具体例を示しながら解説)

2. 変数の定義方法(th:withを中心に具体例を示しながら解説)
2. 変数の定義方法(th:withを中心に具体例を示しながら解説)

変数を定義するには、th:with属性をHTML要素に追加します。複数の変数をカンマで区切って定義でき、文字列や数値の計算も可能です。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>変数定義の基本</title>
</head>
<body th:with="greeting='こんにちは', count=3">
  <p th:text="${greeting}">デフォルト挨拶</p>
  <p th:text="'現在のカウント:' + ${count}">カウント情報</p>
</body>
</html>

この例では、th:with="greeting='こんにちは', count=3"としてgreetingcountを定義し、それぞれ

要素でth:textを使って値を表示しています。${}で変数を参照できる点が特徴です。

次は、@Controllerから渡されたモデル変数と組み合わせた例です。以下はController側のコードになります。


package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SampleController {
  @GetMapping("/welcome")
  public String welcome(Model model) {
    model.addAttribute("name", "花子");
    return "welcome";
  }
}

この@Controllerではnameというモデル変数を渡しています。次に、テンプレートでth:withと組み合わせます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>ようこそ画面</title></head>
<body th:with="greeting='ようこそ', fullName=${name} + ' さん'">
  <h1 th:text="${greeting} + '、' + ${fullName}">ようこそ、 花子 さん</h1>
</body>
</html>

この例では、モデル変数namefullNameとして加工し、テンプレート内で使っています。これにより、テンプレートでの文字列結合や挨拶文生成がきれいに記述できます。

Gradle環境とPleiades設定済みの前提であれば、上記のように@PostMappingを使わず@Controllerを使った基本構成で簡単にテンプレート変数が使えます。

3. 変数のスコープと有効範囲の理解

3. 変数のスコープと有効範囲の理解
3. 変数のスコープと有効範囲の理解

Thymeleafのth:withで定義した変数は、その要素と子要素の範囲だけで有効です。スコープを意識することが、意図したデータを正しく表示するコツです。


<ul th:with="parentMsg='親メッセージ'">
  <li th:each="item : ${items}"
      th:with="childMsg='項目: ' + ${item}">
    <p th:text="${parentMsg}">親メッセージ</p>
    <p th:text="${childMsg}">項目: 値</p>
  </li>
</ul>
<p th:text="${parentMsg}">ここでも親メッセージ</p>

この例では

  • 要素の中ではchildMsgが使えますが、外では使えません。逆にparentMsg
      の外側でも表示可能です。これがスコープの基本です。

      さらに、th:blockを使うことで変数のスコープを論理ブロックの中に閉じることができます。これにより、複雑なHTML構造でも変数がぶつからないように整理できます。

      
      <th:block th:with="tempVal=${someValue}">
        <p th:text="${tempVal}">一時値</p>
      </th:block>
      <!-- tempVal はここではアクセス不可 -->
      
  • 4. よくある間違い例と正しい書き方

    4. よくある間違い例と正しい書き方
    4. よくある間違い例と正しい書き方

    初心者の方がよく間違える例をいくつか紹介し、正しい書き方とともに解説します。

    変数名の重複による予期せぬ上書き

    
    <body th:with="msg='最初のメッセージ'">
      <div th:with="msg='上書きされたメッセージ'">
        <p th:text="${msg}">上書きされたメッセージ</p>
      </div>
      <p th:text="${msg}">最初のメッセージ</p>
    </body>
    

    同じ名前の変数を別スコープで定義すると上書きされます。変数名は意味が通じるように注意して使い分けましょう。

    モデル変数とテンプレート変数の衝突

    
    <body th:with="name='テンプレート内名前'">
      <p th:text="${name}">テンプレート内名前</p>
    </body>
    

    このようにすると、@Controllerから渡されたnameが無視されてしまいます。モデル変数とテンプレート変数は名前を揃えないことが重要です。

    th:with の構文エラー

    
    <body th:with="greeting='こんにちは' count=3"> <!-- カンマ忘れ -->
      <p th:text="${greeting}">こんにちは</p>
      <p th:text="${count}">3</p>
    </body>
    

    正しくは「greeting='こんにちは', count=3」とカンマで区切ります。構文ミスを防ぐためには、ひとつずつ丁寧に定義することが大切です。

    スペースやクオートの不一致

    
    <body th:with="message=こんにちは"> <!-- クオート不足 -->
      <p th:text="${message}">こんにちは</p>
    </body>
    

    文字列は必ずシングルクオートで囲みましょう。正しくはth:with="message='こんにちは'"です。

    5. まとめとしての振り返りとポイント

    5. まとめとしての振り返りとポイント
    5. まとめとしての振り返りとポイント

    ここまで紹介したThymeleafの変数定義方法は、初心者でも分かりやすく実践できる基本機能です。th:withによって一時変数を定義し、表示用や計算用に活用することで、HTMLテンプレートが整理しやすくなります。

    重要なポイントは以下の通りです:

    • テンプレート変数は一時的でスコープが短い:定義された要素とその子要素内だけで有効です。
    • 変数名の重複を避ける:モデル変数とテンプレート変数で同じ名前を使うと上書きされてしまうため、分かりやすい名前にしましょう。
    • 構文に注意:複数定義時はカンマで区切り、文字列はシングルクオートで囲む必要があります。
    • スコープ制御の工夫:th:blockを使って変数の有効範囲を明示的に分けると、テンプレートが読みやすくなります。

    これらの基本ルールを守れば、Gradle+Pleiades環境で@Controllerと連携したThymeleafテンプレートが、安定して使いやすくなります。

    6. 初心者向けによくある質問と回答

    6. 初心者向けによくある質問と回答
    6. 初心者向けによくある質問と回答

    Q. テンプレート変数はJavaの変数とどう違いますか?

    A. Javaの変数はメソッドやクラス単位で使われますが、Thymeleafの変数はHTMLテンプレート内だけで役割を持つ一時変数です。

    Q. モデル変数と同じ名前にしてしまったときどうなる?

    A. テンプレート変数が優先され、モデル変数が隠れてしまうため、名前の衝突を避けることが大切です。

    Q. th:with内でカンマを入れ忘れるとどうなる?

    A. タイプミスによる構文エラーが発生し、テンプレートのレンダリングに失敗します。記述後は画面表示確認を忘れずに。

    Q. 一時変数として演算も可能ですか?

    A. はい、th:with="total=${price} * ${quantity}" のように、四則演算や文字列結合も使えます。

    7. 学習を深めるためのおすすめ情報

    7. 学習を深めるためのおすすめ情報
    7. 学習を深めるためのおすすめ情報

    以下の資料やサンプルを活用すると、Thymeleaf変数の理解がさらに深まります:

    • 公式Thymeleafリファレンス:th:withや式言語、スコープの詳細な説明あり。
    • Spring公式ガイド:@Controllerとの連携方法や、Gradleプロジェクト設定の手順が丁寧に解説されています。
    • GitHubのサンプルプロジェクト:Pleiades+Gradle+Thymeleaf環境が整ったサンプルで、自分の環境に取り込んで動作確認が可能です。
    • 所感のある実践的Tip記事:例えば「文字列結合テンプレート」や「演算結果をHTMLに表示する小技」など、便利な使い方をまとめた記事が参考になります。

    まずは一番簡単な画面でth:withを使って変数定義と表示を試し、その後演算やスコープ制御にチャレンジしてみましょう。段階的に経験を積むことで、Thymeleafテンプレートの書き方が自然に身につきます。

    コメント
    コメント投稿は、ログインしてください

    まだ口コミはありません。

    カテゴリの一覧へ
    新着記事
    New1
    Spring認証(Spring Security)
    Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
    New2
    Spring認証(Spring Security)
    パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
    New3
    SpringのWeb開発(Spring MVC)
    HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
    New4
    Spring認証(Spring Security)
    ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
    人気記事
    No.1
    Java&Spring記事人気No1
    SpringのWeb開発(Spring MVC)
    ルーティングとは?基本概念(Spring MVCのURL制御を理解)
    No.2
    Java&Spring記事人気No2
    Thymeleaf
    Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
    No.3
    Java&Spring記事人気No3
    Springの基本
    application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
    No.4
    Java&Spring記事人気No4
    Springの基本
    Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
    No.5
    Java&Spring記事人気No5
    Springの基本
    Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
    No.6
    Java&Spring記事人気No6
    SpringのWeb開発(Spring MVC)
    ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
    No.7
    Java&Spring記事人気No7
    SpringのDB操作
    JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
    No.8
    Java&Spring記事人気No8
    Spring認証(Spring Security)
    セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み