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

Thymeleaf JavaScriptで変数を扱う方法を完全ガイド!初心者でもわかる基本と活用

Thymeleaf JavaScriptで変数を扱う方法
Thymeleaf JavaScriptで変数を扱う方法

新人と先輩の会話形式で理解しよう

新人

「先輩、Thymeleafを使ってJavaScriptで変数を扱う方法を知りたいです!」

先輩

「いいね。Thymeleafではサーバーサイドの値をJavaScriptに渡す方法があるんだ。Gradleプロジェクトでも同じようにできるから、順番に説明するね。」

新人

「サーバーサイドの変数をJavaScriptで使うって、ちょっと難しそうですけど大丈夫ですか?」

先輩

「大丈夫だよ。基本から丁寧に説明していくから、安心して!」

1. JavaScriptの変数の基本とThymeleafでの役割

1. JavaScriptの変数の基本とThymeleafでの役割
1. JavaScriptの変数の基本とThymeleafでの役割

まずはJavaScriptの変数の基本を簡単におさらいしておこう。JavaScriptではvarletconstを使って変数を宣言できるんだ。例えば、下のように書けるよ。


<script>
  let message = "こんにちは!";
  const userName = "花子";
  var age = 25;
</script>

このようにして変数に値を入れておくと、JavaScriptの処理の中で自由に使えるようになるよ。

次に、Thymeleafを使うと、サーバーサイドの変数をHTMLに埋め込めるんだ。Spring MVCで@Controllerを使ったプロジェクトで、Modelにセットした値をThymeleafでHTMLに渡せるよ。pleiades環境+Gradleでも同じ仕組みで使えるから安心だね。

2. Thymeleafのサーバーサイド変数をJavaScriptに埋め込む基本

2. Thymeleafのサーバーサイド変数をJavaScriptに埋め込む基本
2. Thymeleafのサーバーサイド変数をJavaScriptに埋め込む基本

サーバーサイドの変数をJavaScriptに埋め込むには、Thymeleafの[[${変数}]]構文を活用するよ。ただし、HTML内のJavaScriptで使うときは、th:inline="javascript"を忘れずに書くのがポイントだ。

例として、サーバーから「メッセージ」という文字列をJavaScriptに渡すサンプルコードを紹介するね。

コントローラクラス


@Controller
public class MessageController {
    @GetMapping("/show-message")
    public String showMessage(Model model) {
        model.addAttribute("message", "サーバーからのメッセージです!");
        return "show-message";
    }
}

HTMLテンプレート


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>変数の埋め込みデモ</title>
  <script th:inline="javascript">
    let serverMessage = /*[[${message}]]*/ "デフォルトメッセージ";
  </script>
</head>
<body>
  <h2>ThymeleafからJavaScriptへ変数渡し</h2>
  <button onclick="showServerMessage()">メッセージ表示</button>
  <script>
    function showServerMessage(){
      alert(serverMessage);
    }
  </script>
</body>
</html>

この例では、サーバーサイドのmessageserverMessageというJavaScriptの変数に埋め込んでいるんだ。th:inline="javascript"のおかげで、サーバーの値が自動的にエスケープされて安全にJavaScriptで使えるようになるよ。

ボタンをクリックすると、サーバーから渡された「サーバーからのメッセージです!」がアラートで表示される仕組みなんだ。

3. JavaScript inline機能とth:inlineの役割

3. JavaScript inline機能とth:inlineの役割
3. JavaScript inline機能とth:inlineの役割

Thymeleafでサーバーサイドの変数をJavaScriptに渡すとき、重要な役割を果たすのがth:inline="javascript"です。この属性を使うことで、サーバーサイドの値を安全にJavaScriptに埋め込むことができます。

なぜこれが大事かというと、サーバーサイドの値にはユーザー入力などが含まれることがあります。そのままJavaScriptに埋め込むと、スクリプトエラーやセキュリティリスクになることがあるんだ。Thymeleafのth:inlineを使うと、自動的にエスケープしてくれるから安心なんだよ。

例えば、次のようにHTMLに直接埋め込むと問題が起こる可能性があるよ。


