Scala Playアプリのデプロイ
このステップバイステップガイドで、RailwayにScala Playアプリをデプロイする方法を学びます。クイックセットアップ、データベース統合、ワンクリックデプロイ、その他のデプロイ戦略について説明します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)Scala Playアプリのデプロイ
Playは、JavaおよびScala向けの高速で生産性の高いWebフレームワークです。軽量でステートレスなWebフレンドリーなアーキテクチャに基づいており、Pekko Streamsに基づいたリアクティブモデルのおかげで、高度にスケーラブルなアプリケーションの予測可能で最小限のリソース消費(CPU、メモリ、スレッド)を特徴としています。
このガイドでは、4つの方法でRailwayにScala Playアプリをデプロイする方法について説明します。
それでは、Playアプリを作成しましょう!
Playアプリの作成
注: PlayアプリがローカルまたはGitHubに既にある場合は、この手順をスキップして、PlayアプリをRailwayにデプロイに直接進むことができます。
新しいScala Playアプリを作成するには、お使いのマシンにJDKとsbtがインストールされていることを確認してください。
ターミナルで次のコマンドを実行して、新しいPlayアプリを作成します。
sbt new
テンプレートのリストが表示されます。playframework/play-scala-seed.g8
テンプレートを選択します。
helloworld
という名前を付けます。- 組織名
com.railwayguide
を付けます。 - 残りはEnterキーを押して、play、scala、sbt scaffoldの最新バージョンを使用します。
helloworld
ディレクトリに新しいScala Playアプリがプロビジョニングされます。
Scala Playビューの変更とデータベース構成の設定
ステップ1:インデックスファイルの変更
エディタでプロジェクトを開きます。app/views/index.scala.html
ファイルに移動します。
次のように変更します。
@()
@main("Welcome to Play") {
<h1>Welcome to Play!</h1>
<h1>Hello World, Railway!</h1>
}
この変更により、新しい見出しが追加され、アプリをローカルで実行すると表示されます。
ステップ2:アプリをローカルで実行
- 次に、アプリをローカルで実行して変更を確認します。ブラウザに新しいヘッダーが表示されるはずです。
ステップ3:PostgreSQLドライバーを依存関係として追加
Playには組み込みのデータベースドライバーが提供されていないため、PostgreSQL JDBCドライバーをプロジェクトに手動で追加する必要があります。
build.sbt
に、次の依存関係を追加します。
libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 常に最新の安定バージョンを使用
ステップ4:application.confでのPostgreSQLの設定
次に、conf/application.conf
でPostgreSQLデータベース接続を構成します。
# PostgreSQLを使用したデフォルトのデータベース構成
db.default.driver = org.postgresql.Driver
db.default.url = "jdbc:postgresql://username:[email protected]:5432/scala_play" # 正しい資格情報に置き換えてください
username
と password
をPostgreSQLの資格情報に置き換えてください。
ステップ5:プロジェクトの依存関係の更新
PostgreSQLドライバーと更新された依存関係をダウンロードするには、次を実行します。
sbt update
ステップ6:データベース移行ツール(Flyway)の追加
Playにはデータベース移行の組み込みサポートが含まれていないため、Flywayを使用します。
- Flywayプラグインのインストール:
project/plugin.sbt
を開き、Flywayプラグインを追加します。
addSbtPlugin("io.github.davidmweber" % "flyway-sbt" % "7.4.0")
build.sbt
でFlywayを構成する:Flywayを有効にし、build.sbt
でデータベース接続を構成します。
name := """helloworld"""
organization := "com.railwayguide"
version := "1.0-SNAPSHOT"
executableScriptName := "main"
lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(FlywayPlugin)
scalaVersion := "2.13.15"
libraryDependencies += guice
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.1" % Test
libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 最新バージョン
flywayUrl := "jdbc:postgresql://127.0.0.1:5432/scala_play?user=<username>" # 正しい資格情報に置き換えてください
flywayLocations := Seq("filesystem:src/main/resources/db/migration")
<username>
をデータベースのユーザー名に置き換えます。
ステップ7:移行ファイルの作成
- 移行フォルダの作成:移行ファイルのフォルダ構造を作成します。
src/main/resources/db/migration
- 移行SQLファイルの作成:
src/main/resources/db/migration
に、V1_0__create_employees_table.sql
という名前のスキーマ移行ファイルを作成し、次の内容を記述します。
CREATE TABLE employee (
id VARCHAR(20) PRIMARY KEY,
first_name VARCHAR(30),
last_name VARCHAR(30),
email VARCHAR(30),
admin BOOLEAN
);
ステップ8:データベース移行の実行
移行ファイルが配置されたら、次のコマンドでFlyway移行を実行します。
sbt flywayMigrate
これにより、移行が適用され、PostgreSQLデータベースにemployeeテーブルが作成されます。
psqlやPostgreSQLクライアントなどのデータベースツールを使用して、employeeテーブルが正常に作成されたことを確認します。
Playアプリをローカルで実行
次に、ターミナルで sbt run
を実行してプロジェクトをビルドし、すべての依存関係をインストールして、埋め込みPekko HTTPサーバーを起動します。
ブラウザを開き、http://localhost:9000
にアクセスしてアプリを表示します。
Scala Playアプリをデプロイ用に準備する
- アプリケーションシークレットの設定:
application.conf
ファイルを開き、以下を追加してアプリのシークレットを設定します。play.http.secret.key=${?APPLICATION_SECRET}
- データベースURLの設定:
application.conf
ファイルを開き、以下を追加してDATABASE_URL
が環境変数から読み取られるようにします。db.default.url="jdbc:${?DATABASE_URL}"
- 許可されるホストの設定:
- デフォルトでは、Playにはデフォルトの許可されるホストフィルターのリストが付属しています。これは、許可される有効なホストのリストです=
["localhost", ".local", "127.0.0.1"]
。Railwayホストを許可するオプションを追加する必要があります[".up.railway.app"]
。 application.conf
ファイルに以下を追加します。 注: Railway提供のドメインはplay.filters.hosts.allowed=[".up.railway.app"]
.up.railway.app
で終わります。カスタムドメインを追加したら、許可されるホストを新しいURLに更新してください。
- デフォルトでは、Playにはデフォルトの許可されるホストフィルターのリストが付属しています。これは、許可される有効なホストのリストです=
- sbt-native-packager sbtプラグインの追加:
sbt-native-packager
sbtプラグインをproject/plugins.sbt
に追加しますaddSbtPlugin("com.github.sbt" % "sbt-native-packager" % "x.x.x")
build.sbt
でJavaAppPackaging
プラグインを有効にし、executableScriptName
をmain
に設定します。build.sbt
は次のようになります。name := """helloworld""" organization := "com.railwayguide" version := "1.0-SNAPSHOT" executableScriptName := "main" lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(JavaAppPackaging).enablePlugins(FlywayPlugin) scalaVersion := "2.13.15" libraryDependencies += guice libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "7.0.1" % Test libraryDependencies += "org.postgresql" % "postgresql" % "42.7.4" // 常に最新の安定バージョンを使用 flywayUrl := sys.env.getOrElse("DATABASE_URL", "jdbc:postgresql://127.0.0.1:5432/scala_play?user=username") flywayLocations := Seq("filesystem:src/main/resources/db/migration")
sbt update
を実行してsbt-native-packager
をインストールし、依存関係を更新します。
これで、Railwayにデプロイする準備が整いました!
PlayアプリをRailwayにデプロイする
Railwayは、セットアップと好みに応じて、Scalaアプリをデプロイする複数の方法を提供します。
テンプレートからのワンクリックデプロイ
最速で始めたい場合は、ワンクリックデプロイオプションが最適です。
下のボタンをクリックして開始します。
デプロイ後はテンプレートから Eject して、GitHub アカウントにリポジトリのコピーを作成することを強くおすすめします。
注: コミュニティによって作成されたさまざまなScalaアプリテンプレートから選択することもできます。
CLIからデプロイ
- Railway CLIのインストール:
- CLIをインストールし、Railwayアカウントで認証します。
- Railwayプロジェクトの初期化:
- Luminusアプリディレクトリで以下のコマンドを実行します。
railway init
- プロンプトに従ってプロジェクトに名前を付けます。
- プロジェクトが作成されたら、提供されたリンクをクリックしてブラウザで表示します。
- Luminusアプリディレクトリで以下のコマンドを実行します。
- Postgresデータベースサービスの追加:
railway add -d postgres
を実行します。- Enter を押してプロジェクトに追加します。
- データベースサービスがRailwayプロジェクトに追加されます。
- サービスと環境変数の追加:
railway add
を実行します。- オプションのリストから
Empty Service
を選択します。 Enter a service name
プロンプトでapp-service
と入力します。Enter a variable
プロンプトでAPPLICATION_SECRET=<generated-app-secret>
と入力します。ここで、<generated-app-secret>
は、ターミナルでplayGenerateSecret
を実行して生成されたシークレットです。Enter a variable
プロンプトでDATABASE_URL=${{Postgres.DATABASE_URL}}
と入力します。- 値
${{Postgres.DATABASE_URL}}
は、新しいPostgresデータベースのURLを参照します。サービス変数の参照について詳しくはこちら。 注: さまざまなオプションについては、Railway CLIリファレンスを参照してください。
- 値
- アプリケーションのデプロイ:
railway up
を実行してアプリをデプロイします。- このコマンドは、アプリのファイルをスキャン、圧縮し、Railwayにアップロードします。ターミナルにはリアルタイムのデプロイログが表示されます。
- デプロイが完了したら、アプリサービスのドメインを生成に進むことができます。
- 公開URLの設定:
railway domain
を実行して、アプリの公開URLを生成します。- 新しいURLにアクセスして、アプリがライブで動作していることを確認してください!
GitHubリポジトリからデプロイ
Scala PlayアプリをGitHubから直接Railwayにデプロイするには、以下の手順に従ってください。
- Railwayで新しいプロジェクトを作成:
- Railwayにアクセスして、新しいプロジェクトを作成します。
- GitHubからデプロイ:
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- RailwayアカウントがまだGitHubにリンクされていない場合は、リンクするように求められます。
- Deploy from GitHub repo を選択し、リポジトリを選択します。
- 環境変数の追加とデータベースサービスのプロビジョニング:
- Add Variables をクリックしますが、まだ何も追加しないでください。まず、次の手順に進んでください。
- Railwayプロジェクトキャンバスを右クリックするか、Create ボタンをクリックし、Database を選択して Add PostgreSQL を選択します。
- これにより、プロジェクト用に新しいPostgreSQLデータベースが作成され、デプロイされます。
- データベースがデプロイされたら、必要な環境変数を追加に戻ることができます。
DATABASE_URL
:値を${{Postgres.DATABASE_URL}}
に設定します(これは新しいPostgresデータベースのURLを参照します)。サービス変数の参照について詳しくはこちら。APPLICATION_SECRET
:値を生成されたアプリシークレットに設定します。
- アプリサービスのデプロイ:
- Railwayプロジェクトキャンバスで Deploy をクリックして、変更を適用します。
- デプロイの確認:
- デプロイが完了したら、View logs に移動して、サーバーが正常に実行されていることを確認します。 注: デプロイプロセス中に、RailwayはScalaアプリであることを自動的に検出します。
- 公開URLの設定:
- 新しいサービスの「設定」タブのNetworkingセクションに移動します。
- 「Generate Domain」をクリックして、アプリの公開URLを作成します。
Dockerfileの使用
- Playアプリのルートディレクトリに
Dockerfile
を作成します。 Dockerfile
に以下の内容を追加します。# Scala sbt公式イメージを使用 # https://hub.docker.com/r/sbtscala/scala-sbt/tags FROM sbtscala/scala-sbt:eclipse-temurin-21.0.5_11_1.10.5_3.5.2 # アプリディレクトリを作成して変更 WORKDIR /app # ローカルコードをコンテナイメージにコピー COPY . ./ # アプリのビルド RUN sbt stage # アプリの実行 CMD ["./target/universal/stage/bin/main"]
- CLIまたはGitHubからデプロイします。
Railwayは Dockerfile
を自動的に検出し、それを使用してアプリをビルドおよびデプロイします。
注: Railwayは、パブリックおよびプライベートのDockerイメージからのデプロイもサポートしています。
このガイドでは、Railwayの主なデプロイオプションについて説明しました。セットアップに適したアプローチを選択し、Scalaアプリをシームレスにデプロイし始めてください!
次のステップ
Railwayでのエクスペリエンスを最大限に活用するために、これらのリソースを調べてください。
PR