カテゴリ: Play Framework 更新日: 2026/01/30

Play Frameworkで変数をビューに渡す方法を完全ガイド!Twirlテンプレートの使い方

変数をビューに渡す方法
変数をビューに渡す方法

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

生徒

「Play Frameworkで作ったプログラムの中で計算した結果を、ブラウザの画面に表示したいのですが、どうすればいいですか?」

先生

「それには、コントローラで作った『変数』を『ビュー』という画面担当のファイルに渡してあげる必要があります。Play FrameworkではTwirl(トワール)というテンプレートエンジンを使って、とても簡単に実現できますよ。」

生徒

「変数を受け渡すための特別な決まりがあるんですか?」

先生

「はい、テンプレートの先頭で『どんなデータを受け取るか』を宣言するのがポイントです。具体的なやり方を一緒に見ていきましょう!」

1. 変数をビューに渡すとは?

1. 変数をビューに渡すとは?
1. 変数をビューに渡すとは?

Webアプリケーションの開発では、プログラム(Java)側で処理したデータ(ユーザー名、合計金額、最新のニュースなど)を、最終的にユーザーが目にする画面(HTML)に組み込む必要があります。これを変数の受け渡しと呼びます。

Play Frameworkでは、この橋渡しを非常に厳格、かつ安全に行う仕組みが備わっています。Java側からビューへデータを「引数」として渡すことで、動的なWebページが完成します。MVCモデルにおける「C(Controller)」から「V(View)」へのデータの流れを理解することが、Webアプリ開発の第一歩です。

2. ビュー側での受け取り宣言(パラメータ定義)

2. ビュー側での受け取り宣言(パラメータ定義)
2. ビュー側での受け取り宣言(パラメータ定義)

Twirlテンプレート(拡張子が .scala.html のファイル)で変数を受け取るには、ファイルの一番最初の行に「どんな名前で、どんな種類のデータを受け取るか」を記述しなければなりません。これを「パラメータ定義」と呼びます。

書き方は非常にシンプルで、@(名前: 型) のように記述します。例えば、文字列を受け取りたい場合は @(message: String) となります。この宣言を忘れると、Java側からデータを送っても「そんな変数は知らないよ」というエラーになってしまいます。

3. 文字列をビューに渡す最小構成のサンプル

3. 文字列をビューに渡す最小構成のサンプル
3. 文字列をビューに渡す最小構成のサンプル

まずは最も基本となる、一つの文字列を画面に表示させる例を見てみましょう。最初にビューファイルを作成します。


@(userName: String)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>挨拶ページ</title>
</head>
<body>
    <h1>こんにちは、@userName さん!</h1>
</body>
</html>

HTMLの中に変数を埋め込むときは、変数名の前に @(アットマーク) を付けるのがTwirlのルールです。次に、このビューを呼び出すJavaのコントローラを書きます。


package controllers;

import play.mvc.*;
import views.html.*;

public class UserController extends Controller {
    public Result showWelcome() {
        String name = "山田太郎";
        // views.html.ファイル名.render(引数) でビューを呼び出す
        return ok(views.html.index.render(name));
    }
}

このように、render メソッドの括弧の中に渡したい変数を指定するだけで、JavaからHTMLへデータが送り届けられます。

4. 複数の変数を渡す方法

4. 複数の変数を渡す方法
4. 複数の変数を渡す方法

実際の開発では、名前だけでなく日付や数値など、複数の情報を同時に渡したい場面がほとんどです。その場合は、パラメータ定義をカンマ , で区切って記述します。


@(title: String, score: Integer, isPassed: Boolean)

<div>
    <h2>@title</h2>
    <p>点数: @score 点</p>
    <p>結果: @if(isPassed){ 合格 } else { 不合格 }</p>
</div>

Javaのコントローラ側でも、定義した順番通りに値をセットして呼び出します。型が一致していないとコンパイルエラー(プログラムを実行する前のチェックでのエラー)になるため、バグを未然に防ぐことができます。

5. リスト(複数のデータ)を渡して繰り返し表示する

5. リスト(複数のデータ)を渡して繰り返し表示する
5. リスト(複数のデータ)を渡して繰り返し表示する

ニュースの一覧や商品のリストなど、同じ形式のデータを複数並べて表示したいときは、Javaの List などのコレクションを渡します。これには @for という構文を使います。


@(items: List[String])

<ul>
    @for(item <- items) {
        <li>@item</li>
    }
</ul>

注意点として、Twirl内部ではScalaの型として扱うため、java.util.List を受け取る場合は List[String] のように大括弧を使います。Java側からの呼び出しは以下の通りです。


