カテゴリ: Spring 更新日: 2025/07/17

Thymeleafとは?初心者向けにやさしく解説!テンプレートエンジンの基本とSpringとの連携

Thymeleafとは?初心者向けにやさしく解説
Thymeleafとは?初心者向けにやさしく解説

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

新人

「SpringでWebアプリを作っていると、Thymeleafってよく聞くんですけど、それって何なんですか?」

先輩

「Thymeleafは、HTMLファイルにJavaのデータを埋め込んで、動的にページを生成するテンプレートエンジンの一つだよ。」

新人

「JSPとは違うんですか?なぜThymeleafが使われるんでしょう?」

先輩

「そのへんも含めて、今回はThymeleafの基本と使い方を順番に解説していくね。」

1. Thymeleafとは何か?

1. Thymeleafとは何か?
1. Thymeleafとは何か?

Thymeleaf(タイムリーフ)は、Javaで書かれたWebアプリケーションにおいて、HTMLを動的に生成するためのテンプレートエンジンです。Spring Framework、特にSpring MVCとの親和性が高く、HTML出力に特化した機能を多く持っています。

Thymeleafを使うと、HTMLファイルにJavaのデータや処理結果を埋め込むことができ、ユーザーの操作やデータに応じてページ内容を動的に切り替えることができます。

Springプロジェクトでは、ビューのレンダリングをThymeleafで行うケースが増えており、JSPの代替として注目されています。

2. HTMLテンプレートエンジンとしての役割

2. HTMLテンプレートエンジンとしての役割
2. HTMLテンプレートエンジンとしての役割

Thymeleafの役割は、JavaアプリケーションとHTMLをつなぐことです。コントローラで処理したJavaのオブジェクトを、Thymeleafを使ってHTMLページに反映させることができます。

例えば、Java側で「ユーザー情報」を取得したときに、Thymeleafを使えばその情報をHTMLに自然な形で表示できます。これにより、JavaとHTMLの連携がとてもスムーズになります。

Thymeleafの特徴は、通常のHTMLとしても表示可能なことです。これは、ブラウザでHTMLファイルを直接開いたときにもエラーにならず、構文が破綻しないという意味です。静的ページとしても確認しやすいため、デザイナーとエンジニアの共同作業にも向いています。

以下は、Thymeleafを使ってSpringの@Controllerから値を受け取り、HTMLに表示する基本的な例です。


@Controller
public class GreetingController {

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "こんにちは、Thymeleaf!");
        return "hello";
    }
}

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>挨拶ページ</title>
</head>
<body>
    <p th:text="${message}">ここにメッセージが表示されます</p>
</body>
</html>

テンプレートエンジンとしてのThymeleafは、HTMLとの整合性を保ちつつ、Javaから渡された情報をシンプルに埋め込めるのが魅力です。

3. なぜJSPではなくThymeleafが選ばれるのか?

3. なぜJSPではなくThymeleafが選ばれるのか?
3. なぜJSPではなくThymeleafが選ばれるのか?

以前は、Spring MVCのビューとしてJSP(JavaServer Pages)が一般的に使われていましたが、最近では多くのプロジェクトでThymeleafが選ばれています。その理由は以下のとおりです。

  • HTMLファイルとして自然な構造:JSPではタグライブラリが多く、HTMLとして崩れやすいが、ThymeleafはそのままHTMLとして開ける。
  • サーバーサイドでの処理の明確化:条件分岐やループ処理などが明示的に記述でき、コードの可読性が高い。
  • Springとの親和性が高い:Spring Bootのstarter依存関係にThymeleafが標準で組み込まれており、設定も簡単。
  • JSPに比べて学習コストが低い:HTMLの構文を崩さずに使えるため、初心者でも直感的に理解しやすい。

また、JSPではWebサーバーにTomcatなどのサーブレットコンテナが必要ですが、ThymeleafはSpring Bootと組み合わせることで、より簡潔な構成でWebアプリケーションを開発できます。

このように、ThymeleafはHTMLテンプレートエンジンとして、Springアプリケーション開発において理想的な選択肢となっており、今後も使用が拡大していくことが予想されます。

次回は、実際にThymeleafの構文や、具体的なHTMLファイルの書き方について、もっと詳しく解説していきましょう。

4. Thymeleafの基本構文と記法を理解しよう

4. Thymeleafの基本構文と記法を理解しよう
4. Thymeleafの基本構文と記法を理解しよう

Thymeleafでは、Javaで用意したデータをHTMLに埋め込むために、専用の属性(th属性)を使います。これにより、動的なHTML出力が可能になります。ここでは基本的な記法について学びましょう。

