Thymeleaf if文の書き方!null・emptyの判定例
新人
「先輩、Thymeleafでif文を使うときに、nullやemptyをどう判定するんですか?」
先輩
「とても大事なポイントだね!Thymeleafのif文では、null判定やempty判定を簡単に書けるんだよ。Spring Bootの@Controllerで渡したデータを、PleiadesのGradleプロジェクトで実行しながら確認していくと理解が深まるよ。」
新人
「なるほど!具体的な使い方を教えてください!」
先輩
「それじゃあ、Thymeleafのif文の基本と、nullやemptyの判定の書き方を順番に見ていこう!」
1. Thymeleafのif文とは?基本的な使い方
Thymeleafのth:if属性は、条件が真(true)のときだけHTMLタグを表示する仕組みです。Spring Bootの@Controllerから渡された値を使って、画面の表示を切り替えられます。例えば、ユーザーがログインしているかどうかでメッセージを変える場合などに便利です。
次は、@Controllerクラスで変数を渡すサンプルです。
@Controller
public class SampleController {
@GetMapping("/check")
public String checkUser(Model model) {
String userName = "山田太郎";
model.addAttribute("userName", userName);
return "check";
}
}
そして、ThymeleafのHTMLテンプレートでは、th:ifを使って条件分岐します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>if文の基本</title>
</head>
<body>
<div th:if="${userName}">
<p th:text="'ようこそ、' + ${userName} + ' さん!'">ようこそ!</p>
</div>
</body>
</html>
この例では、userNameが存在する場合だけメッセージが表示されます。PleiadesのGradleプロジェクトで実行すると、簡単に動作を確認できます。
2. nullやemptyを判定するif文の基本
次に、nullやemptyを判定する方法を説明します。Thymeleafでは、変数がnullや空文字の場合でも、条件を使って簡単に制御できます。
例えば、@Controllerで次のようなデータを渡した場合を考えてみましょう。
@Controller
public class SampleController {
@GetMapping("/status")
public String checkStatus(Model model) {
String message = "";
model.addAttribute("message", message);
return "status";
}
}
このとき、Thymeleafのif文でemptyを使うと、空文字やnullを簡単に判定できます。以下のHTML例を見てください。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>empty判定例</title>
</head>
<body>
<div th:if="${#strings.isEmpty(message)}">
<p>メッセージが未入力です。</p>
</div>
<div th:unless="${#strings.isEmpty(message)}">
<p th:text="${message}">入力されたメッセージ</p>
</div>
</body>
</html>
この例では、th:ifで#strings.isEmpty()を使うことで、messageがnullや空文字かどうかを判定しています。th:unlessはその逆で、空でない場合に表示されます。Spring Bootの@Controllerと組み合わせると、柔軟な画面制御ができます。
PleiadesのGradle環境でビルド&実行してみると、条件によって表示が切り替わる様子を簡単に試せます。初心者の方でも、Thymeleafのth:ifやth:unlessを使えば、条件分岐がとてもシンプルに記述できるのが実感できると思います。
3. nullとemptyの違いとif文での使い分け
nullは「値がまったくない状態」、emptyは「値はあるけど中身が空」の状態を表します。Thymeleafでは両者を区別して扱うことができます。
たとえば、コントローラで次のようにモデルに設定したとします。
@Controller
public class SampleController {
@GetMapping("/check2")
public String checkNullEmpty(Model model) {
String nullable = null;
String emptyStr = "";
model.addAttribute("nullable", nullable);
model.addAttribute("emptyStr", emptyStr);
return "check2";
}
}
Thymeleafテンプレートでは、以下のようにnull判定とempty判定を分けて使います。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>nullとempty判定</title></head>
<body>
<div th:if="${nullable == null}">
<p>nullです</p>
</div>
<div th:if="${#strings.isEmpty(emptyStr)}">
<p> emptyです(nullでもOK)</p>
</div>
<div th:unless="${nullable == null or #strings.isEmpty(emptyStr)}">
<p>どちらも問題なし</p>
</div>
</body>
</html>
このように、nullとemptyの違いを理解して条件式を書くことで、より正確に条件分岐ができるようになります。
4. 具体的なコード例(Thymeleafテンプレートと@Controllerの連携)
ここでは、簡単なSpring Bootの@ControllerとThymeleafテンプレートを連携させた実例を示します。
controllerで、ユーザー入力(コメント)を受け取ってnullやemptyを判断します。
@Controller
public class CommentController {
@PostMapping("/post")
public String postComment(@RequestParam(required=false) String comment, Model model) {
model.addAttribute("comment", comment);
return "postResult";
}
}
HTMLでは、コメントがない場合とある場合で表示を切り替えます。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>コメント投稿結果</title></head>
<body>
<div th:if="${comment == null}">
<p>コメントが送信されませんでした</p>
</div>
<div th:if="${#strings.isEmpty(comment)}">
<p>コメントは空です</p>
</div>
<div th:unless="${comment == null or #strings.isEmpty(comment)}">
<p th:text="'コメント: ' + ${comment}">コメント内容</p>
</div>
</body>
</html>
この例では、null、empty、そして内容ありの3つのパターンで表示が変わります。Pleiades+Gradle環境のSpring Bootアプリで、実際に動作を確認しながら学べます。
5. よくあるエラーと注意点
Thymeleafでnullやemptyの判定を使うときに、初心者がつまずきやすいポイントをまとめました。
- EL式の書き方ミス注意
「== null」や「#strings.isEmpty()」の式に誤字があるとエラーになります。 - nullチェックとemptyチェックの順序
nullのチェックをしないと、empty判定でエラーになる場合があります。例:comment == null or #strings.isEmpty(comment)のように先にnullを確認しましょう。 - ControllerでModelに値がない場合
@RequestParamでrequired=falseを使うと、モデルに値が入らないことがあります。null判定が特に重要になります。 - 文字列比較の違い
Thymeleafでは「==」も使えますが、文字列の等価比較は#strings.equals()の方が安全です。 - Spring Bootの例外設定
コントローラで例外が発生するとモデルに値が渡らない場合があるので、例外処理も意識しましょう。
以上のポイントをおさえることで、null・empty判定のif文を正しく使えるようになります。Pleiades+Gradle環境で手を動かしながら練習すると、自然と身につきますよ。
6. null・empty判定の実務での活用例
実務では、ユーザー入力や外部APIからのレスポンスでnullやemptyの判定が欠かせません。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="${feedback == null}">
<p>何も選択されていません。選んでください。</p>
</div>
<div th:if="${#strings.isEmpty(feedback)}">
<p>入力された内容が空です。もう一度お試しください。</p>
</div>
<div th:unless="${feedback == null or #strings.isEmpty(feedback)}">
<p th:text="'フィードバックありがとうございます:' + ${feedback}">フィードバック内容</p>
</div>
</body>
</html>
このパターンは、null=未入力、empty=空文字、内容ありの三通りを明示的に分岐できるので、エラー防止やユーザーへの案内に役立ちます。Pleiades+Gradle環境でも、この方法で実装すれば実務でもそのまま使える構造になります。
7. さらに複雑な条件の書き方(and, orの条件式)
null・empty以外にも複数条件を組み合わせると、画面制御がさらに細かくできます。Thymeleafではandやorが使えるので、条件式も自然な日本語に近く書けます。
以下は、ユーザー登録時の条件分岐例です。ユーザー名がnullまたはempty、かつ年齢がnullまたは未入力の場合など、複数条件を組み合わせています。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>複数条件判定</title></head>
<body>
<div th:if="${userName == null or #strings.isEmpty(userName) or age == null}">
<p>ユーザー名と年齢は必須です。</p>
</div>
<div th:unless="${userName == null or #strings.isEmpty(userName) or age == null}">
<p th:text="'ようこそ、' + ${userName} + ' さん!年齢は' + ${age} + '歳です。'">ようこそ!</p>
</div>
</body>
</html>
また、andを使って「両方成立する場合」の条件も書けます。
<div th:if="${userName != null and age >= 20}">
<p>成人ユーザーとして登録できます。</p>
</div>
このように、orとandを使って組み合わせることで、Spring Bootアプリケーションの@Controllerから渡された複数条件をThymeleafでスマートに制御できます。
8. 初心者への学習のコツ
最後に、Thymeleaf初心者の方に向けた学習のコツとまとめです。
- 基本を確実に理解する
まずはnull判定、empty判定、単純なth:ifやth:unlessの使い方を一つずつ試してください。 - 複雑な条件は少しずつ
最初から複雑な式を書くと混乱するので、基本がわかってからand/orを使いましょう。 - Controllerと画面の連携を確認
Pleiades+Gradle環境でSpring Bootを実行し、@Controllerで渡す値と画面表示の対応を実際に動かして確認することが大切です。 - フォーマットを統一する
EL式の書き方(${...})やThymeleafの関数呼び出し(#strings.isEmpty())の書式を統一するとミスを減らせます。 - 公式ドキュメントやサンプルを参考に
Thymeleaf公式には、条件式や関数の使い方が詳しく紹介されています。理解を深めるのに役立ちます。 - 実際のアプリで使う
フォーム入力、エラーメッセージ表示、リスト表示など、実務で使う場面で条件分岐をどんどん活用してください。
以上が、初心者向けThymeleafのnull・empty判定付きif文の活用ガイドです。Spring BootとThymeleafの連携を実際に試しながら進めれば、自然と使い方が身につきます。Pleiades+Gradle環境でたくさん実践して、安心して使えるスキルを身につけてください。
まとめ
Thymeleafのif文とnull・empty判定を総復習
ここまで、Thymeleafのif文を使った条件分岐について、基礎から実務での活用例まで詳しく見てきました。 Thymeleafは、Spring Bootと非常に相性が良く、@Controllerから渡された値を使って画面表示を柔軟に制御できるテンプレートエンジンです。 特に、null判定やempty判定は、Webアプリケーション開発において避けて通れない重要なポイントです。 ユーザー入力やフォーム送信、外部サービスとの連携など、実際の開発現場では「値が存在しない」「空文字が返ってくる」といった状況が頻繁に発生します。 そのため、Thymeleafのth:ifやth:unlessを使った条件分岐を正しく理解しておくことは、画面表示の不具合やエラーを防ぐうえで非常に大切です。
本記事では、th:ifの基本的な書き方から始まり、#strings.isEmpty()を使ったempty判定、 さらにnullとemptyの違いを意識した条件式の書き方までを段階的に解説しました。 nullは「値そのものが存在しない状態」、emptyは「値は存在するが中身が空の状態」であり、 この違いを理解していないと、意図しない画面表示や例外につながる可能性があります。 Thymeleafでは、EL式を使ってこれらをシンプルに表現できるため、初心者でも比較的早く習得しやすいのが特徴です。
また、ControllerとThymeleafテンプレートの連携についても、具体的なコード例を通して確認しました。 PleiadesのGradle環境でSpring Bootアプリケーションを動かしながら確認することで、 ControllerでModelにセットした値が、どのように画面側のif文に影響するのかを実感できたはずです。 特に、@RequestParamで値が渡らなかった場合や、required=falseを指定した場合など、 nullが発生しやすいケースを想定しておくことは、実務でのトラブル防止につながります。
条件分岐を整理するためのサンプルコード
ここで、null・empty・値ありの三つの状態を整理する、実務でもよく使われるパターンを改めて確認しておきましょう。 以下は、Thymeleafのif文とunlessを組み合わせた代表的な例です。
<div th:if="${value == null}">
<p>値が送信されていません</p>
</div>
<div th:if="${#strings.isEmpty(value)}">
<p>値は空です</p>
</div>
<div th:unless="${value == null or #strings.isEmpty(value)}">
<p th:text="'入力された値:' + ${value}">入力内容</p>
</div>
このように条件を明確に分けて書くことで、画面表示の意図がコードから読み取りやすくなります。 複雑な条件を一行でまとめてしまうのではなく、状態ごとに分けて考えることが、 Thymeleafのif文を安全に使いこなすコツといえるでしょう。
先生と生徒の振り返り会話
生徒:Thymeleafのif文って、最初は難しそうだと思っていましたけど、nullとemptyを分けて考えると分かりやすいですね。
先生:そうだね。Webアプリでは、値がないケースをどう扱うかがとても重要なんだ。特にフォーム入力では必須の考え方だよ。
生徒:#strings.isEmpty()を使えば、nullも空文字もまとめて判定できるのが便利だと思いました。
先生:その通り。ただし、どの状態をどう表示したいのかを意識して、条件式を書くことが大切だね。
生徒:Controllerで渡す値と、Thymeleaf側のif文の関係も理解できました。実際に動かすと納得できます。
先生:実際にPleiadesとGradle環境で試すのが一番の近道だよ。今回学んだif文の書き方は、どんなSpring Bootアプリでも必ず役に立つからね。
Thymeleafのif文とnull・empty判定は、画面制御の基礎でありながら、実務では非常に使用頻度の高い技術です。 今回学んだ内容を土台として、エラーメッセージ表示や入力チェック、条件付き表示など、 さまざまな場面で活用していくことで、より読みやすく安全なWebアプリケーションを作れるようになります。 基本を丁寧に積み重ねながら、Spring BootとThymeleafを使った開発に自信を持って取り組んでいきましょう。