カテゴリ: Thymeleaf 更新日: 2026/01/02

Thymeleafのth:hrefの使い方を全解説。初心者でも完璧に理解できるガイド

Thymeleafのth:hrefの使い方
Thymeleafのth:hrefの使い方

先生と生徒の会話形式で理解しよう

生徒

「ThymeleafでURLを設定するにはどうすればいいですか?」

先生

「Thymeleafではth:href属性を使うことで、HTMLのタグに実行URLを設定できますよ。」

生徒

「実際に使うとどうなるのか教えてください!」

先生

「じゃあ、実際のコードを見ていきましょう。」

1. th:hrefとは?

1. th:hrefとは?
1. th:hrefとは?

Thymeleafのth:hrefは、HTMLのタグに設定するhref属性を サーバー側の値で安全に置き換えるための属性です。テンプレート上では <a th:href="...">と書き、画面に表示される直前(サーバーでのレンダリング時)に 実際のURLへと変換されます。これにより、アプリのコンテキストパス(アプリ配下のベースURL)を自動で考慮しつつ、 手動の文字連結ミスやパス違いを防げます。


<!-- まずは一番やさしい例:トップページに戻るリンク -->
<a th:href="@{/}">トップへ戻る</a>

上の例では、@{/}が「アプリのルート(トップ)」を指します。 本番環境や開発環境でURLの前に付くパスが違っても、th:hrefなら自動で合わせてくれるため、 初心者でも同じテンプレートをそのまま使い回せます。まずは「固定の場所へ戻るリンク」を th:hrefで置き換えるところから始めると理解しやすいでしょう。

2. th:hrefの基本な使い方

2. th:hrefの基本な使い方
2. th:hrefの基本な使い方

まずは「固定の場所へリンクする」一番シンプルなパターンから始めます。 th:hrefの中で@{...}という書き方(URL式)を使うと、 テンプレートを表示する直前にタグのhrefへ安全に差し込まれます。 基本は「アプリ内のパスをそのまま書く」だけです。


<!-- トップ/ホームなど、固定ページへのリンク -->
<a th:href="@{/home}">ホームに戻る</a>

<!-- ルート(トップ)へ戻る -->
<a th:href="@{/}">トップへ</a>

<!-- 階層があるページへ移動 -->
<a th:href="@{/products/list}">商品一覧へ</a>

<!-- ボタン風のリンク(Bootstrap を利用) -->
<a class="btn btn-primary" th:href="@{/contact}" role="button">お問い合わせ</a>

ポイントは次の2つです。①@{...}の中には「アプリ内のパス」をそのまま書く。 ②hrefth:hrefを同時に書かない(th:hrefが最終的な値を決めるため、基本はth:hrefだけにする)。 これだけで、開発環境と本番環境でパスが違っても自動で整えてくれるので、初心者でも迷いにくくなります。 まずはこの形で、固定ページへのリンクをth:hrefに置き換えてみましょう。

3. 変数やパラメータの流入方法

3. 変数やパラメータの流入方法
3. 変数やパラメータの流入方法

th:hrefでは、パラメータや変数をURLに流入することもできます。 以下のコードを使って見てみましょう。


<a th:href="@{/user/{id}(id=${user.id})}">ユーザページ</a>

このコードでは、{id}${user.id}が流入されます。これにより効果的にユーザページのURLを生成できます。

4. th:hrefの実行結果

4. th:hrefの実行結果
4. th:hrefの実行結果

実際に使用した場合の実行結果を以下に表示します。


<a href="/user/123">ユーザページ</a>

これにより、指定したidに対応したURLが生成されます。

5. クエリパラメータ付きURLの生成(検索・一覧で必須のパターン)

5. クエリパラメータ付きURLの生成(検索・一覧で必須のパターン)
5. クエリパラメータ付きURLの生成(検索・一覧で必須のパターン)

初心者がつまずきやすいのが、クエリパラメータの付け方です。th:href@{...}の中でキーと値を指定するだけで、URLエンコードも含めて安全に生成してくれます。 「Thymeleaf」「th:href」「URLパラメータ」「Spring MVC」のキーワードを押さえて、SEOに強い内部リンクを正しく作りましょう。


<a th:href="@{/search(q=${keyword}, page=${page}, sort=${sort})}">検索結果へ</a>

生成例:/search?q=スマホ&page=2&sort=price のように、URLエンコード済みで出力されます。
なお、@{...}はアプリのコンテキストパスも自動で考慮するため、本番と開発でパスが違っても安全です。

6. @を使わずに文字連結で動的リンクを作る(相対/絶対パスのコツ)