変数の出力(th:textの使い方)

th:textは、HTMLタグのテキスト部分に値を埋め込むために使います。Thymeleaf 変数の表示で最も基本となる構文です。


<p th:text="${userName}">名前が入ります</p>

このように書くと、Java側でmodel.addAttribute("userName", "田中太郎");と渡したデータが、HTML上に表示されます。

条件分岐(th:if / th:unless)

Thymeleafでは、HTMLの表示を条件によって制御できます。これはth:ifth:unlessという属性を使って実現します。


<p th:if="${isLogin}">ログイン中のユーザーです</p>
<p th:unless="${isLogin}">ログインしてください</p>

この例では、isLoginという変数がtrueなら最初の文が、falseなら次の文が表示されます。th:ifは「表示する」、th:unlessは「表示しない」という意味です。

繰り返し(th:each)

th:eachを使えば、リストなどのコレクションを繰り返し表示できます。ループの中で使える変数名を自由に設定できるのが特徴です。


<ul>
    <li th:each="item : ${itemList}" th:text="${item}">商品名</li>
</ul>

このコードでは、Javaでmodel.addAttribute("itemList", List.of("りんご", "バナナ", "ぶどう"));と渡しておくと、リストの内容が順番に表示されます。

5. Spring MVCとの連携方法(@ControllerからHTMLへ)

5. Spring MVCとの連携方法(@ControllerからHTMLへ)
5. Spring MVCとの連携方法(@ControllerからHTMLへ)

Spring Controller HTML連携は、Thymeleafを使ううえで最も重要なポイントです。Springの@ControllerからデータをModelに追加し、HTMLテンプレートに渡すことで、画面に動的な情報を表示できます。


@Controller
public class UserController {

    @GetMapping("/user")
    public String userPage(Model model) {
        model.addAttribute("userName", "佐藤花子");
        model.addAttribute("age", 28);
        return "user";
    }
}

上記の@Controllerでは、userNameageという変数をHTMLに渡しています。この値をテンプレート側で次のように使います。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>ユーザー情報</title>
</head>
<body>
    <h1 th:text="${userName}">ユーザー名</h1>
    <p th:text="'年齢:' + ${age} + '歳'">年齢</p>
</body>
</html>

このように、コントローラーから渡されたデータは、${変数名}の形で参照できます。文字列の連結などもテンプレート内で簡単にできます。

注意点としては、HTMLファイルの保存場所をsrc/main/resources/templatesフォルダにする必要があります。また、ファイル名の拡張子は.htmlにしてください。

6. HTMLとの親和性が高いThymeleafの魅力

6. HTMLとの親和性が高いThymeleafの魅力
6. HTMLとの親和性が高いThymeleafの魅力

Thymeleafは、静的HTMLとしても表示できるテンプレートエンジンという点が大きな特徴です。これは、テンプレート内で使われる構文が通常のHTMLに近く、特殊なタグや構文が少ないためです。

例えば、HTMLをブラウザで直接開いても、Javaのデータがない場合はデフォルトの内容が表示されるだけで、構文エラーにはなりません。


<p th:text="${message}">ここにメッセージが表示されます</p>

この例をそのままブラウザで開くと、「ここにメッセージが表示されます」と表示されます。つまり、Thymeleafの構文を使っても、HTMLとしての構造は壊れないのです。

これはデザイナーやフロントエンド開発者にとっても非常に助かるポイントで、Thymeleafを使えば、デザインとロジックの分離が自然に行えます。

さらに、フォームとの連携にも強く、th:actionth:fieldを使えば、Javaオブジェクトとフォームの自動バインディングも簡単に行えます。これらは次回以降の記事で詳しく取り上げる予定です。

Thymeleafの親和性の高さは、チーム開発においても力を発揮します。静的HTMLとしてブラウザ確認ができるので、エンジニアとデザイナーが並行して作業することが可能になります。

7. よく使うth属性の一覧と使い方

7. よく使うth属性の一覧と使い方
7. よく使うth属性の一覧と使い方

Thymeleafには、テンプレートでのHTML出力を制御するための専用属性が多数用意されています。ここではテンプレートエンジン 初心者でも理解しやすいよう、特によく使われるth属性の使い方を実例と一緒に解説していきます。

th:text:テキスト出力

Thymeleaf th:textは最もよく使われる属性で、HTMLの要素にテキストを挿入するために使います。エスケープ処理が自動で行われるため、XSS対策としても有効です。


<p th:text="${message}">ここにメッセージが表示されます</p>

th:if / th:unless:条件による表示制御

表示したい内容を条件によって切り替える場合は、th:ifまたはth:unlessを使います。