public Result showItems() {
    java.util.List<String> shoppingList = java.util.Arrays.asList("リンゴ", "バナナ", "オレンジ");
    return ok(views.html.itemlist.render(shoppingList));
}

6. 自作のクラス(モデル)を渡す方法

6. 自作のクラス(モデル)を渡す方法
6. 自作のクラス(モデル)を渡す方法

String型やInteger型といった基本的な型だけでなく、自分で作った「会員情報クラス(Userクラス)」なども渡せます。これにより、複雑なデータ構造もスッキリと扱うことが可能になります。

テンプレートの先頭で @(user: models.User) のように、パッケージ名を含めたフルネーム(完全修飾名)で型を指定するのがコツです。画面側では @user.getName() のようにして、クラスの中にあるメソッドを呼び出してデータを表示します。これにより、大規模な開発でもデータ管理が非常に楽になります。

7. 変数が見つからない場合のエラー解決

7. 変数が見つからない場合のエラー解決
7. 変数が見つからない場合のエラー解決

「変数が見つかりません(not found)」というエラーが出た場合、多くは「ビューのパラメータ定義」と「コントローラの引数」が一致していないことが原因です。以下の3点を確認しましょう。

  • 綴り(スペル)は間違っていないか
  • データの型(StringやIntegerなど)は合っているか
  • 引数の数は同じか

Play Frameworkは型チェックが非常に強力なので、エラーが出たときは「安全なプログラムのためにパソコンが教えてくれている」と考えて修正に取り組みましょう。

8. デフォルト値やオプションの活用

8. デフォルト値やオプションの活用
8. デフォルト値やオプションの活用

時には「値がある時だけ表示したい」「値がなければ決まった文字を出したい」ということもあります。Java側で Optional を使って渡すこともできますが、ビュー側で簡単な条件分岐 @if(...) を使うことで、ユーザーに優しい画面作りができます。

例えば、ログインしている時だけ「ログアウト」ボタンを出す、といった制御もこの変数の受け渡しの応用で実現できます。コントローラから「ログイン状態」という真偽値(Boolean)を渡して、ビューで切り替えるのが一般的な手法です。

9. 変数受け渡しのセキュリティ(エスケープ)

9. 変数受け渡しのセキュリティ(エスケープ)
9. 変数受け渡しのセキュリティ(エスケープ)

Twirlの素晴らしい点は、渡された変数を表示する際に、自動的にHTMLエスケープをしてくれることです。もしユーザーが悪意のあるスクリプトを名前に混ぜて送ってきても、Twirlはそれをただの文字列として無害化して表示します。

特別な設定をしなくても、標準でセキュリティ対策が行われるため、初心者の方でも安心して動的なWebサイトを作ることができます。これが現代的なフレームワークであるPlay Frameworkを使う大きなメリットの一つです。

10. 表現豊かなビューを目指して

10. 表現豊かなビューを目指して
10. 表現豊かなビューを目指して

Javaの変数をビューに渡すことができれば、もう静的なHTMLだけのサイトではありません。ユーザーの操作やサーバーの状態に合わせて刻々と変化する、生きたWebサイトを作ることができます。今回学んだパラメータ定義と render メソッドの使い方をマスターして、自分だけの動的なページをどんどん作ってみてください!

カテゴリの一覧へ
新着記事
New1
Jakarta EE
Jakarta EEとクラウドネイティブ開発の相性とは?初心者向けにわかりやすく解説
New2
Jakarta EE
JakartaEE JSPのリクエスト属性とスコープの基本を徹底解説!初心者向け入門ガイド
New3
Play Framework
Play Frameworkのビューテストを徹底解説!Twirlテンプレートの品質を高める方法
New4
Jakarta EE
JakartaEE フィルタで認証と認可を実装する方法を初心者向けに解説!サーブレットのセキュリティ入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Play Framework
Play Frameworkのビューを共通化!テンプレート間のインクルード方法を徹底解説
No.3
Java&Spring記事人気No3
Play Framework
Play Frameworkプロジェクト作成直後にやるべき初期設定ガイド!初心者でも安心
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.5
Java&Spring記事人気No5
Play Framework
Play Frameworkで多言語対応(i18n)を徹底解説!Twirlテンプレートでの使い方
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EEの標準仕様とAPI一覧を完全解説!初心者でもわかるエンタープライズJavaの基本
No.7
Java&Spring記事人気No7
Play Framework
Play FrameworkでCSSやJavaScriptを読み込む方法を徹底解説!静的リソースの組み込みガイド
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識