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

Play Frameworkでコントローラからビューを呼び出す流れを完全ガイド!

コントローラからビューを呼び出す流れ
コントローラからビューを呼び出す流れ

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

生徒

「Play Frameworkで、画面を表示させる仕組みが知りたいです。コントローラで作ったデータを、どうやってHTMLに渡すんですか?」

先生

「Play Frameworkでは、MVCモデルという考え方を使います。コントローラが橋渡し役になって、ビュー(HTMLテンプレート)を呼び出すんですよ。」

生徒

「難しそうに聞こえますが、初心者でも簡単に書けますか?」

先生

「はい、テンプレートエンジンのおかげで直感的に書けます。それでは、基本的な流れを詳しく見ていきましょう!」

1. MVCモデルにおけるコントローラの役割

1. MVCモデルにおけるコントローラの役割
1. MVCモデルにおけるコントローラの役割

Play Frameworkは、MVC(モデル・ビュー・コントローラ)という設計パターンを採用しています。画面を表示する際、主役となるのが「コントローラ」です。コントローラは、ユーザーからのリクエストを受け取り、必要なデータを準備して、最終的に「ビュー(画面)」を表示する命令を出します。

プログラミング初心者の方には、レストランの「ウェイター」を想像してもらうと分かりやすいでしょう。お客さん(ユーザー)から注文(リクエスト)を受け、厨房(モデル)から料理(データ)を運び、最後にお皿に盛り付けてテーブル(ビュー)に届ける。この「盛り付けて届ける」作業が、今回学習するコントローラからビューを呼び出すという処理にあたります。

2. ビュー(Twirlテンプレート)の基本構造

2. ビュー(Twirlテンプレート)の基本構造
2. ビュー(Twirlテンプレート)の基本構造

Play Frameworkでは、Twirl(トワール)というテンプレートエンジンを使用してビューを作成します。ファイル拡張子は .scala.html ですが、中身は普通のHTMLに少し特別な記法を加えたものです。Javaエンジニアにとっても馴染みやすい設計になっています。

まず、データを表示するための受け皿となるHTMLファイルを作成します。ファイルは app/views ディレクトリに配置するのが基本ルールです。以下のコードは、タイトルとメッセージを表示するためのシンプルなビューの例です。


 @(title: String, message: String)

 <!DOCTYPE html>
 <html lang="ja">
 <head>
     <meta charset="UTF-8">
     <title>@title</title>
 </head>
 <body>
     <h1>@title</h1>
     <p>@message</p>
 </body>
 </html>

1行目の @(title: String, message: String) は、この画面を表示するために必要なデータのリスト(引数)を定義しています。HTMLの中で @ をつけると、コントローラから渡された変数を表示することができます。これが動的なWebページ作成の第一歩です。

3. コントローラからビューを呼び出すJavaコード

3. コントローラからビューを呼び出すJavaコード
3. コントローラからビューを呼び出すJavaコード

次に、Javaのコントローラ側でこのビューを呼び出す方法を見てみましょう。Play Frameworkでは、作成した index.scala.html は、ビルド時に自動的に views.html.index というJavaのクラスとして扱えるようになります。

コントローラ内のメソッド(アクション)で render() メソッドを呼び出し、引数にデータを渡すことで、HTMLを生成してユーザーに返却します。非常にシンプルですね。


package controllers;

import play.mvc.*;
import views.html.*; // ビューを読み込むためのインポート

public class HomeController extends Controller {

    public Result index() {
        // 表示したいデータを準備する
        String pageTitle = "マイアプリ";
        String welcomeMsg = "Play Frameworkへようこそ!";

        // views.html.index.render() でビューを呼び出す
        // 引数の順番は .scala.html の1行目と同じにする
        return ok(index.render(pageTitle, welcomeMsg));
    }
}

ここで使っている ok() は、HTTPステータスコード 200(成功)を返すためのメソッドです。index.render(...) で生成されたHTMLが、ブラウザに届くことになります。

4. ルーティングの設定を確認しよう

4. ルーティングの設定を確認しよう
4. ルーティングの設定を確認しよう

コントローラとビューの準備ができたら、最後に「どのURLにアクセスしたら、どのコントローラのメソッドを動かすか」を決める設定が必要です。これが conf/routes ファイルの役割です。

初心者の方は、ここを書き忘れて「ページが見つかりません(404 Not Found)」というエラーになりがちなので注意しましょう。以下のように記述します。


 # URLのパス | コントローラ名.メソッド名
 GET     /welcome        controllers.HomeController.index()

ブラウザで http://localhost:9000/welcome にアクセスすると、HomeControllerindex メソッドが実行され、最終的にHTMLが表示されます。これが一連のリクエストとレスポンスの流れです。

5. リスト(複数のデータ)をビューに渡す方法

5. リスト(複数のデータ)をビューに渡す方法
5. リスト(複数のデータ)をビューに渡す方法