<p th:if="${isAdmin}">管理者専用メニュー</p>
<p th:unless="${isAdmin}">一般ユーザー用メニュー</p>

th:each:繰り返し処理

リストなどの繰り返しにはth:eachを使います。HTMLの構造そのままでループを実現できます。


<ul>
    <li th:each="user : ${userList}" th:text="${user.name}">ユーザー名</li>
</ul>

th:href:リンクの動的生成

th:hrefは、リンクのURLを動的に生成したい場合に使用します。


<a th:href="@{/user/edit/{id}(id=${user.id})}">編集</a>

このように書くことで、/user/edit/3のようなURLを自動生成できます。

8. 実際の画面を表示するサンプルフロー

8. 実際の画面を表示するサンプルフロー
8. 実際の画面を表示するサンプルフロー

ここでは、Spring MVC ビューでの処理フローを簡単な例で確認しましょう。データをコントローラからHTMLテンプレートへ渡して表示する、Thymeleafの基本的な流れです。

ステップ1:コントローラの作成


@Controller
public class BookController {

    @GetMapping("/books")
    public String bookList(Model model) {
        List<String> books = List.of("Java入門", "Spring徹底解説", "Thymeleafガイド");
        model.addAttribute("bookList", books);
        return "book-list";
    }
}

ステップ2:テンプレートファイル(book-list.html)の作成


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>書籍一覧</title>
</head>
<body>
    <h1>おすすめ書籍一覧</h1>
    <ul>
        <li th:each="book : ${bookList}" th:text="${book}">書籍名</li>
    </ul>
</body>
</html>

ステップ3:表示結果


おすすめ書籍一覧
- Java入門
- Spring徹底解説
- Thymeleafガイド

このように、Modelに追加したデータは、Thymeleafテンプレートで繰り返し表示され、HTMLとして自然に出力されます。

9. Thymeleafを使うときの注意点とベストプラクティス

9. Thymeleafを使うときの注意点とベストプラクティス
9. Thymeleafを使うときの注意点とベストプラクティス

ここでは、テンプレートエンジン 初心者が陥りがちな落とし穴や、実務で役立つベストプラクティスを紹介します。

th属性の優先順位に注意

Thymeleafではth:*属性が指定されている場合、元のHTML属性より優先されます。たとえば、th:hrefが指定されると、hrefの値は上書きされます。

HTML構造を守ること

ThymeleafはHTMLとの親和性が高い反面、構文エラーや属性の書き忘れがあると、画面に表示されない原因になります。要素の閉じタグ漏れや属性の記述ミスに注意しましょう。

nullチェックを忘れずに

Javaで渡した変数がnullだった場合、Thymeleaf側でうまく表示されないことがあります。th:ifでのnullチェックや、EL式内の?:(三項演算子)を活用しましょう。


<p th:text="${userName ?: 'ゲスト'}">ユーザー名</p>

テンプレートはtemplatesフォルダに配置する

HTMLファイルは必ずsrc/main/resources/templates内に配置してください。設定を変更していない限り、Spring Bootはこの場所をテンプレートの読み込み先として使用します。

動的なリンク生成はth:hrefで行う

URLのパラメータを動的に組み合わせるときは、th:hrefを使って記述します。Javaのルーティングと一致させることで、URL変更にも強い構造になります。


<a th:href="@{/detail/{id}(id=${item.id})}">詳細ページ</a>

このような小さな工夫が、保守性や可読性の向上につながります。

以上が、Thymeleafを実務で使うための基礎知識と活用法です。これらを意識することで、Spring MVCとの連携がスムーズになり、テンプレートエンジンとしての強みを十分に活かせるようになります。

次回は、フォーム入力のバインディングやバリデーションとの組み合わせなど、さらに実践的なThymeleafの使い方を掘り下げていきます。

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

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

カテゴリの一覧へ
新着記事
JDBCとは?Javaでデータベースを使うしくみを初心者向けに解説
Springと他のフレームワーク(StrutsやJSF)との違いを初心者向けにわかりやすく解説!
Springのモジュール構成(DI・AOP・MVCなど)を紹介
Javaの論理演算子(&&, ||, !)の使い方を学ぼう
人気記事
No.1
Java&Spring記事人気No1
単体テストと結合テストの違いを理解しよう
No.2
Java&Spring記事人気No2
Javaとは?初心者向けにやさしく解説
No.3
Java&Spring記事人気No3
SQLのサブクエリを完全ガイド!入れ子クエリの使い方を初心者向け解説
No.4
Java&Spring記事人気No4
SQLのトリガー(TRIGGER)を完全ガイド!初心者でもわかる自動処理の仕組み