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

Play Frameworkのサンプルコードでプロジェクトの流れを理解する方法

サンプルコードでプロジェクトの流れを理解する
サンプルコードでプロジェクトの流れを理解する

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

生徒

「先生、Play Frameworkで作ったプロジェクトの動きがまだよくわかりません。」

先生

「それなら、サンプルコードを使ってプロジェクト全体の流れを確認すると理解しやすいです。」

生徒

「サンプルコードって具体的に何をすればいいんですか?」

先生

「簡単なコントローラとビューを作って、ブラウザで確認するだけで、リクエストからレスポンスまでの流れを体験できます。」

1. サンプルコントローラを作成する

1. サンプルコントローラを作成する
1. サンプルコントローラを作成する

まずは、app/controllers ディレクトリに、いちばん最初の入り口となるシンプルなコントローラを作成してみましょう。コントローラは、ブラウザから送られてくるWebリクエストを受け取り、「どんな処理をして、何を返すのか」を決める部分です。ここがしっかりイメージできると、Play Frameworkのプロジェクト全体の流れも理解しやすくなります。


package controllers

import javax.inject._
import play.api.mvc._

// HomeController はアプリの「入り口」になるコントローラ
@Singleton
class HomeController @Inject()(
    val controllerComponents: ControllerComponents
) extends BaseController {

    // "/" にアクセスされたときに実行される処理のイメージ
    def index() = Action { implicit request: Request[AnyContent] =>
        // ここでブラウザに返すメッセージを作っている
        Ok("Hello, Play Framework!")
    }
}

このサンプルでは、HomeController というクラスの中に indexアクション を用意しています。ブラウザから「トップページを見せて」といったリクエストが来たときに、この index() が呼び出され、「Hello, Play Framework!」というテキストをレスポンスとして返す、というイメージです。

@Singleton@Inject() といった記述は、Play Frameworkが内部でコントローラを管理しやすくするための“おまじない”のようなものだと思っておけば大丈夫です。初心者のうちは「とりあえずこの形で書けば動く」と覚えておき、慣れてきたら依存性注入(DI)といったキーワードを調べていくと理解が深まります。

初心者向け:このコントローラで何が分かる?

この短いコードだけでも、Play Frameworkの基本的な動きが体験できます。

  • ブラウザのアクセス先(URL)に応じて、どのメソッドが呼ばれるかを決められること
  • サーバー側で文字列などのレスポンスを作成し、ブラウザに返していること
  • 「コントローラがリクエストを受け取り、レスポンスを返す」というWebアプリの基本的な役割

この段階では、難しいことを意識する必要はありません。「ブラウザからのリクエストが来たら、この index メソッドが動いて、文字列を返しているんだな」という流れだけつかめれば十分です。次のステップでルーティング設定を行うことで、このコントローラが実際にブラウザから呼び出されるようになります。

2. ルーティング設定を確認する

2. ルーティング設定を確認する
2. ルーティング設定を確認する

作成したコントローラを実際にブラウザから呼び出すためには、「どのURLにアクセスされたら、どのメソッドを実行するか」を紐づける設定が必要です。この橋渡し役をしてくれるのが ルーティング(routes) です。Play Frameworkでは、conf/routes ファイルにその対応関係を1行ずつ書いていきます。

まずは、トップページにアクセスしたときに先ほどの HomeController.index が動くよう、次の1行を追記してみましょう。


GET     /           controllers.HomeController.index

この1行には、それぞれ次の意味があります。

  • GET:ブラウザからのHTTPメソッド(「ページを取得する」という意味のGET)
  • /:アクセスするパス(URLパス)。ここではトップページを表します
  • controllers.HomeController.index:呼び出したいコントローラとアクション名

初心者向け:ルーティングを身近な例でイメージする

ルーティングは、よく「案内係」や「受付表」にたとえられます。

  • 「/」という入り口からお客さん(リクエスト)が来たら、HomeControllerのindexへ案内する
  • 将来「/about」など別のURLを増やしたい場合も、routesに1行追加するだけで対応できる

ここまで設定できれば、ブラウザで http://localhost:9000 にアクセスしたときに、HomeControllerのindexアクション が呼び出され、「Hello, Play Framework!」というメッセージが返ってくるようになります。次のステップでは、このメッセージをビュー(HTMLテンプレート)に渡して、より見やすい画面として表示する方法を確認していきます。

3. ビューを使ってHTMLを表示する

3. ビューを使ってHTMLを表示する
3. ビューを使ってHTMLを表示する

Play FrameworkではTwirlテンプレートを使ってHTMLを生成できます。app/views/index.scala.html に以下のサンプルを作ります。


@(message: String)

<!DOCTYPE html>
<html>
<head>
    <title>Play Framework Sample</title>
</head>
<body>
    <h1>@message</h1>
</body>
</html>

