カテゴリ: Thymeleaf 更新日: 2025/12/07

Thymeleaf JavaScript外部ファイルの読み込み方を完全ガイド!初心者でもわかる基本と手順

Thymeleaf JavaScript外部ファイルの読み込み方
Thymeleaf JavaScript外部ファイルの読み込み方

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

新人

「先輩、ThymeleafでJavaScriptを外部ファイルとして読み込む方法を教えてもらえますか?」

先輩

「もちろんだよ。外部JavaScriptファイルを読み込む方法は、画面の管理をきれいに保つのにとても大事なんだ。pleiades環境でも、Spring Bootを使わずにGradleプロジェクトで簡単に設定できるよ。」

新人

「外部ファイルの読み込みって、どうやって書くんですか?」

先輩

「それじゃあ、まず外部JavaScriptファイルの役割と基本的な使い方から一緒に見ていこう!」

1. JavaScript外部ファイルの役割と基本的な使い方

1. JavaScript外部ファイルの役割と基本的な使い方
1. JavaScript外部ファイルの役割と基本的な使い方

JavaScript外部ファイルは、HTMLファイル内に直接記述する代わりに、別のファイルとして管理する方法です。これにより、HTMLとJavaScriptのコードが分かれて見やすくなり、メンテナンス性が高まります。さらに、複数ページで同じスクリプトを使い回せるので、Webアプリケーション開発でも役立ちます。

基本的には<script src="ファイルパス"></script>を使って読み込みます。JavaScriptの拡張子は.jsです。

2. Thymeleafで外部JavaScriptファイルを読み込む方法

2. Thymeleafで外部JavaScriptファイルを読み込む方法
2. Thymeleafで外部JavaScriptファイルを読み込む方法

Spring MVCの@Controllerでモデルに値を設定して、Thymeleafで外部ファイルを読み込むときも、基本の<script src="...">タグを使います。Thymeleafのth:src属性を使うと、プロジェクト内のパスを動的に設定できるので便利です。


@Controller
public class ScriptController {
    @GetMapping("/script-demo")
    public String scriptDemo(Model model) {
        model.addAttribute("message", "外部ファイルからこんにちは!");
        return "script-demo";
    }
}

次に、ThymeleafのHTMLテンプレートです。外部JavaScriptファイルとしてjs/main.jsを読み込む例を見てみましょう。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf外部JS読み込みデモ</title>
    <script th:src="@{/js/main.js}"></script>
</head>
<body>
    <h2>外部JavaScriptファイルの読み込みデモ</h2>
    <button id="btn">クリックして処理実行</button>
</body>
</html>

上記のth:src="@{/js/main.js}"がポイントです。Thymeleafの@{}構文を使うと、アプリケーションのルートからのパスを解決できます。これで、src/main/resources/static/js/main.jsに置いたmain.jsが読み込まれます。

3. 外部ファイルの配置場所とHTMLでの読み込み方法

3. 外部ファイルの配置場所とHTMLでの読み込み方法
3. 外部ファイルの配置場所とHTMLでの読み込み方法

pleiades環境+Gradleのプロジェクトでは、外部JavaScriptファイルをsrc/main/resources/static/jsフォルダに置くのが一般的です。このstaticフォルダ配下のjsフォルダに配置すると、Webサーバーが静的リソースとして認識してくれます。

たとえば、以下のようにプロジェクト構成を整えます。


src
 └── main
     ├── java
     │    └── com.example.controller.ScriptController
     ├── resources
     │    ├── static
     │    │    └── js
     │    │         └── main.js
     │    └── templates
     │         └── script-demo.html

外部JavaScriptファイルmain.jsには、クリックイベントでModelから渡されたメッセージを表示する処理を書けます。例として、main.jsの内容です。


document.addEventListener("DOMContentLoaded", function(){
  var btn = document.getElementById("btn");
  btn.addEventListener("click", function(){
    alert("外部ファイルのスクリプトが動きました!");
  });
});

これで、HTML側では<script th:src="@{/js/main.js}">を記述するだけで外部スクリプトが実行されるようになります。Modelから渡された値を使いたいときは、別のセクションで解説しますが、th:inline="javascript"を併用して変数を受け渡す方法も便利です。

