カテゴリ: Thymeleaf 更新日: 2025/12/25

Thymeleaf(タイムリーフ)の使い方入門!初心者でもわかるth:textの基礎

Thymeleafのth:textの使い方
Thymeleafのth:textの使い方

先生と生徒の会話形式で理解しよう

生徒

「Thymeleafで表示するテキストをコントロールする方法はありますか?」

先生

「Thymeleafではth:textという属性を使うことで、簡単に動的なテキスト表示を実現できますよ。」

生徒

「具体的にはどのように使えばいいのでしょうか?」

先生

「では、基本的な使い方から詳しく解説していきますね!」

1. th:textとは?

1. th:textとは?
1. th:textとは?

th:textは、Thymeleafで最も基本となる機能のひとつで、HTMLタグの中に「サーバーから受け取った値」を表示するための属性です。 例えば、<span><div>に設定することで、画面に出したい文字を動的に差し替えることができます。 もし値が設定されていない場合でも、HTML側に書いたデフォルト文字がそのまま表示されるので安心です。

プログラミング未経験でも、HTMLに少し書き足すだけで使えるのが大きな魅力です。 「コントローラーで用意したテキストを画面に出す」という、一番よく使うパターンを 初心者向けの簡単な例で確認してみましょう。


<p>メッセージ:<span th:text="${message}">ここが置き換わります</span></p>

上記では、messageという変数の中身がタグに入ります。 例えば「こんにちは!」という文字が渡されていれば、画面には「メッセージ:こんにちは!」と表示されます。 静的なHTMLではできない「動的なデータ表示」が、たった1行でできるのがth:textです。

Webアプリでは、ユーザー名、エラーメッセージ、商品名など、 状況によって変化するテキストを扱う機会が多くあります。 そうした「毎回違う内容」を安全に表示できる仕組みが、Thymeleafのth:textだと覚えておくと理解しやすいでしょう。

2. 基本的なth:textの使い方

2. 基本的なth:textの使い方
2. 基本的なth:textの使い方

th:textを使って、HTMLの要素にテキストを挿入する方法について見ていきましょう。ここでは、th:textの基本的な構文と使い方を学んでいきます。

例えば、コントローラーから「message」という変数が渡されたときに、それを表示させるHTMLコードは以下のようになります。


<span th:text="${message}">デフォルトテキスト</span>

ここでのth:text="${message}"は、コントローラーから渡された「message」というデータを<span>タグの中に挿入することを意味します。

この記述をすることで、デフォルトテキストはmessageの内容に置き換わり、ブラウザに表示されるようになります。

3. th:textの変数設定とエスケープ処理

3. th:textの変数設定とエスケープ処理
3. th:textの変数設定とエスケープ処理

Thymeleafのth:textは、Javaオブジェクトや変数の値をHTMLに表示する際、自動的にエスケープ処理を行ってくれます。つまり、<>といったHTMLの特殊文字があった場合、それをHTMLエンティティに変換して表示します。

例えば、Java側で以下のようなメッセージが設定されているとします。


model.addAttribute("message", "Welcome to <strong>Thymeleaf</strong>!");

このmessageth:textで表示すると、HTMLエスケープが効いて<strong>タグがそのまま文字列として表示されます。


<span th:text="${message}">デフォルトメッセージ</span>

この結果、次のように画面に出力されます。


Welcome to <strong>Thymeleaf</strong>!

4. th:utextでエスケープを無効にする方法

4. th:utextでエスケープを無効にする方法
4. th:utextでエスケープを無効にする方法

HTMLエスケープを無効にしたい場合、th:textの代わりにth:utextを使います。th:utextを用いると、HTMLエスケープが無効になり、タグもそのまま適用されます。

先ほどの例でth:utextを使用した場合のコードは次のようになります。


<span th:utext="${message}">デフォルトメッセージ</span>

この場合、表示結果は次のように「Thymeleaf」という文字が太字で表示されます。


Welcome to <strong>Thymeleaf</strong>!

このように、HTMLタグをそのまま反映させたい場合にth:utextを使うと便利です。ただし、ユーザーが入力したデータに対してth:utextを使うと、XSS(クロスサイトスクリプティング)のリスクがあるため注意が必要です。

5. th:textで式を使って計算結果を表示する

5. th:textで式を使って計算結果を表示する
5. th:textで式を使って計算結果を表示する

th:textでは、式を使って計算結果を直接表示することも可能です。例えば、${5 + 3}のように記述すれば、計算された結果が表示されます。

次の例では、itemsのリストのサイズを表示します。


<p th:text="${items.size()}">アイテムの数</p>

上記のコードは、リストの要素数を表示します。これにより、動的なリストの情報をページに直接表示できます。

6. th:textでの条件分岐表示

6. th:textでの条件分岐表示
6. th:textでの条件分岐表示

Thymeleafのth:textと条件分岐を組み合わせて、特定の条件に応じたテキストを表示することも可能です。

例えば、ログインしているかどうかで表示内容を変える場合、次のようにします。


