🚀
はじめての Play Framework+Scala ─ 504 タイムアウトを越えて最速 “shallow clone” 起動まで 🚀
対象: 「今日から Play 案件にジョインするけど、まず何を触れば…?」という Scala 初心者〜中級者
ゴール:
- 公式サンプルを shallow clone で 3 分以内に動かす
- 生成されたディレクトリ構成・主要ファイルの意味がサクッとわかる
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 接続・ポート番号など設定 |
dev と prod でファイル分割が便利 |
4. ホットリロード&開発ワークフロー
操作 | コマンド | 補足 |
---|---|---|
アプリ起動 | sbt run |
変更保存→自動リロード |
テスト | sbt test |
PlaySpec が雛形付き |
REPL | sbt console |
モデル層の動作確認がラク |
依存追加 | libraryDependencies += "org.typelevel" %% "cats-core" % "2.10.0" |
追記後 sbt reload
|
5. つまずきポイント Q&A
疑問 | サクッと回答 |
---|---|
ポート変えたい |
conf/application.conf → play.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