4. JavaScript外部ファイルでThymeleafの値を利用する方法

4. JavaScript外部ファイルでThymeleafの値を利用する方法
4. JavaScript外部ファイルでThymeleafの値を利用する方法

外部JavaScriptファイルでは、Thymeleafのサーバーサイド変数を直接使えません。そのため、HTML内でth:inline="javascript"を使い、JavaScriptの変数として渡す方法が有効です。例えば、コントローラからユーザー名を渡すケースを見ていきましょう。


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

次に、HTMLテンプレートで外部JavaScriptファイルと連携する例です。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>ユーザー情報デモ</title>
    <script th:src="@{/js/user.js}"></script>
    <script th:inline="javascript">
        var username = /*[[${username}]]*/ "ゲスト";
    </script>
</head>
<body>
    <h2>ユーザー情報ページ</h2>
    <button id="showUser">ユーザー名を表示</button>
</body>
</html>

そして、外部JavaScriptファイルuser.jsの内容です。


document.addEventListener("DOMContentLoaded", function(){
  var btn = document.getElementById("showUser");
  btn.addEventListener("click", function(){
    alert("ユーザー名:" + username);
  });
});

このようにth:inline="javascript"で変数にサーバーサイドの値を代入してから、外部ファイルでその変数を使うと安全にデータを扱えます。

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

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

外部JavaScriptファイルとThymeleafの連携で初心者がつまずきやすいポイントを紹介します。

外部ファイルが読み込まれない

静的リソースの配置パスが正しくないと、外部JavaScriptファイルが読み込まれません。Gradle+pleiades環境では、必ずsrc/main/resources/static/jsにファイルを置きましょう。

サーバーサイドの変数がundefinedになる

サーバー側の変数を外部ファイルで直接呼び出そうとすると、undefinedエラーになります。これは、外部ファイル内ではサーバーの値を認識できないためです。必ずth:inline="javascript"でHTML内のJavaScript変数に代入してから、外部ファイルで利用しましょう。

JavaScriptの実行タイミングに注意

JavaScriptの実行タイミングによっては、HTML内の変数がまだ読み込まれていないことがあります。外部ファイルではDOMContentLoadedイベントなどで読み込み完了後に実行する書き方を心がけましょう。

6. 外部ファイルとThymeleafのスコープ管理の注意点

6. 外部ファイルとThymeleafのスコープ管理の注意点
6. 外部ファイルとThymeleafのスコープ管理の注意点

外部JavaScriptファイルを活用するときは、スコープ(変数の有効範囲)に注意が必要です。特に、複数のJavaScriptファイルやHTML内のスクリプトで同じ変数名を使うと、思わぬバグが発生することがあります。

グローバル変数の衝突を避ける

外部JavaScriptファイルの中で変数をグローバルに宣言すると、ほかのスクリプトでも上書きされる可能性があります。これを避けるには、関数内で変数を宣言するか、IIFE(即時関数)でスコープを限定します。


(function(){
  var privateVar = "プライベートデータ";
  window.showPrivate = function(){
    console.log(privateVar);
  };
})();

この方法なら、privateVarは外部から直接アクセスできません。必要な部分だけをwindowオブジェクトに公開します。

サーバー変数の安全な取り扱い

サーバーサイドから渡された値をJavaScriptで扱うときは、HTMLエスケープやエンコードに注意しましょう。特にユーザー入力が含まれる場合は、スクリプトインジェクションのリスクがあります。Thymeleafのth:inline="javascript"を正しく使えば自動的に安全な形で埋め込まれますが、基本的な対策を理解しておくことが大切です。

外部ファイルの可読性を高める

外部JavaScriptファイルは、なるべく単機能に絞り、読みやすいコメントを残すことも大切です。可読性の高いコードは、保守や機能追加のときに役立ちます。

7. セキュリティ面での注意点と安全な外部JavaScriptファイルの活用法

7. セキュリティ面での注意点と安全な外部JavaScriptファイルの活用法
7. セキュリティ面での注意点と安全な外部JavaScriptファイルの活用法