<p th:text="${isLoggedIn ? 'ようこそ、ユーザーさん!' : 'ゲストさん、ログインしてください'}"></p>

このコードでは、isLoggedIntrueなら「ようこそ、ユーザーさん!」、falseなら「ゲストさん、ログインしてください」が表示されます。

7. コントローラーからModelに値を渡す基本(@Controllerとth:textの連携)

7. コントローラーからModelに値を渡す基本(@Controllerとth:textの連携)
7. コントローラーからModelに値を渡す基本(@Controllerとth:textの連携)

Thymeleafで動的テキストを表示するには、まずコントローラーからModelに値を詰めてテンプレートへ渡します。ここで渡した値をth:textで参照すれば、ページ内のテキストを安全に置き換えられます。


@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "山田");
        model.addAttribute("count", 3);
        model.addAttribute("now", java.time.LocalDateTime.now());
        model.addAttribute("total", java.math.BigDecimal.valueOf(12345.6));
        return "hello"; // hello.html をレンダリング
    }
}
  

テンプレート側では、次のようにth:textでModelの値を参照します。


<p>ユーザー名:<span th:text="${name}">ゲスト</span></p>
<p>メッセージ数:<span th:text="${count}">0</span></p>
  

8. メッセージプロパティとth:textでの国際化(i18n)の基本

8. メッセージプロパティとth:textでの国際化(i18n)の基本
8. メッセージプロパティとth:textでの国際化(i18n)の基本

固定文言はテンプレートに直書きせず、メッセージプロパティ(例:messages.properties)へ切り出すと、言語ごとの切り替えが容易になります。th:text#{...}構文でメッセージを参照できます。


# src/main/resources/messages.properties
greeting.user=こんにちは、{0}さん
items.count=アイテム数: {0}
total.amount=合計金額: {0}
  

テンプレートでは次のように記述します。プレースホルダー{0}へModelの値を渡せます。


<p th:text="#{greeting.user(${name})}">こんにちは、ユーザーさん</p>
<p th:text="#{items.count(${count})}">アイテム数: 0</p>
  

言語ごとにmessages_ja.propertiesmessages_en.propertiesを用意すれば、ロケールに応じて自動で適切な文言が表示されます。

9. 文字列の連結・数値/日付フォーマットをth:textで扱う

9. 文字列の連結・数値/日付フォーマットをth:textで扱う
9. 文字列の連結・数値/日付フォーマットをth:textで扱う

Thymeleafは文字列の連結やフォーマット用ユーティリティを備えており、th:textだけで見やすい表示を実現できます。

  • 文字列連結(リテラル置換)|...|で文字列を囲み、${...}を差し込みます。
  • 数値フォーマット#numbersで整数/通貨などの整形が可能です。
  • 日付時刻フォーマット#temporalsjava.timeの値を整形できます。

<p th:text="|ようこそ、${name}さん!|">ようこそ、ゲストさん!</p>

<!-- 整数の見やすい表示(3桁区切りなどロケールに準拠) -->
<p th:text="|未読メッセージ: ${#numbers.formatInteger(count)}件|">未読メッセージ: 0件</p>

<!-- 通貨表示(ロケールの通貨書式に準拠) -->
<p th:text="|合計金額: ${#numbers.formatCurrency(total)}|">合計金額: ¥0</p>

<!-- 日付時刻の整形(java.time.LocalDateTime を想定) -->
<p th:text="${#temporals.format(now, 'yyyy/MM/dd HH:mm')}">2025/01/01 00:00</p>
  

テキスト生成をすべてテンプレート側で行うのではなく、必要に応じてサービス層で値を整えてからModelへ詰めると、ビューの責務が明確になり保守性が高まります。

まとめ

まとめ
まとめ

本記事では、Thymeleafの基本的な使い方から応用的な活用法まで、「th:text」を中心に学びました。Thymeleafは、HTMLとJavaコードのデータバインディングを簡単に行えるテンプレートエンジンであり、Spring Bootと併用することで、動的なWebページの構築が容易になります。特に、th:textを使って、コントローラーから渡されたデータを動的に表示する方法や、エスケープ処理、エスケープ無効化、式による計算や条件分岐による柔軟な表示制御が行えることを確認しました。これらのテクニックを駆使することで、ユーザーに応じたカスタマイズ表示や、柔軟な画面レイアウトが可能になります。

th:textの基本的な使い方として、HTMLの要素にテキストを動的に表示する手順を押さえ、エスケープ処理やth:utextの活用により、タグの扱いやセキュリティについて理解を深めました。また、式を用いた計算やリストの動的表示、条件分岐による出し分けなど、Thymeleafの表現力豊かな機能を活用することがWeb開発において重要であるとわかりました。

以下は、今回学んだ内容の総括的なサンプルコードです。これまで紹介した構文を複合的に活用し、実際のページ構成に適用する例を確認しましょう。


<section>
    <h2 th:text="${title}">デフォルトタイトル</h2>
    <p th:utext="${introMessage}">デフォルトメッセージ</p>
    <div>
        <span th:text="${userName != null ? 'ようこそ、' + userName + 'さん!' : 'ゲストさん、ログインしてください'}"></span>
        <ul>
            <li th:each="item : ${items}" th:text="${item}">サンプルアイテム</li>
        </ul>
    </div>
    <p>計算結果: <span th:text="${10 + 20}">30</span></p>