6. @を使わずに文字連結で動的リンクを作る(相対/絶対パスのコツ)
6. @を使わずに文字連結で動的リンクを作る(相対/絶対パスのコツ)

学習のために、@を使わず文字連結でリンクを作る方法も理解しておきましょう。 文字列補間(|...|)や+演算子でパスやパラメータを連結できます。 ただしURLエンコードやコンテキストパス付与は自動ではありません。運用では@{...}が推奨です。


<!-- 文字列補間(読みやすくて便利) -->
<a th:href="|/user/${user.id}|">ユーザ詳細へ</a>

<!-- 文字列連結(+ 演算子) -->
<a th:href="${'/user/' + user.id}">ユーザ詳細へ</a>

<!-- クエリ文字列の連結(& は &amp; にする) -->
<a th:href="|/search?q=${keyword}&amp;page=${page}|">検索へ</a>

<!-- 絶対URLを直書きする例(外部サイトへ) -->
<a th:href="${'https://example.com/user/' + user.id}" target="_blank" rel="noopener">外部詳細へ</a>

7. 条件付きリンクとアクセシビリティ(内部リンク最適化のベストプラクティス)

7. 条件付きリンクとアクセシビリティ(内部リンク最適化のベストプラクティス)
7. 条件付きリンクとアクセシビリティ(内部リンク最適化のベストプラクティス)

SEOでは内部リンクの品質が重要です。th:ifth:unlessを使えば、 データが未設定のときに「クリックできないダミーリンク」を避けられます。ユーザ体験(UX)やアクセシビリティの観点でも有効です。


<!-- user が存在する時だけ実リンク、なければテキスト -->
<a th:if="${user != null}" th:href="@{/user/{id}(id=${user.id})}">ユーザ詳細へ</a>
<span th:unless="${user != null}" aria-disabled="true" class="text-muted">ユーザ詳細へ(未選択)</span>

<!-- 在庫なしならボタン風リンクを無効化(視覚的+意味的配慮) -->
<a th:href="@{/cart/add(id=${item.id})}"
   th:attrappend="aria-disabled=${!item.inStock}"
   th:classappend="${!item.inStock} ? ' disabled' : ''"
   role="button">カートに入れる</a>

クリック不可状態を明示し、誤クリックや離脱を防止することで、サイト回遊性コンバージョンの改善にもつながります。

まとめ

まとめ
まとめ

この記事では、Thymeleafにおけるth:hrefの基本的な使い方から応用的な設定まで解説しました。th:hrefを使うことで、サーバーサイドのデータやパラメータをリンクに組み込むことができ、効率的に動的なURLを生成できます。 初心者でも理解しやすいように、サンプルコードとその実行結果を見ながら説明しました。

具体的には、次のポイントを理解していただけたと思います:

  • th:href属性を使うことで、HTMLタグにサーバーサイドのURLやデータを指定できる。
  • 変数やパラメータを組み込むことで、動的なURLの生成が可能。
  • Thymeleafではコンテキストパスを@{}を使って指定することが推奨されている。

以下に簡単なサンプルコードで復習してみましょう。


<a th:href="@{/product/{id}(id=${product.id})}">商品ページへ</a>

上記のコードでは、動的に商品IDをth:hrefに渡し、URLを生成しています。Thymeleafを活用することで、テンプレートエンジンをより柔軟に使うことが可能です。

先生と生徒の振り返り会話

生徒

th:hrefを使うと、動的にURLを設定できるんですね!」

先生

「その通りです。パラメータや変数も渡せるので、複数のユーザーページや商品ページを簡単に生成できます。」

生徒

「それなら、毎回手動でURLを書かなくても済みますね!」

先生

「そうですね。Thymeleafは効率的にテンプレートを作成できるので、ぜひ使いこなしてください。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Thymeleafのth:hrefって何ですか?HTMLのhrefとの違いは?

Thymeleafのth:hrefは、Spring Bootなどのサーバーサイドアプリケーションで動的にURLを生成するための属性です。HTMLのhrefは静的なリンクですが、th:hrefは変数やパラメータを使ってURLを動的に作成できます。

Thymeleafでth:hrefを使ったリンクの基本的な書き方が知りたいです。

基本的には、th:href="@{/home}" のように書きます。@記号はアプリケーションのコンテキストパスを含むURLを生成するための記号で、HTMLのaタグと組み合わせて使用します。
カテゴリの一覧へ
新着記事
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
SpringのBindingResult完全ガイド!初心者でもわかる入力チェックとgetTargetの使い方
Thymeleafのth:data-*属性を使いこなす!初心者向け完全解説
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説