Thymeleaf unlessとは?条件反転の書き方を学ぼう
新人
「先輩、Thymeleafのunlessって何ですか?ifとどう違うんですか?」
先輩
「unlessは“条件が成り立たない場合に表示する”という逆転のロジックになるんだ。ifの反対だよ。」
新人
「なるほど。具体的にはどう書くんですか?」
先輩
「基本の構文を見てみよう!」
1. Thymeleafのunlessとは?
Thymeleafのunlessは、HTMLテンプレートで「条件が成り立たないとき」に表示したい内容を書くときに使います。これはJavaScriptやJavaのif文の逆で、条件がfalseなら要素を表示する仕組みです。
たとえば、ユーザーがログインしていないときに「ログインしてください」というメッセージを出すときに使うケースが典型です。Pleiades+Gradle環境で作ったSpringプロジェクトで、@Controllerを使って実装していきます。
SEOキーワードとしては「Thymeleaf unless」「条件反転」「初心者向け」「テンプレートエンジン」などを意識すると良いでしょう。
2. unlessの基本構文の書き方
まずは単純な例から理解していきましょう。条件がfalseのときだけ表示する構文は以下のようになります。
<p th:unless="${isLogin}">ログインしてください</p>
この例では、コントローラから渡されたisLoginというboolean変数がfalseの場合に「ログインしてください」が表示されます。
コントローラのサンプルは次の通りです。
@Controller
public class LoginPromptController {
@GetMapping("/prompt-login")
public String showPrompt(Model model) {
boolean isLogin = false; // ログアウト状態
model.addAttribute("isLogin", isLogin);
return "prompt-login";
}
}
上記のようにModelにisLogin変数を渡し、テンプレート側でth:unlessを使って条件反転表示を行います。
基本ポイント
th:unlessは条件がfalseのときだけ要素を描画します。- 条件式は${変数}や比較式も使えます(例:
th:unless="${user == null}")。 - コードをすっきり書きたいときに役立ちます。
3. th:unlessの使い方と例
th:unless は「条件が成り立たないときに要素を表示する」属性です。いわば th:if の逆になります。条件が false のときだけ要素が描画されるため、条件反転のロジックを書くのに便利です。SEOキーワード「Thymeleaf unless」「条件反転」などを意識して活用しましょう。
基本的な書き方は次の通りです。
<p th:unless="${isLogin}">ログインしてください</p>
この例では、isLogin が false のときだけ「ログインしてください」が表示されます。
コントローラ側は以下のようになります:
@Controller
public class PromptController {
@GetMapping("/check-login")
public String checkLogin(Model model) {
boolean isLogin = false;
model.addAttribute("isLogin", isLogin);
return "check-login";
}
}
上記のように Model にフラグを渡し、テンプレートで条件反転表示を行います。
ポイント
th:unlessは条件がfalseの場合のみ描画- 条件式には比較式(
user == nullなど)も使える - 可読性を高めるため、変数名は boolean 型で分かりやすく
4. th:ifとの違いと使い分け
th:if と th:unless は、一見似ていますが、肯定・否定のロジックで用途が異なります。th:if は条件が true で描画、th:unless は false で描画します。使い分けによってコードの意図が読みやすくなります。
ログイン状態に応じてリンクを切り替える例で比較してみましょう。
<p th:if="${isLogin}">ようこそ!</p>
<p th:unless="${isLogin}">ゲストの方へようこそ!</p>
条件式が肯定的なら th:if、否定条件なら th:unless を使うと意図が明確になります。
比較ポイント
th:if:表示したい条件が明確なときth:unless:非表示条件を指定したいとき- 両方を併用することで else 相当のロジックを表現可能
5. unlessを使ったif else風の書き方
Thymeleafでは Java のように else を直接書けませんが、th:if と th:unless を組み合わせて、擬似的な if‑else 構造を作れます。よくある例として「ログイン/ログアウト」ボタンの切り替えがあります。
<div>
<button th:if="${isLogin}">ログアウト</button>
<button th:unless="${isLogin}">ログイン</button>
</div>
さらに複雑な例として、プレミアム会員かどうかで案内文を表示するコードを紹介します:
<div th:if="${isLogin}">
<p>こんにちは、<span th:text="${username}">ユーザー</span>さん!</p>
<p th:unless="${isPremium}">プレミアム会員登録をご検討ください。</p>
</div>
<div th:unless="${isLogin}">
<p>ログインしてコンテンツをご覧ください。</p>
</div>
このように条件を重ねることで、ログイン・未ログイン・会員状態など複数の条件に対応できます。初心者にも扱いやすく、テンプレートの可読性も高まります。
6. unlessを使ったサンプルアプリケーション例
ここでは、実際にth:unlessを使ったサンプルアプリケーションを作ってみましょう。Pleiadesをインストールして、Pleiadesの中でGradleを使用してプロジェクトを作成します。依存関係は、Pleiadesのチェックボックスで必要なものを追加してください。
今回の例は、ログイン状態によって表示するメッセージを切り替えるシンプルなサンプルです。
コントローラのサンプルコード
@Controller
public class SampleController {
@GetMapping("/sample-app")
public String showSample(Model model) {
boolean isLogin = false; // 仮に未ログイン
String username = "ゲスト";
boolean isPremium = false;
model.addAttribute("isLogin", isLogin);
model.addAttribute("username", username);
model.addAttribute("isPremium", isPremium);
return "sample-app";
}
}
テンプレートでは、th:ifとth:unlessを組み合わせて表示を切り替えます。
テンプレートの例
<div th:if="${isLogin}">
<p>ようこそ、<span th:text="${username}">ユーザー</span>さん!</p>
<p th:unless="${isPremium}">プレミアム会員になりませんか?</p>
</div>
<div th:unless="${isLogin}">
<p>ログインするとコンテンツがもっと見られます。</p>
</div>
このように書くことで、ログイン状態や会員種別に応じて表示を分けることができます。特に初心者の方は、変数名を分かりやすくし、条件をシンプルにすると理解しやすいです。
7. 初心者が練習するときのポイント
初心者の方がth:unlessを練習するときに大切なのは、「条件が成り立たないときに何を表示するか」を意識することです。たとえば、isLoginがfalseのときだけ表示する部分を明確にするだけで、テンプレートがすっきり見やすくなります。
練習のコツ
- まずは
th:unless単独で動かすサンプルを作る。 - 慣れてきたら
th:ifと組み合わせて、if else風に条件を切り替える。 - 変数名はわかりやすく。
isLoginやisPremiumなど、true/falseがすぐに分かる名前にすると混乱しにくい。 - 条件が複雑になる場合は、サーバーサイドで変数にまとめておくと、テンプレートが読みやすくなる。
また、開発環境はPleiadesを使い、テンプレートは必ずGradleプロジェクト内で管理すると、Spring Bootのプロジェクト構成が自然に身につきます。@Controllerを使って、ルーティングやモデル渡しの仕組みを学ぶのも大切です。
8. ポイント整理
今回の記事では、Thymeleafのth:unlessについて、基本的な意味や書き方から、th:ifとの違い、if else風の実装方法まで幅広く学びました。条件が成り立たないときだけ表示する仕組みは、Webアプリケーションを作る上で非常に役立ちます。
特に、Pleiades環境でGradleを使い、@Controllerでモデルを扱う方法を身につければ、条件分岐の基本はもちろん、実際のWebアプリ開発にもスムーズに活かせるようになります。初めて学ぶ方でも安心して練習を進めてみてください。
これからも、Thymeleafのif文・unless文を組み合わせて、動的で使いやすいWebページを作っていきましょう!
まとめ
th:unlessの役割と考え方を振り返る
今回の記事では、Thymeleafの th:unless について、基本的な意味から具体的な書き方、
th:if との違い、そして実務を意識した使い分けまでを段階的に解説してきました。
th:unless は「条件が成り立たない場合に表示する」という、いわば条件反転のための属性です。
if文の否定条件を書く代わりに使うことで、テンプレート全体の読みやすさを大きく向上させることができます。
特にSpring MVCとThymeleafを組み合わせたWebアプリ開発では、ログイン状態や会員区分、
入力値の有無といった「trueかfalseか」で判断する場面が数多く登場します。
そのようなときに th:unless を使えば、
「ログインしていない場合だけ表示する」「条件を満たしていない場合だけ案内を出す」
といった意図をコード上で自然に表現できます。
これは初心者だけでなく、チーム開発においても非常に重要なポイントです。
th:ifとの違いと可読性への影響
th:if と th:unless はどちらも条件付きで要素を表示するための属性ですが、
書き分けることでコードの意味が直感的になります。
たとえば「ログインしているときに表示する」のであれば th:if、
「ログインしていないときに表示する」のであれば th:unless を使うと、
テンプレートを読んだ瞬間に意図が伝わります。
否定条件を th:if="${!isLogin}" のように書くこともできますが、
条件が増えてくると否定が重なり、読みづらくなるケースもあります。
そうした場面で th:unless を使うと、条件反転をシンプルに表現でき、
初心者でも理解しやすいテンプレートになります。
可読性を意識した書き方は、後から自分がコードを見返したときにも役立ちます。
まとめとしてのシンプルなサンプル
<div>
<p th:if="${isLogin}">ログイン中です</p>
<p th:unless="${isLogin}">ログインしてください</p>
</div>
この例のように、同じ条件を th:if と th:unless で書き分けることで、
if else に近い構造を分かりやすく表現できます。
ログイン状態やフラグによる画面切り替えはWebアプリ開発の基本なので、
この書き方をしっかり身につけておくと、今後の学習がスムーズになります。
生徒:「th:unlessって、最初は少し分かりにくかったですが、ifの反対だと考えると理解しやすくなりました。」
先生:「その通りだね。条件が成り立たない場合に表示する、と意識すると使いどころが見えてくるよ。」
生徒:「否定条件を書くよりも、unlessを使った方がテンプレートが読みやすく感じました。」
先生:「可読性はとても大事だよ。特にThymeleafは画面を見る人が多いからね。」
生徒:「ifとunlessを組み合わせると、if elseみたいに書けるのも便利ですね。」
先生:「ログイン画面や権限ごとの表示切り替えでは、ほぼ必ず使う考え方だよ。」
生徒:「これで条件分岐の画面表示が怖くなくなりました。次は複数条件にも挑戦したいです。」
先生:「いいね。その調子で少しずつ条件を増やして練習していこう。」