</section>

上記コードでは、th:textを活用してページ全体のテキストを動的に更新しつつ、条件分岐でログイン状態の異なるユーザー向けのメッセージ表示を行っています。また、アイテムのリスト表示と計算式も取り入れ、複数の機能を組み合わせたサンプルとなっています。

先生と生徒の振り返り会話

生徒

「先生、Thymeleafのth:textでいろんなことができるんですね!」

先生

「その通りです!特にSpring BootのWebアプリでは、th:textは動的なデータ表示に欠かせません。」

生徒

「エスケープ処理や計算、条件分岐もできるとは思いませんでした。特にth:utextを使うとHTMLもそのまま表示されるんですね。」

先生

「そうです。ただし、ユーザーが入力したデータを表示する際は、XSS攻撃対策としてth:utextの使用には慎重になる必要があります。」

生徒

「わかりました!今後の開発で活用できそうです。しっかり復習して自分のものにしたいと思います!」

先生

「その意気です。Thymeleafの基本をマスターして、Webアプリの見栄えや使い勝手をさらに良くしていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Thymeleafのth:textと通常のHTMLテキスト表示の違いは何ですか?

Thymeleafのth:textは、サーバーサイドから渡されたデータをHTMLテンプレートに動的に表示するために使われます。通常のHTMLテキストは静的ですが、th:textを使うとデータの変化に応じた内容を表示できます。

初心者でもth:textを簡単に使いこなせる方法はありますか?

はい、簡単な例として、コントローラーで変数を設定し、HTMLにと記述するだけで動的表示が可能です。まずは基本的な使い方を理解しましょう。

th:textでエスケープ処理が行われる仕組みは何ですか?

th:textは、HTMLの特殊文字(例:<>)を自動的にエスケープして表示します。これにより、画面に不要なHTMLタグが表示されず、安全に出力されます。

HTMLエスケープを無効にするth:utextの使いどころは?

th:utextを使うと、HTMLタグがそのまま適用されます。主に、HTML形式のメッセージやリッチテキストを表示する場合に使用されますが、ユーザー入力に対してはXSS攻撃を防ぐため注意が必要です。

th:textで条件分岐を使いたい場合、どのように記述すればよいですか?

条件分岐は${条件 ? 'trueの場合のテキスト' : 'falseの場合のテキスト'}のように記述します。例えば、isLoggedIntrueなら「ようこそ」と表示することができます。

th:textでリストの要素を動的に表示する方法を教えてください。

リストの要素を動的に表示するには、th:eachを使用します。例として、
  • と書けば、リスト内の各要素がHTMLに展開されます。

    th:textで計算式を使うことはできますか?

    はい、${5 + 3}のように記述すると、計算結果の8が表示されます。この機能を使えば、簡単な計算結果を動的に表示できます。

    th:textを使用するときのよくある間違いは何ですか?

    よくある間違いは、サーバーサイドで変数が適切に設定されていないことや、th:textの構文を間違えて記述することです。コントローラー側で正しくデータを渡しているか確認しましょう。

    ThymeleafをSpring Bootと連携する際の注意点はありますか?

    Spring Bootでは、Thymeleafテンプレートをresources/templatesフォルダに配置する必要があります。また、必要な依存関係をpom.xmlに追加してください。

    th:textth:utextの使い分け方がわかりません。

    th:textはHTMLエスケープを行い、th:utextはエスケープを無効化します。ユーザーが入力したデータにはth:textを、HTMLタグを反映したい場合にはth:utextを使いましょう。

    Modelに入れた値が画面に出ないとき、まず何を確認すべきですか?

    ビューネームとテンプレート名の一致(例:コントローラーでreturn "hello"ならhello.html)、属性名のスペル、レンダリング先の要素に正しくth:textが付いているか、リダイレクトしていないかを順に確認しましょう。

    Model/ModelMap/ModelAndViewの違いは?どれを使えばよいですか?

    ModelModelMapは属性の追加用で使い勝手はほぼ同じです。ビュー名も同時に指定したい場合はModelAndViewが便利です。シンプルなハンドラならModelが読みやすくおすすめです。
    カテゴリの一覧へ
    新着記事
    Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
    Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
    SpringのBindingResult完全ガイド!初心者でもわかる入力チェックとgetTargetの使い方
    Thymeleafのth:data-*属性を使いこなす!初心者向け完全解説
    人気記事
    No.1
    Java&Spring記事人気No1
    Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
    No.2
    Java&Spring記事人気No2
    Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
    No.3
    Java&Spring記事人気No3
    JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
    No.4
    Java&Spring記事人気No4
    JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
    No.5
    Java&Spring記事人気No5
    JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
    No.6
    Java&Spring記事人気No6
    Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
    No.7
    Java&Spring記事人気No7
    JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
    No.8
    Java&Spring記事人気No8
    JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説