Thymeleafのif文とunlessの組み合わせ例!初心者でもわかる条件分岐
新人
「先輩、Thymeleafで条件分岐をする方法ってあるんですか?」
先輩
「もちろんだよ!Thymeleafではth:if属性やth:unless属性を使って、HTML内で条件分岐を表現できるんだ。Spring Bootの@Controllerクラスで準備したデータを、PleiadesのGradle環境で実行すると便利だよ。」
新人
「なるほど!でも、th:ifとth:unlessの違いって何ですか?」
先輩
「いい質問だね。じゃあ、th:ifとth:unlessの役割と使い方を一緒に見ていこう!」
1. Thymeleafのif文とは?基本的な使い方
Spring Bootアプリケーションで、Thymeleafのth:if属性を使うと、条件が「真(true)」のときにそのHTMLタグが表示されます。つまり、th:ifは「もし〇〇なら表示する」という条件分岐を担当します。
例えば、コントローラの@Controllerクラスで次のようにモデルデータを渡したとします。
@Controller
public class SampleController {
@GetMapping("/example")
public String example(Model model) {
model.addAttribute("isVisible", true);
return "example";
}
}
このとき、ThymeleafのHTMLファイルでth:ifを使う例は以下のようになります。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleafの条件分岐</title>
</head>
<body>
<div th:if="${isVisible}">
<p>このメッセージはisVisibleがtrueのときにだけ表示されます。</p>
</div>
</body>
</html>
ここでは、コントローラから渡されたisVisibleがtrueのときだけ、<div>の中身が表示されます。PleiadesのGradleプロジェクトでビルド&実行すると、簡単に条件分岐を確認できます。
2. unless属性とは何か?if文との違いと役割
Thymeleafにはth:unless属性もあります。これは「条件が偽(false)のときに表示する」という逆の働きを持っています。つまり、条件が成り立たないときに表示したい場合に使います。
先ほどと同じ@Controllerのサンプルを使い、th:unlessの例を見てみましょう。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf unlessの例</title>
</head>
<body>
<div th:unless="${isVisible}">
<p>このメッセージはisVisibleがfalseのときにだけ表示されます。</p>
</div>
</body>
</html>
th:unlessを使うと、条件が偽の場合に表示されるHTML要素を簡単に記述できます。th:ifとth:unlessを上手に使い分けることで、Spring Bootアプリケーション内の画面制御がわかりやすくなります。
また、th:ifとth:unlessを組み合わせて使うこともできます。例えば次のように、ある変数がtrueならAの要素を表示し、falseならBの要素を表示する場合です。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf if文とunlessの組み合わせ</title>
</head>
<body>
<div th:if="${isVisible}">
<p>表示されるメッセージA</p>
</div>
<div th:unless="${isVisible}">
<p>表示されるメッセージB</p>
</div>
</body>
</html>
このように、th:ifとth:unlessを組み合わせることで、複雑な条件分岐でもシンプルに記述できます。PleiadesのGradleプロジェクトで作成したSpring Bootアプリケーションでも、この条件分岐の仕組みを活かして、動的な画面制御を実現できます。
Spring Bootの@Controllerクラスで受け取るリクエストパラメータや、サービスクラスの結果をそのままビューに反映できるので、Thymeleafの条件分岐はとても便利です。
ぜひ、自分のSpring Bootアプリケーションでth:ifとth:unlessを組み合わせて、動的なHTMLの表示を試してみてくださいね!
3. if文とunlessの組み合わせでよくある使い方例
ここからは、Thymeleafのth:ifとth:unlessを組み合わせてよく使うパターンを見ていきましょう。Spring Bootアプリケーションの中で、@Controllerクラスから複数のデータをビューに渡す場面は多いですよね。PleiadesのGradle環境で開発している場合も、同じやり方で条件式を適用できます。
例えば、ユーザーがログインしているかどうかを表すisLoggedInという変数を@Controllerで渡した場合、以下のようにth:ifとth:unlessを組み合わせることで、ログイン状態によって表示内容を変えられます。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ログイン状態の分岐例</title>
</head>
<body>
<div th:if="${isLoggedIn}">
<p>ようこそ、ユーザーさん!ログイン中です。</p>
</div>
<div th:unless="${isLoggedIn}">
<p>ログインしていません。ログインしてください。</p>
</div>
</body>
</html>
このような使い方は、Webアプリケーション開発では非常に一般的です。ユーザーごとに違う情報を見せたい場合などに、th:ifとth:unlessの組み合わせはとても役立ちます。Spring Bootの@Controllerから条件の値を設定して、Thymeleafで画面を切り替えられる仕組みはとても便利です。
4. 複雑な条件をifとunlessで使い分ける方法
次に、複雑な条件式を使いたい場合について見ていきましょう。Thymeleafでは、th:ifやth:unlessに単純なtrue/falseだけではなく、条件式も記述できます。例えば、数値の大小や文字列の比較も簡単に書けます。
コントローラで渡された数値scoreが60以上かどうかを判定して、条件式を使い分ける例です。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>スコア判定例</title>
</head>
<body>
<div th:if="${score >= 60}">
<p>合格おめでとうございます!</p>
</div>
<div th:unless="${score >= 60}">
<p>残念ですが不合格です。もう一度チャレンジしてください。</p>
</div>
</body>
</html>
このように、条件式を使うことで、動的な画面制御を柔軟に行えます。特にSpring Bootアプリケーションでは、@Controllerクラスからのデータに応じてHTMLを出し分けることが大切です。PleiadesのGradleプロジェクトでコーディングするときも、この書き方を使えば分岐をシンプルに記述できます。
また、条件が複雑になったときは、できるだけth:ifやth:unlessの条件式を見やすく整えておくと可読性が上がります。
5. 実際のSpring Bootコントローラでのデータ渡しとThymeleafテンプレートの連携例
最後に、実際の@Controllerクラスでのデータ渡しと、Thymeleafテンプレートでの条件分岐を組み合わせる例を見ていきましょう。PleiadesのGradleプロジェクトで開発するときも、このやり方を使うことで条件分岐が直感的に記述できます。
まずは、Spring Bootの@Controllerクラスの例です。
@Controller
public class UserController {
@GetMapping("/user/status")
public String userStatus(Model model) {
boolean isLoggedIn = true; // 本来はサービスなどで判定
int score = 75;
model.addAttribute("isLoggedIn", isLoggedIn);
model.addAttribute("score", score);
return "status";
}
}
この@Controllerでは、isLoggedInとscoreという二つのデータをビューに渡しています。Thymeleafテンプレート側では、th:ifとth:unlessを組み合わせて条件分岐を行います。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー状態表示</title>
</head>
<body>
<div th:if="${isLoggedIn}">
<p>ユーザーはログイン中です。</p>
<div th:if="${score >= 60}">
<p>試験に合格しました!スコアは[[${score}]]点です。</p>
</div>
<div th:unless="${score >= 60}">
<p>残念ですが不合格です。スコアは[[${score}]]点です。</p>
</div>
</div>
<div th:unless="${isLoggedIn}">
<p>ログインしていません。ログインしてください。</p>
</div>
</body>
</html>
このサンプルでは、ユーザーがログイン中かどうか、さらにスコアが60点以上かどうかで表示内容を分岐しています。PleiadesのGradle環境でこのコードをビルドして実行すれば、画面で条件分岐の動作をしっかり確認できます。
Spring Bootアプリケーションでは、@Controllerクラスで必要な情報をModelにセットし、Thymeleafテンプレートでth:ifやth:unlessを使って条件に応じた表示を行うのが基本の形です。
今回紹介したように、Thymeleafの条件分岐はとても直感的で初心者にもわかりやすいです。実際に自分のアプリケーションで条件を切り替えて、いろいろ試してみてください。PleiadesのGradle環境とSpring Bootの組み合わせは、Thymeleafの学習に最適です。
6. if文とunlessの組み合わせによる実務でのメリット
Thymeleafでth:ifとth:unlessを組み合わせると、実務で次のようなメリットがあります。
- コードがすっきり:SQLやJavaで条件判定を分けずに、ビューで表示制御できて見た目がわかりやすくなる
- メンテナンス性UP:条件に関するロジックがテンプレートに集約されるので、@
Controllerやサービス層を変更せずに対応できる - デザインとの分離:Pleiades+Gradle環境でも、条件分岐だけHTML側で扱えるので、フロントエンジニアが簡単に微調整できる
たとえば、ユーザー権限やエラーメッセージに応じて表示要素を切り替えたいとき、th:ifとth:unlessの組み合わせはコードを明確にし、Spring Bootアプリ全体の構造も整理できます。
7. 具体的な応用例(エラーメッセージ表示や表示制御など)
ここでは実務でよく使う「エラーメッセージ表示」と「表示制御」のパターンを紹介します。
まずはコントローラでエラーメッセージをModelにセットする例。
@Controller
public class FormController {
@PostMapping("/submit")
public String handleSubmit(@RequestParam String name, Model model) {
if(name == null || name.isEmpty()) {
model.addAttribute("error", "名前は必須です");
}
model.addAttribute("name", name);
return "formResult";
}
}
次に、Thymeleafテンプレートでエラーメッセージを条件分岐して表示します。th:ifとth:unlessを組み合わせています。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>エラー表示例</title></head>
<body>
<div th:if="${error}">
<p th:text="${error}">エラー内容</p>
</div>
<div th:unless="${error}">
<p th:text="'ようこそ、' + ${name} + ' さん'">こんにちは</p>
</div>
</body>
</html>
上の例では、errorがある場合のみエラーメッセージが表示され、ない場合は挨拶メッセージが表示されます。この応用は実務のフォーム処理などで非常に多いパターンです。
また、エラー以外にも次のような場面で条件分岐が使えます。
- ユーザーがADMINかどうかでボタンの表示切り替え
- リストが空かどうかで「データなし」メッセージを表示
- Spring BootのForm validationの
th:errorsと組み合わせるUI表示
こういった表示制御は、本番でのユーザー体験を向上させるためにとても重要ですし、th:if+th:unlessの併用が効果的に使われています。
8. 学習のコツと初心者へのアドバイス
最後に、Thymeleafのif文とunlessを学ぶときのコツと、初心者におすすめの進め方を紹介します。
- まずは基本から:最初は
th:ifとth:unlessを単独で試して、条件がtrue/falseで表示がどう変わるか確認しましょう - 組み合わせて整理:ログイン状況やスコア、エラーなどを複合するときは、HTMLを2つに分けて見通しよく書く工夫が大切
- 実務で試す:Pleiades+Gradle環境でSpring BootのForm validationやエラーメッセージと一緒に使えば、書いた分岐がそのまま役に立ちます
- 公式ドキュメントで調べる:Thymeleaf公式は,条件式やロジックの詳細が載っていて参考になります :contentReference[oaicite:0]{index=0}
- 他のメソッドや演算子も併用:文字列比較(
==やeq)、論理演算子(and/or)、EL関数(#strings)は便利対応力UPに使えます :contentReference[oaicite:1]{index=1} - StackOverflowで検索:具体的なエラーやパターンを探すと、「th:if」と「th:unless」のベストプラクティスが学べます :contentReference[oaicite:2]{index=2}
Thymeleafの条件分岐は、HTMLを書く感覚でJavaロジックを画面に映す点が魅力です。Spring Bootの@Controllerと組み合わせることで、実際のWebアプリ開発にも活かせます。
最初はわかりにくいかもしれませんが、コードを書いて確認しているうちに自然と使い方が身につくので、ぜひPleiades+Gradle+Spring Bootの環境で実際に動かして試してみてください!