今回はWebアプリケーションを作る上で超重要な「画面」について解説していくね! Spring Bootで画面を作る方法はいろいろあるけど、今回は特によく使われる**Thymeleaf(タイムリーフ)**っていうテンプレートエンジンを紹介するよ。
Thymeleafって何?
「テンプレートエンジン」って聞くと難しく感じるかもしれないけど、要はHTMLにJavaのデータをごにょごにょっと埋め込んで、動的なWebページを作るための道具なんだ。
例えば、
「こんにちは、〇〇さん!」
って表示したいとき、〇〇の部分はユーザーの名前によって変わるよね? そういうときにThymeleafが活躍するんだ。
簡単に言うと、HTMLファイルの中に特別な書き方(Thymeleafの記法)でJavaの変数とか条件分岐とかを書いておくと、Spring BootがそのHTMLを処理して、最終的なWebページを生成してくれるイメージだよ。
なんでThymeleafがいいの?
Thymeleafの魅力はいくつかあるんだけど、特にJava初心者さんにとって嬉しいポイントはこれ!
- HTMLをそのまま編集できる感覚! Thymeleafの記法はHTMLのタグの中に属性として書くことが多いから、普段HTMLを書いてる感覚でコードが書けるんだ。他のテンプレートエンジンだとHTMLの中に独自の記法を埋め込むから、HTMLとして見るとちょっと変に見えちゃうこともあるんだけど、ThymeleafはHTMLとして見ても自然だから、デザイナーさんとの連携もスムーズだよ。
- IDE(開発環境)のサポートが手厚い! IntelliJ IDEAとかVS Codeとかの統合開発環境だと、Thymeleafの記法に対する補完機能とかエラーチェックがしっかり効くから、ミスを減らせて開発がはかどるんだ。
- セキュリティも考慮されてる! エスケープ処理(悪意のあるコードが埋め込まれるのを防ぐ処理)を自動でやってくれるから、セキュリティ面でも安心だよ。
Thymeleafを使ってみよう!
じゃあ実際にThymeleafを使ってみよう! 前回のSpring Bootプロジェクトをベースにするよ。
1. Thymeleafの追加
まず、pom.xml(Mavenを使っている場合)またはbuild.gradle(Gradleを使っている場合)にThymeleafの依存関係を追加するよ。
Mavenの場合 (pom.xml)
XML
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
Gradleの場合 (build.gradle)
Gradle
dependencies {
// 他の依存関係
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
これを追加したら、プロジェクトをリロードしてね。
2. コントローラーの作成
次に、Thymeleafに渡すデータを用意するコントローラーを作成するよ。
src/main/java/com/example/demo/HelloController.java (もしプロジェクト名がdemoなら)
Java
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "こんにちは、Thymeleafの世界へようこそ!");
model.addAttribute("userName", "太郎");
return "hello"; // hello.html を表示する
}
@GetMapping("/users")
public String users(Model model) {
String[] userList = {"Alice", "Bob", "Charlie"};
model.addAttribute("users", userList);
return "users"; // users.html を表示する
}
}
このコントローラーでは、Modelというオブジェクトを使って、HTMLに渡したいデータをセットしているよ。
model.addAttribute("message", "こんにちは、Thymeleafの世界へようこそ!");:messageという名前で文字列をHTMLに渡す。model.addAttribute("userName", "太郎");:userNameという名前で文字列をHTMLに渡す。return "hello";:src/main/resources/templates/hello.htmlというファイルを表示するという意味だよ。
3. Thymeleafテンプレートの作成
最後に、表示するHTMLファイルを作成するよ。ファイルはsrc/main/resources/templates/フォルダの中に置くのがルールだよ。
src/main/resources/templates/hello.html
HTML
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleafの例</title>
</head>
<body>
<h1 th:text="${message}">ここにメッセージが表示されます</h1>
<p>ユーザー名: <span th:text="${userName}"></span></p>
<h2>Thymeleafの基本的な使い方</h2>
<h3>変数の表示 (`th:text`)</h3>
<p>これはThymeleafを使って表示しています: <span th:text="${message}"></span></p>
<p>ユーザーの名前は <span th:text="${userName}"></span> です。</p>
<h3>条件分岐 (`th:if`, `th:unless`)</h3>
<p th:if="${userName == '太郎'}">あなたの名前は太郎さんですね!</p>
<p th:unless="${userName == '太郎'}">あなたの名前は太郎さんではありませんね。</p>
<h3>繰り返し (`th:each`)</h3>
<p>ユーザーリストはこちら(/usersにアクセスすると見れるよ):</p>
<p>
<a href="https://moritama321.hatenablog.com/" target="_blank">前回の記事はこちら</a>
</p>
</body>
</html>
src/main/resources/templates/users.html
HTML
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザーリスト</title>
</head>
<body>
<h1>登録ユーザー一覧</h1>
<ul>
<li th:each="user : ${users}" th:text="${user}"></li>
</ul>
<p>
<a href="https://moritama321.hatenablog.com/" target="_blank">前回の記事はこちら</a>
</p>
</body>
</html>
ポイントはこれだよ!
xmlns:th="http://www.thymeleaf.org": HTMLタグの<html>にこの属性を追加することで、Thymeleafの記法が使えるようになるよ。th:text="${message}": コントローラーから渡されたmessage変数の値を、このHTML要素のテキストとして表示するよ。$は変数を参照するときの記号だね。th:if="${userName == '太郎'}":userName変数が「太郎」と等しい場合に、この要素が表示されるよ。条件分岐だね。th:unless="${userName == '太郎'}":userName変数が「太郎」と等しくない場合に、この要素が表示されるよ。th:ifの逆だね。th:each="user : ${users}":usersという配列(リスト)の要素を一つずつ取り出して、userという変数に格納しながら、この<li>要素を繰り返し生成するよ。ループ処理だね。
実行してみよう!
これで準備はOK! Spring Bootアプリケーションを起動して、ブラウザでhttp://localhost:8080/helloにアクセスしてみてね。
「こんにちは、Thymeleafの世界へようこそ!」 「ユーザー名: 太郎」
と表示されれば成功だよ!
次にhttp://localhost:8080/usersにアクセスすると、ユーザーリストが表示されるはずだよ。
もっとThymeleafを使いこなそう!
今回は基本的な使い方を紹介したけど、Thymeleafには他にもいろんな機能があるんだ。
- リンクの生成 (
th:href): URLを動的に生成したり、パスパラメータを渡したりできるよ。 - フォームの扱い: ユーザーからの入力を受け取って、Javaのオブジェクトにマッピングするのも得意だよ。
- フラグメント: ヘッダーやフッターなど、複数のページで使い回したい部分を別ファイルにまとめて、再利用できる機能もあるよ。
これらの機能は、Webアプリケーション開発で非常に役立つから、ぜひ公式ドキュメントとか他の記事も参考にしながら、いろいろ試してみてほしいな。
まとめ
今回はSpring BootでWebページを作るための強力なツール、Thymeleafについて解説したよ。
- ThymeleafはHTMLの中にJavaのデータを埋め込んで、動的なWebページを作るためのテンプレートエンジンだよ。
- HTMLをそのまま編集するような感覚で書けるのが魅力。
th:textで変数を表示したり、th:ifで条件分岐したり、th:eachで繰り返し表示したりできるよ。


コメント