Thymeleafでのnull判定の書き方とよくあるミスを初心者向けに解説
新人
「先輩、Thymeleafで値がnullかどうかを判定したいのですが、どうやって書けばいいですか?」
先輩
「Thymeleafでは、if文を使って簡単にnull判定ができますよ。」
新人
「if文ですか?Javaのif文と同じような感じなんでしょうか?」
先輩
「そうですね。ただ、ThymeleafはHTMLテンプレート内で書くので、ちょっと書き方が違います。詳しく説明しますね!」
1. Thymeleafでのnull判定とは?
Thymeleafは、Spring Bootの開発でよく使われるテンプレートエンジンです。HTMLファイルの中で、サーバーから受け取った値を埋め込むことができる便利な仕組みです。開発環境としては、Pleiadesを使い、Gradleでプロジェクトを構築していることを前提にします。
Thymeleafを使うと、例えばコントローラで設定した変数がnullかどうかをHTML上で確認することができます。これを「Thymeleaf null判定」といいます。初心者の方は、よく「null判定ってどう書くんだろう?」と思うかもしれませんが、Thymeleafならとてもシンプルに書けるので安心してください。
通常、コントローラは@Controllerアノテーションを付けて作成します。そして、例えば以下のようにコントローラでモデルにデータをセットしたとします。
@Controller
public class SampleController {
@GetMapping("/sample")
public String showSample(Model model) {
String message = null; // nullをセットしている例
model.addAttribute("message", message);
return "sample";
}
}
このように、messageがnullの場合、HTML側でどう判定するかが「Thymeleafのnull判定」です。
2. if文を使ったnull判定の基本構文
Thymeleafでのnull判定は、th:if属性を使うのが基本です。HTMLの要素にth:ifを追加して、表示するかどうかを判定します。初心者向けに、まずはシンプルなサンプルを紹介します。
以下は、先ほどのmessageがnullではない場合にだけ、メッセージを表示するサンプルです。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf null判定サンプル</title>
</head>
<body>
<p th:if="${message != null}" th:text="${message}">メッセージがここに表示されます。</p>
</body>
</html>
このように、th:if="${message != null}"と書くことで、messageがnullではない場合だけ
タグが表示されます。
逆に、messageがnullの場合には、
タグ自体がレンダリングされません。これがThymeleafの基本的なif null判定の仕組みです。
なお、よくあるミスとして、th:ifの中で「null」を文字列として書いてしまうことがあります。例えば、以下のように書くと、正しく判定できません。
<p th:if="${message != 'null'}" th:text="${message}"></p>
この例では「'null'」という文字列と比較してしまっているので、messageが本当にnullかどうかの判定にはなりません。初心者の方は、必ずnullは文字列ではなくJavaのキーワードとして書くことを覚えておきましょう。
また、if文だけでなく、th:unlessを使って「nullの場合だけ表示する」という逆の条件も書けます。以下はその例です。
<p th:unless="${message != null}">メッセージは設定されていません。</p>
この例では、messageがnullのときだけ
タグが表示される仕組みです。条件に応じて、th:ifとth:unlessを使い分けると便利です。
以上が、Thymeleafのif文を使った基本的なnull判定の書き方です。初心者向けにポイントをまとめると:
- Thymeleafでは、
th:ifを使ってnull判定を行う - null判定では、
nullを文字列ではなくキーワードとして書く th:unlessは逆の条件(nullの場合だけ)に使う- コントローラは
@Controllerを使い、PleiadesのGradle環境で開発する
このポイントを押さえておけば、初心者の方でもThymeleafのnull判定がしっかり書けるようになります。
3. よく使われるnull判定の例
ここでは、初心者向けにThymeleafのnull判定の実践的な例をいくつか紹介します。PleiadesのGradle環境で開発しているプロジェクトで、コントローラから受け取った変数がnullかどうかを確認する場面はとても多いです。例えば、ユーザー情報やメッセージの表示などでnull判定がよく使われます。
まず、以下のようなシンプルな例を見てみましょう。コントローラでuserNameという変数を渡しているとします。
<p th:if="${userName != null}" th:text="${userName}">ユーザー名が表示されます。</p>
<p th:unless="${userName != null}">ユーザー名が設定されていません。</p>
このように、th:ifとth:unlessを組み合わせることで、nullの場合とnullではない場合で別々のメッセージを表示できます。
また、リストやコレクションがnullかどうかを確認するときもあります。以下の例は、商品リストitemListがnullかどうかを判定するものです。
<ul th:if="${itemList != null}">
<li th:each="item : ${itemList}" th:text="${item.name}"></li>
</ul>
<p th:unless="${itemList != null}">商品が登録されていません。</p>
この例では、itemListがnullではない場合は商品一覧が表示され、nullの場合は「商品が登録されていません。」と表示されます。こういったパターンは、Thymeleafを使うときによく出てくるので覚えておくと便利です。
4. null判定でやりがちなミスと注意点
初心者の方がThymeleafでnull判定を書くときに、いくつかのミスをしやすいポイントがあります。ここでは、代表的なミスとその対策を紹介します。
一番多いミスは、th:ifやth:unlessの中でnullを文字列として書いてしまうことです。例えば以下のように書くと、正しくnull判定ができません。
<p th:if="${userName != 'null'}" th:text="${userName}"></p>
このように「'null'」という文字列と比較してしまうと、実際のnull判定とは異なる結果になります。正しくは次のように、nullは文字列ではなくJavaのキーワードとして書きます。
<p th:if="${userName != null}" th:text="${userName}"></p>
もう一つのミスとして、th:textの中に直接nullが入ってしまい、ブラウザに「null」と表示されてしまうことがあります。これを防ぐためには、th:ifでnull判定をしておくことが大切です。もしnullかもしれない変数をそのままth:textで表示すると、想定外の表示になるので注意しましょう。
さらに、コントローラ側でnullを返さないように初期化するのも良い方法です。例えば、空文字列や空のリストを返すようにするだけで、HTML側のnull判定を減らすことができます。以下はコントローラ側で空文字列を設定する例です。
@Controller
public class UserController {
@GetMapping("/user")
public String showUser(Model model) {
String userName = ""; // 空文字列で初期化
model.addAttribute("userName", userName);
return "user";
}
}
このようにしておくと、HTML側ではnull判定ではなく空文字列かどうかの判定に切り替えられ、よりシンプルなコードになります。
5. null判定をきれいに書くためのポイント
最後に、Thymeleafのnull判定をきれいに書くためのポイントをいくつか紹介します。まず、条件分岐はth:ifやth:unlessを適切に使い分けることが大切です。必要以上に条件式を複雑に書かないことが、コードを読みやすくするコツです。
次に、テンプレートの可読性を高めるために、条件分岐が増えてきた場合は、部分テンプレート(フラグメント)を使うのもおすすめです。たとえば、エラーメッセージの表示部分だけを切り出して別ファイルにすることで、メインのHTMLがすっきりします。
さらに、変数の初期化やnullチェックをコントローラ側である程度行うことで、HTMLに余計な判定を書かなくて済むようになります。これは、PleiadesのGradle環境でプロジェクトを作る際にも役立つ基本的な考え方です。
実際に、以下のように複雑な条件式をできるだけ避け、シンプルにまとめるように意識するとよいでしょう。
<!-- 複雑に書かずに、できるだけ簡潔に書く -->
<p th:if="${user != null and user.name != null}" th:text="${user.name}"></p>
この例では、ユーザー情報userがnullではない場合、さらにuser.nameがnullでないかを確認してから表示するようにしています。条件分岐を短くまとめると、後から見返したときにわかりやすいので、初心者の方はぜひ実践してみてください。
以上のポイントを意識すれば、Thymeleafでのnull判定をきれいに書けるだけでなく、他のテンプレートエンジンでも役立つ基本的な考え方が身につきます。ぜひ、PleiadesのGradle環境で自分のプロジェクトに取り入れてみてください。
6. null判定を使ったサンプルアプリケーション例
ここでは、Thymeleafのnull判定を使ったサンプルアプリケーション例を紹介します。開発環境はPleiadesで、Gradleを使用し、コントローラは@Controllerで作成しています。
例えば、ユーザーのプロフィール情報を表示する画面を作る場合を考えましょう。ユーザーのニックネームnicknameが設定されている場合とされていない場合で表示を切り替えるサンプルです。
@Controller
public class ProfileController {
@GetMapping("/profile")
public String showProfile(Model model) {
String nickname = null; // ここではnullのケースを例示
model.addAttribute("nickname", nickname);
return "profile";
}
}
そして、HTMLテンプレートprofile.htmlでは以下のように書きます。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>プロフィール</title>
</head>
<body>
<h1>プロフィール画面</h1>
<p th:if="${nickname != null}" th:text="'ようこそ、' + ${nickname} + 'さん!'"></p>
<p th:unless="${nickname != null}">ニックネームが設定されていません。</p>
</body>
</html>
この例では、コントローラからnicknameがnullのまま渡された場合、th:unlessが有効になり「ニックネームが設定されていません。」と表示されます。逆に、nicknameに値がある場合は、ようこそメッセージが表示される仕組みです。
7. 初心者が練習するときのポイント
Thymeleafのnull判定を練習するときは、まず小さいサンプルを作ることが大切です。複雑なアプリケーションをいきなり作るのではなく、nullの状態と値がある状態を簡単に切り替えて動作確認できるサンプルを作ってみましょう。
具体的には、以下のような手順で練習するのがおすすめです。
- まず、Pleiadesで新しいGradleプロジェクトを作成する
- コントローラを
@Controllerで作成し、Modelに値をセットする - HTMLファイルで
th:ifやth:unlessを使い、表示内容を切り替える - ブラウザで表示を確認して、nullのときとそうでないときの違いを確かめる
また、練習するときは変数をnullに設定したり、値を入れたりして、表示の変化をしっかり確認するのがポイントです。何度も表示を切り替えて試すことで、条件分岐の仕組みがよくわかるようになります。
初心者の方は、最初はうまくいかないこともありますが、焦らずに「nullは何も値がないこと」と「th:ifは条件に合うときだけ表示する」という基本を繰り返し練習すると、自然に身につきますよ。
8. 記事のまとめ
今回の記事では、Thymeleafのif文を使ったnull判定の基本構文から、よくあるミスやきれいに書くコツまで、初心者向けに詳しく解説しました。開発環境はPleiadesで、Gradleを使ってプロジェクトを作成し、コントローラは@Controllerを使用する流れで進めました。
Thymeleafのnull判定は、条件分岐の基本としてとても重要です。変数がnullのときに表示を切り替えることで、ユーザーに正しい情報をわかりやすく伝えられるようになります。また、条件分岐をきれいに書くことで、テンプレートが読みやすく保守性の高いものになります。
特に初心者の方にとっては、「nullは値がないこと」という基本と、「th:ifで条件を指定するときはnullを文字列ではなくキーワードとして書く」という点が大切です。今回の記事で紹介したサンプルアプリケーション例や練習のポイントを、ぜひ実際に手を動かして確かめてみてください。
Thymeleafは、条件分岐やnull判定だけでなく、繰り返し処理や変数の操作など、便利な機能がたくさんあります。これからも、PleiadesのGradle環境での開発に役立つ知識として、どんどん練習していきましょう!