外部JavaScriptファイルを使う際には、セキュリティ面の配慮がとても大切です。特にクロスサイトスクリプティング(XSS)などのリスクを避けるために、Thymeleafのth:inline="javascript"を活用してサーバー側の値を安全に埋め込むようにしましょう。

HTMLエスケープを活用しよう

Thymeleafでは、th:textth:inline="javascript"を使うと、サーバー側の値を自動でエスケープしてくれます。これにより、HTMLやJavaScriptの構文エラーを防ぎ、悪意あるスクリプトの実行を防止できます。

ユーザー入力には特に注意

外部ファイルでユーザー入力を扱うときは、サーバー側でも入力値をしっかり検証し、エスケープすることが重要です。th:inline="javascript"を使えば、ユーザー入力の埋め込みも安全に行えます。

外部ファイルでの関数や変数の扱い方

複雑な処理を外部ファイルで行うときは、グローバル変数の使用を避け、即時関数(IIFE)を使ってスコープを限定しましょう。安全な外部ファイルの活用には、コードの管理方法も重要です。

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

8. まとめポイントと活用のコツ
8. まとめポイントと活用のコツ
  • 外部JavaScriptファイルを使うとHTMLとJavaScriptを分離でき、保守性が向上します。
  • Thymeleafのth:src@{}構文を使うことで、プロジェクト内のファイルを動的に読み込めます。
  • サーバー側の変数を外部ファイルで使うときは、th:inline="javascript"でHTML内の変数に代入してから使うと安全です。
  • セキュリティ面では、必ずHTMLエスケープを意識し、外部ファイルに書いたコードのテストも忘れずに行いましょう。
  • 即時関数(IIFE)やモジュールパターンを使うと、コードのスコープ管理がしやすくなります。

これらのポイントを意識することで、外部JavaScriptファイルをより安全かつ効果的に活用できます。実際に手を動かして試すことで、スムーズに理解が深まります。

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

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

最後に、さらに一歩進んだ活用方法や学び方のポイントをまとめます。

小さな単位でスクリプトをまとめる

外部JavaScriptファイルは、複雑な処理を分割して、機能ごとにファイルを分けると保守がしやすくなります。大きなファイルに一気に書くのではなく、必要な部分ごとに管理しましょう。

pleiadesでの開発環境の活かし方

pleiades環境+Gradleプロジェクトでは、静的リソース(src/main/resources/static)をすぐに変更してブラウザで確認できます。修正をすぐに試すことで、理解が深まります。

コードレビューとリファクタリング

外部ファイルの内容も、チーム開発ならコードレビューを行いましょう。冗長な記述や命名の見直しをすることで、将来的なバグを減らせます。

Thymeleaf公式ドキュメントの活用

Thymeleafの公式ドキュメントには、th:srcth:inlineの詳しい使い方が解説されています。公式サイトや書籍を参考に、さらに理解を深めるのもおすすめです。

外部JavaScriptファイルの読み込みは、シンプルなHTMLページでも、動的な画面制御を行う大切な仕組みです。ぜひ実際に手を動かしながら学び、経験を積んでみてください。

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

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

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

ThymeleafでJavaScriptを外部ファイルとして読み込む理由は何ですか?

ThymeleafでJavaScriptを外部ファイルとして読み込む理由は、HTMLファイルとスクリプトを分離することで保守性が向上し、複数ページで同じ処理を再利用できるためです。外部ファイル化することでThymeleafテンプレートが見やすくなり、Webアプリ開発で効率的な管理ができます。
コメント
コメント投稿は、ログインしてください

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

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
New2
Thymeleaf
ThymeleafでJavaScriptコメントを正しく書こう!初心者向け徹底解説
New3
SpringのDB操作
Spring Boot + MySQLでCRUDアプリを作ろう!初心者向けにデータベース操作を完全解説
New4
Springの基本
@SpringBootApplicationの仕組みと役割を徹底解説!初心者でもわかるSpring Bootの基本
人気記事
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の基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.6
Java&Spring記事人気No6
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み
No.7
Java&Spring記事人気No7
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.8
Java&Spring記事人気No8
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方