<script>
  let userInput = "${message}";
</script>

この書き方だと、サーバー側で「"(ダブルクォーテーション)」などが含まれていると、JavaScriptで正しく扱えなくなることがあるんだ。

一方、th:inline="javascript"を使えば、サーバー側の値が安全にJavaScriptの変数にセットされるよ。

4. サンプルコード:サーバーの値をJavaScript変数に渡す例

4. サンプルコード:サーバーの値をJavaScript変数に渡す例
4. サンプルコード:サーバーの値をJavaScript変数に渡す例

それでは実際に、サーバーサイドの値をJavaScriptの変数に渡す具体的な例を見てみよう。ここでは、コントローラでユーザー名を渡して、それをJavaScriptのアラートで表示する例を紹介するね。

コントローラクラス


@Controller
public class UserController {
    @GetMapping("/user-info")
    public String userInfo(Model model) {
        model.addAttribute("username", "田中太郎");
        return "user-info";
    }
}

HTMLテンプレート


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>ユーザー情報表示</title>
  <script th:inline="javascript">
    let username = /*[[${username}]]*/ "ゲスト";
  </script>
</head>
<body>
  <h2>ユーザー情報を表示するデモ</h2>
  <button onclick="showUserName()">ユーザー名を表示</button>
  <script>
    function showUserName(){
      alert("ようこそ、" + username + "さん!");
    }
  </script>
</body>
</html>

この例では、model.addAttribute("username", "田中太郎")でサーバーサイドにセットされたユーザー名が、JavaScriptのusername変数に埋め込まれているんだ。th:inline="javascript"のおかげで、値の中に記号や空白があっても安全に扱えるようになっているよ。

5. よくあるエラーとその解決方法

5. よくあるエラーとその解決方法
5. よくあるエラーとその解決方法

ここでは、初心者がThymeleafでJavaScriptに変数を渡すときによくあるエラーと、その対策を解説するね。

サーバーの値がうまく渡されない

サーバー側でmodel.addAttributeを設定していないと、HTMLではデフォルトの値が表示されてしまうことがあるんだ。必ずコントローラで値を渡しているか確認しよう。

スクリプトエラーが発生する

HTML内のJavaScriptにサーバーの値を埋め込むとき、引用符や特殊文字がそのまま入ると構文エラーが起きることがあるよ。これを防ぐには、必ずth:inline="javascript"を使うことだね。

文字化けや日本語の表示がおかしい

サーバー側の文字コードやHTMLの<meta charset="UTF-8">が正しく設定されていないと、日本語が文字化けすることがあるよ。必ずHTMLにcharset="UTF-8"を入れて、ThymeleafテンプレートのファイルもUTF-8で保存しておこう。

これらのポイントを押さえれば、Thymeleafでサーバーの変数をJavaScriptに安全に渡せるようになるよ。次のセクションでは、さらに実践的なコツや注意点を解説していくね。

6. セキュリティ面の注意点と安全な変数の扱い方

6. セキュリティ面の注意点と安全な変数の扱い方
6. セキュリティ面の注意点と安全な変数の扱い方

Thymeleafでサーバーサイドの値をJavaScriptに渡すとき、特に大切なのがセキュリティ面の注意です。なぜなら、サーバーサイドの値にはユーザーが入力したデータが含まれることがあり、これをそのままJavaScriptに埋め込むと、XSS(クロスサイトスクリプティング)のリスクが出てくるんだ。

そこで活躍するのがth:inline="javascript"の自動エスケープ機能です。これを使うことで、サーバーサイドの値が正しくエスケープされて、スクリプトとして安全に扱えるようになります。

例えば、ユーザーが入力欄に<script>alert("攻撃");</script>と入れたとしても、Thymeleafはこれを文字列として扱い、JavaScriptの変数に埋め込むときに問題が起きないようにしてくれます。

以下に、セキュリティを意識したサンプルコードを示すね。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>安全な変数の扱い方</title>
  <script th:inline="javascript">
    let safeInput = /*[[${userInput}]]*/ "デフォルト入力";
  </script>
