🛣️
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