この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2026-05-17 06:14:10

タイトル: テンプレートエンジン

本稿は Spring Framework / Spring Boot で利用するテンプレートエンジンについての記事です。コントローラから渡したモデル値を HTML に埋め込み、ブラウザに返すためのライブラリを扱います。

子ページからテンプレートエンジンを選択してください。

本ページの子ページ

  • Thymeleaf — Spring Boot の標準的な選択肢。HTML として開ける文法

テンプレートエンジンとは

サーバーが計算した値を、決められた構文で HTML テンプレートに埋め込み、最終的な HTML を生成するライブラリです。コントローラからは値だけを渡し、見た目はテンプレート側に閉じ込めることで、ロジックとビューの分離を実現します。

Spring Bootで使える主なテンプレートエンジン

テンプレートエンジン拡張子位置づけ
Thymeleaf.htmlSpring Boot の事実上の標準。HTML として開けるので デザイナとの分業がしやすい
FreeMarker.ftl / .ftlh古くから使われる汎用テンプレート。文法は ${var}
Groovy Templates.tplGroovy ベース。Spring Boot 公式サポート
Mustache.mustache「ロジックレス」を志向。複数言語で同じテンプレートが使える
JSP.jspJSP。Spring Boot では非推奨 (実行可能 jar との相性が悪い)
Velocity.vm古い案件で見かける。Spring Boot 公式サポートからは外れた

選定の観点

  • Spring Boot 新規開発 → Thymeleaf が無難。公式サポートが厚い
  • 静的HTMLとしてプレビューしたい → Thymeleaf (HTML 自体がテンプレートとして成立)
  • 軽量・ロジックを書かせたくない → Mustache
  • 既存資産が JSP / Velocity → そのまま運用するか、段階的に Thymeleaf へ移行
  • SPA + REST API 構成 → テンプレートエンジンは使わず、フロントは Vue/React 等で別管理

典型的な使い方 (Thymeleaf 例)

build.gradle

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

コントローラ

@Controller
public class HelloController {
  @GetMapping("/hello")
  public String hello(Model model) {
    model.addAttribute("name", "Taro");
    return "hello";  // src/main/resources/templates/hello.html
  }
}

テンプレート (templates/hello.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
  <h1 th:text="|Hello, ${name}!|">Hello, World!</h1>
</body>
</html>

注意点

  • テンプレートは src/main/resources/templates/ 配下に置くのが Spring Boot の既定
  • 開発中は spring.thymeleaf.cache=false でホットリロード可能
  • 本番ではキャッシュ有効のままで運用 (上記を true に)
  • テンプレート内でのSQL 構築や重い処理は禁物。ロジックはサービス層へ
  • 外部入力をそのまま出力する場合はXSSエスケープが標準で効いていることを確認 (th:text はエスケープ、th:utext はエスケープなし)

関連