コントローラを次のように修正して、ビューを呼び出すことができます。


def index() = Action { implicit request: Request[AnyContent] =>
    Ok(views.html.index("Hello, Play Framework with View!"))
}

ブラウザでアクセスすると、ビューを通してHTMLが表示されるのが確認できます。これで、リクエスト→コントローラ→ビュー→レスポンスの流れを体験できます。

4. 開発サーバーで動作確認する

4. 開発サーバーで動作確認する
4. 開発サーバーで動作確認する

プロジェクトの流れを確認するには、sbtを使って開発サーバーを起動します。


sbt run

起動後、ブラウザで http://localhost:9000 にアクセスすると、コントローラとビューの動作が確認できます。リクエストが送られ、コントローラが処理し、ビューがHTMLとしてレスポンスを返す、という基本の流れを理解できます。

5. プロジェクト全体の流れを理解するメリット

5. プロジェクト全体の流れを理解するメリット
5. プロジェクト全体の流れを理解するメリット

サンプルコードを使ってプロジェクトの流れを確認することで、以下のことが学べます:

  • Play Frameworkのリクエストとレスポンスの流れ
  • コントローラとビューの役割
  • ルーティング設定の重要性
  • ブラウザでの確認方法

初心者が最初にこの流れを理解することで、複雑なWebアプリケーションを作る際にも迷わずに開発を進められるようになります。

まとめ

まとめ
まとめ

この記事では、Play Frameworkのプロジェクト構成を理解するために、サンプルコントローラの作成方法、ルーティング設定、ビューを使ったHTML表示、そして開発サーバーを使った動作確認までの流れを丁寧に見てきました。とくに、リクエストからレスポンスまでの一連の仕組みを体験できる点は、初心者にとって大きな学びとなります。

Webアプリケーション開発では、コントローラがどのようにリクエストを受け取り、ビューへどのようにデータを渡し、どのタイミングでHTMLが生成されるのか、という具体的な流れを把握することはとても重要です。この理解によってPlay Frameworkの特徴や動作の仕組みが自然に掴めるようになります。

また、ルーティング設定がどれだけ重要なのかも実際に試すことで明確になります。「ブラウザでURLへアクセスすると、どのメソッドが呼ばれ、何が返ってくるのか」というリンクがつながることで、フレームワーク全体の動作がより立体的に理解できます。

さらに、Twirlテンプレートを使ったビューの生成は、HTML出力をPlay Frameworkらしい形で習得するうえで欠かせません。アプリケーション開発を続けるうちに、ビューとコントローラ間のデータ受け渡しや、複雑な画面構築にも応用できる土台が形成されます。

以下に、記事の流れを踏まえた簡単なサンプルコードを再掲します。記事内で扱った内容を定着させるための振り返りとして役立ててください。

サンプルコントローラの再確認


package controllers

import javax.inject._
import play.api.mvc._

@Singleton
class SampleController @Inject()(val controllerComponents: ControllerComponents) extends BaseController {

    def sample() = Action { implicit request: Request[AnyContent] =>
        Ok(views.html.index("サンプルメッセージをPlay Frameworkで表示しています"))
    }
}

ルーティングの再確認


GET     /sample           controllers.SampleController.sample

ビューの再確認


@(message: String)

<!DOCTYPE html>
<html>
<head>
    <title>Play Framework Sample View</title>
</head>
<body>
    <h1>@message</h1>
</body>
</html>

これらのサンプルコードを通して、Play Frameworkの基本的な仕組みを再確認し、どのように開発が進むのかを自然に理解できるようになります。プロジェクト全体を俯瞰しながら構築していくことは、効率的で迷いのない開発につながります。実際に手を動かしながら試すことで、さらに深い理解が得られるでしょう。

先生と生徒の振り返り会話

生徒

「先生、今日の内容でPlay Frameworkの仕組みがずいぶんわかってきました。」

先生

「それは良いですね。リクエストとレスポンスの流れが理解できると、Webアプリケーション開発がとても楽になりますよ。」

生徒

「コントローラで処理してビューへ渡す動きや、ルーティングの大事さがやっとつながりました。」

先生

「その調子です。今後はもっと複雑な画面や処理も作れるようになりますから、今日の流れをしっかり覚えておきましょう。」

生徒

「はい!次はフォーム入力やデータベース連携にも挑戦してみたいです。」

先生

「もちろんです。基礎ができれば応用はさらに理解しやすくなりますよ。」

カテゴリの一覧へ
新着記事
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
Play Framework
Play FrameworkでCSSやJavaScriptを読み込む方法を徹底解説!静的リソースの組み込みガイド
No.5
Java&Spring記事人気No5
Play Framework
Play Frameworkで多言語対応(i18n)を徹底解説!Twirlテンプレートでの使い方
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EEの標準仕様とAPI一覧を完全解説!初心者でもわかるエンタープライズJavaの基本
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識