🚀

はじめての Play Framework+Scala ─ 504 タイムアウトを越えて最速 “shallow clone” 起動まで 🚀

に公開

対象: 「今日から Play 案件にジョインするけど、まず何を触れば…?」という Scala 初心者〜中級者
ゴール:

  1. 公式サンプルを shallow clone で 3 分以内に動かす
  2. 生成されたディレクトリ構成・主要ファイルの意味がサクッとわかる

0. いきなりハマった人へ ― 我々も 504 に泣いた

Play の入門記事で定番の

sbt new playframework/play-scala-seed.g8

を試したところ――

  • search.maven.org が 504
  • テンプレート変数 $play_version$ が展開されず依存解決失敗
  • 社内プロキシで Maven Central 443 がブロック

…と、インターネットの荒波に揉まれ、テンプレ生成すらできない事例が続出しました。
「Play 触る前に心が折れるのはもったいない!」ということで、 一切 giter8 に頼らず “完成済みサンプルを shallow clone” する超確実ルートを紹介します。

1. 前提ツールを入れておこう

ツール 推奨バージョン インストール例
JDK 17 以上 sdk install java 17.0.x-tem など
sbt 1.8 以上 https://www.scala-sbt.org/download.html
Git 任意 apt install git / brew install git

2. “shallow clone” で公式サンプルを落とす(所要 1 分)

Play 公式 GitHub には giter8 展開済みのサンプル集 が置かれています。
最小構成である play-scala-hello-world-tutorial を shallow clone しましょう。

git clone --depth 1 https://github.com/playframework/play-samples.git
cd play-samples/play-scala-hello-world-tutorial
sbt run
  • --depth 1 なので 履歴を落とさず超軽量 clone
  • 依存バージョンはファイルに 固定値 が書かれているため、 $play_version$ 展開漏れ事故もナシ
  • 初回 sbt run は JAR ダウンロードが走りますが、
    数十秒〜数分で http://localhost:9000 に Welcome 画面が出れば成功🎉

3. ディレクトリ構成をざっくり把握

play-scala-hello-world-tutorial/
├── app/                        ← アプリ本体
│   ├── controllers/            ← HTTPハンドラ
│   │   └── HomeController.scala
│   └── views/                  ← Twirlテンプレート
│       ├── index.scala.html
│       ├── explore.scala.html
│       ├── tutorial.scala.html
│       ├── commonSidebar.scala.html
│       └── main.scala.html
├── conf/                       ← 設定&ルーティング
│   ├── application.conf
│   ├── logback.xml
│   ├── messages                ← i18n
│   └── routes                  ← URLマッピング
├── public/                     ← 静的アセット (img / js / css)
│   ├── images/ …               ← Play公式図など
│   ├── javascripts/ main.js
│   └── stylesheets/ main.css
├── build.sbt                   ← 依存 & 設定
├── project/                    ← sbt サブプロジェクト設定
│   ├── build.properties
│   └── plugins.sbt
└── target/                     ← sbt が生成するビルド成果物
    └── …(class や Twirl のテンプレート展開結果など)

※ clone 後に sbt run すると logs/target/ が生成され、
テストやコンパイルごとにファイルが増えていきます。

キモになるファイル

ファイル 役割 よくやる改修
controllers/HomeController.scala GET / ハンドラが 1 本 REST API を追加/サービス層呼び出し
views/index.scala.html Twirl テンプレで書かれた HTML SPA 化するならここを React/Vue エントリに
conf/routes URL ⇔ Controller マッピング 追加・変更は 差分レビュー必須
application.conf DB 接続・ポート番号など設定 devprod でファイル分割が便利

4. ホットリロード&開発ワークフロー

操作 コマンド 補足
アプリ起動 sbt run 変更保存→自動リロード
テスト sbt test PlaySpec が雛形付き
REPL sbt console モデル層の動作確認がラク
依存追加 libraryDependencies += "org.typelevel" %% "cats-core" % "2.10.0" 追記後 sbt reload

5. つまずきポイント Q&A

疑問 サクッと回答
ポート変えたい conf/application.confplay.server.http.port = 9001
ログレベル下げたい 同ファイルで logger.root=INFO など
フロントをSPAに置き換えたい public/ 以下にビルド済み静的ファイルを配置し、routes でキャッチオールを設定

6. まとめ 🎯

  • テンプレートが落とせなくても → 公式サンプル shallow clone で一発起動
  • app / conf / public / test の 4 つを押さえれば構造は理解できる
  • ルーティングと設定ファイルはコミット前に軽ダブルチェック

Play 2.9 以降は Scala 3 サポートも進み、モダンライブラリとの親和性も抜群です。
まずは Welcome 画面 → ルーティング 1 本追加 をゴールに触ってみてください。
初日からコードリーディング&PR レビューに入れるはずです。Enjoy Play! 💪

Discussion