</head>
<body>
  <h2>サーバーから受け取った安全なデータ表示</h2>
  <button onclick="showSafeInput()">入力内容を表示</button>
  <script>
    function showSafeInput(){
      alert("入力内容: " + safeInput);
    }
  </script>
</body>
</html>

このように、th:inline="javascript"を常に使うことが、サーバーサイドの変数をJavaScriptに渡すときの基本的なセキュリティ対策なんだ。

7. まとめポイントと活用のコツ

7. まとめポイントと活用のコツ
7. まとめポイントと活用のコツ

ここまでThymeleafでサーバーサイドの変数をJavaScriptに渡す方法を見てきたね。改めてポイントを整理すると:

  • サーバーサイドの変数はmodel.addAttributeでセットしておく
  • JavaScriptに変数を渡すときは必ずth:inline="javascript"を使う
  • 文字化けを防ぐためにcharset="UTF-8"を忘れない
  • 変数名はできるだけ意味がわかる名前にする

この基本を守るだけでも、開発中のトラブルが大幅に減るよ。特に初心者は「サーバーサイドの値をHTMLに埋め込むときはth:inlineを必ず使う」という意識を持とう。

さらに、複雑なデータを扱うときは、サーバーサイドでMapやListをJSONに変換して渡す方法も役立つよ。ThymeleafはJSON化もサポートしているから、安心して使えるね。

8. 実践的なアドバイスと今後の学び方

8. 実践的なアドバイスと今後の学び方
8. 実践的なアドバイスと今後の学び方

実際の開発では、サーバーサイドの変数をJavaScriptに渡す場面はとても多いよ。例えば、ログイン中のユーザー名を表示したり、ユーザーの入力履歴を動的に扱ったりするシーンだね。

ここで大事なのは「自分で書いたコードを必ずテストすること」。JavaScriptのアラートなどを使って、サーバーから渡された値が正しく表示されるかを確認しておくと安心だよ。

そして、慣れてきたら、複雑なオブジェクトの扱いや、JavaScriptの関数に複数の引数を渡す方法も試してみよう。たとえば、次のような例だね。


<script th:inline="javascript">
  let userInfo = /*[[${user}]]*/ {};
</script>

この書き方なら、サーバーサイドのMapListをJavaScriptでオブジェクトとして扱えるよ。クリックイベントで複数の情報をまとめて処理するようなケースでとても便利だね。

最後に、Spring MVCとThymeleafの連携をさらに深く学ぶためには、Spring公式ドキュメントや実際のサンプルプロジェクトを手元で試すことがおすすめだよ。自分の手を動かしながら、いろいろなパターンを試すうちに、JavaScriptとThymeleafの連携が自然に身についてくるはずだ。

これからも、JavaのWebアプリケーション開発をもっと楽しく、もっとスムーズに進めていこう!

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

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

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

ThymeleafでJavaScriptの変数を使うにはどうすればいいですか?

Thymeleafでは、サーバーサイドの変数をJavaScriptに渡すことで、クライアント側でその値を利用することができます。JavaScript内でThymeleafの構文[[${変数名}]]を使い、scriptタグにth:inline="javascript"を付けることで、変数が正しく埋め込まれ、安全に使用できます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
SpringのWeb開発(Spring MVC)
ViewResolverの設定と使い方を完全ガイド!初心者でもわかるSpring MVCのビュー解決
New2
Thymeleaf
Thymeleaf th属性の種類まとめ!初心者向けに解説
New3
Thymeleaf
初心者向けにThymeleaf 公式ドキュメントの活用法とおすすめ情報
New4
Spring認証(Spring Security)
ユーザー認証・認可ログの種類を完全解説!Spring Securityで理解するログの基本
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.4
Java&Spring記事人気No4
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.5
Java&Spring記事人気No5
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.6
Java&Spring記事人気No6
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.7
Java&Spring記事人気No7
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.8
Java&Spring記事人気No8
SpringのDB操作
@Queryを使ったカスタムクエリの作成を完全解説!Spring Data JPAでの使い方と基礎知識