Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
生徒
「Thymeleafでテンプレートを整理したい場合に便利な方法ってありますか?」
先生
「はい、Thymeleafにはth:blockというタグがあります。これを使うと、テンプレートの一部をグループ化して整理することができます。」
生徒
「具体的にはどんな風に使うんですか?」
先生
「例えば、条件付き表示や動的なコンテンツの挿入時に役立ちます。順を追って説明していきますね!」
1. th:blockとは?
「1. th:blockとは?」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
th:blockは、Thymeleafで使える「画面には残らないラッパー要素」です。テンプレート上ではタグとして書きますが、最終的なHTMLには出力されません。そのため、レイアウトを崩さずに一塊の処理をまとめたり、条件分岐や一時的な値の受け渡しをわかりやすく整理できます。静的なHTMLに余計な
使いどころは、特定のブロックをまとめて表示・非表示にしたいとき、複数要素をひとまとめにして扱いたいとき、メッセージや見出しをセットで切り替えたいときなどです。初心者でも「見た目は変えずに制御だけ行う入れ物」と捉えると理解しやすいでしょう。
<th:block>
<h3 class="fw-bold">お知らせ</h3>
<p>このエリアはひとかたまりとして扱えます。</p>
</th:block>
上の例では、テンプレート側ではth:blockでグルーピングしていますが、出力されるHTMLにはth:block自体は現れません。結果として、余計な親タグを増やさずに「見出し+本文」をひとまとまりとして扱えます。
<th:block th:if="${showNotice}">
<h3 class="fw-bold">ようこそ</h3>
<p>ログイン中のおすすめ情報を表示します。</p>
</th:block>
こちらはshowNoticeがtrueのときだけ、見出しと本文をまとめて表示します。th:blockは最終HTMLに残らないため、条件付き表示を増やしてもマークアップが肥大化しにくく、テンプレートの意図(どこからどこまでを制御したいか)も読み取りやすくなります。
2. th:blockの基本的な使い方
th:blockは「最終HTMLに残らない入れ物」です。ページの見た目を変えずに、テンプレート上だけでまとまりを作ったり、条件に応じてそのまとまり全体を出し分けできます。まずは一番よく使う書き方である条件付き表示(th:if)から確認しましょう。
<th:block th:if="${isAdmin}">
<h3 class="fw-bold">管理者メニュー</h3>
<p>ユーザー管理・レポート出力などの操作が実行できます。</p>
</th:block>
ここではisAdminがtrueのときだけ、見出しと説明文をまとめて表示します。th:block自体は出力されないため、余計な親タグは増えません。複数要素を一括で制御できるのがポイントです。
反対に「条件に合わないときだけ表示」したい場合はth:unlessが便利です。簡単な“疑似else”として覚えておくと迷いません。
<th:block th:unless="${isAdmin}">
<h3 class="fw-bold">一般ユーザー向け</h3>
<p>表示できる機能は制限されています。詳細はヘルプをご確認ください。</p>
</th:block>
なお、th:blockの中には通常のHTMLを自由に書けます。ボタンや表、説明文をセットにしておけば、「一式を出す/出さない」を短い記述で切り替え可能です。テンプレートの可読性が上がり、あとから見返したときにも意図がつかみやすくなります。
小さなコツとして、条件に関係する変数名は意味が伝わるものにしましょう(例:isAdmin、isLoggedIn、showNotice)。この習慣だけでも、チーム開発でのレビューや将来の修正がぐっと楽になります。
3. 複数の要素をまとめる
th:blockは、見出し・説明文・ボタンなど複数の要素を「ひとかたまり」として扱いたいときに便利です。最終HTMLにth:block自体は残らないため、余計な親
<th:block th:if="${showContent}">
<h1 class="fw-bold">ようこそ、ユーザー様!</h1>
<p>このページでは、アカウント情報とおすすめ機能をまとめて確認できます。</p>
<ul class="mb-2">
<li>プロフィールの編集</li>
<li>通知設定の確認</li>
<li>最近のアクティビティ</li>
</ul>
<a href="/settings" class="btn btn-primary">設定を開く</a>
</th:block>
上の例では、showContentがtrueの場合だけ、見出しからボタンまでをまとめて表示します。ひとまとまりを制御できるので、テンプレートの意図(どこまでが一式か)が明確になり、後から読む人にも親切です。
もう一つ、複数行を生成する場面でもラッパーを増やさずに書けます。下記はメッセージの配列を行ごとに出力する最小サンプルです。
<th:block th:each="msg : ${messages}">
<p class="text-muted" th:text="${msg}">メッセージ</p>
</th:block>
th:blockで反復すると、余計なulやdivを作らずに必要な要素だけが並びます。表示のまとまりを追加しやすく、余分なマークアップを増やさない点が実務での使いやすさにつながります。
4. th:blockを使った変数の定義
「4. th:blockを使った変数の定義」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
th:blockは変数の定義にも活用できます。一時変数を定義して、ブロック内で使用する方法の例を以下に示します。
<th:block th:with="discountPrice=${price * 0.9}">
<p>元の価格: <span th:text="${price}"></span>円</p>
<p>割引後の価格: <span th:text="${discountPrice}"></span>円</p>
</th:block>
この例では、discountPriceという一時変数をth:withを使って定義し、ブロック内で利用しています。
変数を利用することで、計算やデータ加工を効率化できます。
5. th:blockを使う際の注意点
th:blockを使う際には、以下の点に注意してください。
th:blockそのものはHTMLの出力に影響を与えませんが、他の要素と適切に組み合わせて使用しましょう。- 条件付き処理が多すぎると、テンプレートの可読性が低下する可能性があります。
- 複雑なロジックはサーバーサイドで処理し、テンプレート内では必要最低限の制御を行うようにしましょう。
これらのポイントを守ることで、th:blockをより効果的に活用できます。
6. th:blockとth:eachの組み合わせ
th:blockは繰り返し処理を行うth:eachと組み合わせることで、テンプレートの構造を整理しながらデータを表示できます。特に、複数の要素をまとめて繰り返し出力したい場合に便利です。
<th:block th:each="user : ${userList}">
<h3 th:text="${user.name}"></h3>
<p>メールアドレス: <span th:text="${user.email}"></span></p>
</th:block>
この例では、userListの中にあるユーザー情報を順番に取り出して表示しています。
th:blockを使うことで、見出しとメール情報をセットで繰り返し表示できます。
通常のHTMLタグを使っても繰り返し処理は可能ですが、th:blockを使うことで余計なタグを出力せずにテンプレートを整理できます。特にカード表示やリスト表示など、複数の要素をまとめてループしたい場合に役立ちます。
7. th:blockとth:replace・th:insertの違い
「7. th:blockとth:replace・th:insertの違い」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。
Thymeleafではテンプレートの再利用を行う際に、th:replaceやth:insertといった属性もよく使われます。これらは別のテンプレートを読み込むための機能で、th:blockとは用途が少し異なります。
<th:block th:replace="fragments/header :: header"></th:block>
この例では、fragments/headerテンプレート内のheaderフラグメントを読み込んでいます。
th:blockを使うことで、不要なdivなどを追加せずにテンプレートを差し替えることができます。
簡単にまとめると、th:blockは「テンプレート内のグループ化」、th:replaceやth:insertは「テンプレートの再利用」に使われます。これらを組み合わせることで、大規模な画面でも整理された構造を保つことができます。
8. th:blockを使う実践的なテンプレート整理テクニック
実際のWebアプリケーションでは、th:blockを使ってテンプレートの構造を整理することで、コードの可読性と保守性を高めることができます。特に「ログイン状態による表示切り替え」や「機能ごとの表示管理」で活躍します。
<th:block th:if="${isLoggedIn}">
<p>ログイン中: <span th:text="${username}"></span></p>
<a href="/logout">ログアウト</a>
</th:block>
<th:block th:unless="${isLoggedIn}">
<a href="/login">ログイン</a>
</th:block>
上記の例では、ログイン状態に応じて表示する内容を切り替えています。th:blockを使うことで、ログイン中の情報表示とログインボタンの表示をシンプルに分けることができます。
このように、th:blockはテンプレートのロジックを整理するための重要なテクニックです。画面の構造を崩さずに条件分岐や表示制御を行えるため、Thymeleafを使った開発では覚えておきたい便利な機能と言えるでしょう。
まとめ
本記事では、Thymeleafのth:blockについて学びました。この特殊なタグを使うことで、HTMLテンプレートを整理しながら、条件付き表示や動的な変数の定義を簡単に実現できます。
th:blockそのものはHTML構造に影響を与えないため、テンプレートのコードを分かりやすく管理するために非常に役立ちます。
特に、条件による要素の表示・非表示や、複数のHTML要素をまとめて制御する場合には欠かせない機能です。また、th:withと組み合わせることで、一時的な変数を定義して効率的に計算結果を再利用することも可能です。
以下に、今回学んだth:blockの特徴を活かしたサンプルコードを再掲します。
<th:block th:if="${userLoggedIn}">
<h1>こんにちは、<span th:text="${userName}"></span>さん!</h1>
<p>あなたの最新のお知らせをご覧ください。</p>
</th:block>
このコードは、userLoggedInがtrueのときにのみ、ユーザー名とお知らせが表示される例です。これにより、コードを簡潔に保ちながら柔軟なテンプレートを作成できます。
th:blockは単なるテンプレート管理のツール以上に、Thymeleafのパワフルな機能を引き出す重要な要素です。ぜひプロジェクトに取り入れてみてください。
生徒
「th:blockを使うとテンプレートがすっきりして、条件付き表示がとても簡単になりますね!」
先生
「その通りです。特に条件付きで表示を切り替える場面では、th:blockが非常に便利ですよね。」
生徒
「さらに、一時変数を使えば計算結果を何度も書く必要がなくなるので助かります。」
先生
「そうですね。一時変数を使うとコードの読みやすさも大幅に向上します。ただし、複雑なロジックはサーバーサイドで処理することも大事です。」
生徒
「分かりました!サーバーサイドとテンプレートの役割分担を意識して活用してみます!」
この記事を読んだ人からの質問
「この記事を読んだ人からの質問」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。