🛣️

Play Framework入門・続編 ─ ルーティング1本追加で “Hello, Play!” を返そう

に公開

はじめての Play Framework+Scala 続編

Welcome 画面を卒業して “ルーティング 1 本追加” をやってみよう 🛣️

1. サンプルを起動しているターミナルを再利用

前回 clone した play-scala-hello-world-tutorial/ で
sbt run が走っているならそのまま放置で OK(Play はホットリロード♡)。
止めてしまった場合は、ディレクトリに移動してもう一度 sbt run しておきます。

2. コントローラを新規追加

app/controllers/HelloController.scala を作成:

package controllers

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

@Singleton
class HelloController @Inject()(cc: ControllerComponents) extends AbstractController(cc) {

  def hello = Action { implicit request: Request[AnyContent] =>
    Ok("Hello, Play!")
  }

}

ポイント💡

役目
@Singleton DI コンテナ(Guice)が 1 インスタンスだけ生成
cc: ControllerComponents 依存性注入で各種ヘルパを取得
def hello = Action { … } HTTP GET で呼ばれるアクション本体
Ok("text") ステータス 200 + プレーンテキストを返すヘルパ

3. ルーティング設定に 1 行書く

conf/routesいちばん下 に追記:

# Hello endpoint
GET   /hello              controllers.HelloController.hello

保存した瞬間、Play がファイルを検知して再コンパイルします。
ターミナルに

[info] Compiling 1 Scala source to ...
[info] application - Application started ...

のようなログが流れれば成功。

4. ブラウザで動作確認

http://localhost:9000/hello にアクセス ➡️

<br>Hello, Play!<br>

と表示されれば 🎉 ルーティング 1 本追加ミッション完了!

5. JSON を返すパターンにも挑戦 (おまけ)

def helloJson = Action {
  Ok("""{ "message": "Hello, JSON!" }""").as("application/json")
}

routes

GET   /api/hello          controllers.HelloController.helloJson

を追加し curl で確認:

% curl localhost:9000/api/hello
{ "message": "Hello, JSON!" }

6. つまずき Q&A

症状 原因と対処
404 が返る routes ファイルを保存していない / 行末の空行がない ⇒ 保存し直す
500 エラー or コンパイルエラー Scala ファイル名とクラス名不一致 ⇒ HelloController.scala / HelloController を揃える
ブラウザが旧内容を表示 キャッシュの可能性 ⇒ Ctrl+F5 or ?t=123 を付けてリロード

7. まとめ 🎯

  • Controller を 1 クラス作成
  • conf/routes に URL → Controller.method を 1 行追加
  • 保存するだけでホットリロード、ブラウザ確認まで 30 秒

これで 「Welcome 画面だけ」状態から “自分のエンドポイント” に進化しました。
次のステップは フォーム送信や DB 連携 など、Action の中身をリッチにしていきましょう。

Enjoy Hacking Play! 💥

Discussion