実際の開発では、単一の文字列だけでなく、商品のリストやユーザーの一覧など、複数のデータを渡したいことが多いですよね。その場合は、Javaの List を使います。Play FrameworkはJavaのコレクションをそのまま扱うことができるので、非常に強力です。

まずは、リストを受け取るようにビューを書き換えます。


 @(items: List[String])

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

次に、コントローラでリストを作成して渡します。Java標準の ArrayList などを使ってデータを準備するだけです。


package controllers;

import play.mvc.*;
import java.util.ArrayList;
import java.util.List;
import views.html.*;

public class ItemController extends Controller {

    public Result listItems() {
        // リストを生成
        List<String> shoppingList = new ArrayList<>();
        shoppingList.add("コーヒー豆");
        shoppingList.add("ペーパーフィルター");
        shoppingList.add("マグカップ");

        // ビューにリストを渡して呼び出す
        return ok(itemlist.render(shoppingList));
    }
}

6. 型の安全性とコンパイルチェック

6. 型の安全性とコンパイルチェック
6. 型の安全性とコンパイルチェック

Play Frameworkの大きな特徴の一つは、タイプセーフ(型安全)であることです。もしコントローラから渡すデータの型がビューで定義したものと違っていたり、引数の数が足りなかったりすると、ブラウザを表示する前(コンパイル時)にエラーとして教えてくれます。

他のWebフレームワークでは「画面を開いてみたらエラーで真っ白だった」ということがよくありますが、Playでは開発ツール(sbtなど)が即座に間違いを指摘してくれるため、バグの少ない開発が可能です。初心者にとって、どこが間違っているかすぐ分かるこの仕組みは、学習をスムーズに進める助けになります。

7. ビューへのデータ受け渡しのコツ

7. ビューへのデータ受け渡しのコツ
7. ビューへのデータ受け渡しのコツ

コントローラからビューへデータを渡す際、あまりにも多くの引数(20個も30個も)を渡すのはおすすめしません。管理が大変になるからです。関連するデータは一つの「クラス(モデル)」としてまとめてから渡すのが、綺麗なコードを書くコツです。

例えば、ユーザー名、年齢、住所を個別に渡すのではなく、 User というクラスを作って、そのオブジェクトを一つだけビューに渡すようにします。これにより、プロジェクトのディレクトリ構成が整理され、後から見返したときにも分かりやすいプログラムになります。こうした設計の工夫も、コントローラ入門の大切な要素です。

8. 共通レイアウトの活用

8. 共通レイアウトの活用
8. 共通レイアウトの活用

Webサイトには、ヘッダー(上のメニュー)やフッター(下の著作権表記)など、どのページでも共通の部分がありますよね。Play Frameworkでは、これを「共通レイアウト」として定義し、各ページで再利用することができます。

コントローラから呼び出す個別のビュー( index.scala.html など)の中で、共通レイアウト( main.scala.html )を呼び出すように記述します。これにより、同じHTMLを何度も書く手間が省け、修正も一箇所で済むようになります。開発生産性を高めるために必須の知識です。

9. デバッグと画面確認

9. デバッグと画面確認
9. デバッグと画面確認

もし画面が思い通りに表示されないときは、コントローラで System.out.println() を使って、変数の値が正しくセットされているかコンソールで確認してみましょう。また、ブラウザの「開発者ツール(F12キー)」を使って、実際に生成されたHTMLソースコードをチェックするのも有効です。

Play Frameworkは「修正して保存したら、ブラウザをリロードするだけですぐに反映される」という非常に快適な開発環境を持っています。どんどんコードを書き換えて、コントローラからビューへデータが流れる様子を体感してみてください。基本さえマスターすれば、どんなに複雑なWebアプリケーションでも作れるようになりますよ!

カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkでコントローラからビューを呼び出す流れを完全ガイド!
New2
Jakarta EE
Jakarta Server Pages(JSP)のセキュリティ上の注意点を完全解説!初心者でも理解できるXSS対策の基本
New3
Play Framework
Play FrameworkでJSONを扱う方法!リクエスト受信とレスポンス返却
New4
Jakarta EE
Jakarta EE JSPでJSONを返す方法を徹底解説!初心者向けの基本と実装ポイント
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta EE JSPでJSTLを使ったJSONやREST APIレスポンス処理を初心者向けにやさしく解説
No.3
Java&Spring記事人気No3
Play Framework
Play Frameworkでクエリパラメータをコントローラで処理する方法を完全解説|Java初心者向け入門
No.4
Java&Spring記事人気No4
Play Framework
Play Frameworkでリクエストデータの受け取り方を完全解説|Java初心者向けコントローラ入門
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSPでJSTLを使ったテンプレート化の実践方法を初心者向けにやさしく解説
No.7
Java&Spring記事人気No7
Play Framework
Play FrameworkでJSONを扱う方法!リクエスト受信とレスポンス返却
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!