Heroku の Scala サポート
最終更新日 2024年12月03日(火)
Table of Contents
このドキュメントでは、Scala アプリケーションの認識と実行に関連した Heroku の一般的な動作について説明します。アプリケーションのデプロイ方法についての詳細は、「Heroku スターターガイド (Scala)」を参照してください。
アクティベーション
Heroku では、次のいずれかのパターンに一致するファイルが検出されたときに、Scala アプリケーションが認識されます。
/*.sbt
/project/*.scala
/project/build.properties
/.sbt/*.scala
デプロイされたアプリケーションが Scala アプリケーションとして認識された場合、Heroku は -----> Scala app detected
と応答します。
$ git push heroku master
-----> Scala app detected
Maven を使用する Scala アプリケーションもデプロイできますが、これらは Java アプリケーションとして扱われるため、Heroku Java サポートが適用されます。
環境
次の環境変数が設定されます。
PATH
: .sbt_home/bin:/usr/local/bin:/usr/bin:/bin
PORT
: Web プロセスはこの HTTP ポートにバインドされますDATABASE_URL
: Heroku Postgres データベース接続の URL
dyno のサイズ変更を行うことで、Java メモリ設定が自動的に変更されます。JAVA_OPTS
環境設定を手動で調整して、これらのデフォルト値を上書きできます。
Java プロセスが dyno で開始されると、次の Java オプションが自動的に選択されます。
-
-Dfile.encoding=UTF-8
これらのオプションは、環境変数 JAVA_TOOL_OPTIONS
の一部として設定されます。これは、コマンドラインにアクセスできないかコマンドラインを変更できない環境でコマンドラインを拡張するためのものです。これらの設定をオーバーライドする必要がある場合は、Procfile
コマンドで優先オプションを定義する (こちらが優先される) か、独自の JAVA_TOOL_OPTIONS
環境変数を設定することができます。
dyno サイズのための環境の調整
新しい dyno タイプを選択すると、いくつかの JVM フラグが自動的に JAVA_TOOL_OPTIONS
に追加されます。
Cedar
Cedar 世代の dyno では、JAVA_TOOL_OPTIONS
が dyno サイズごとに次のように設定されています。
プラン | JAVA_TOOL_OPTIONS |
---|---|
Eco | -Xmx300m -Xss512k -XX:CICompilerCount=2 |
Basic | -Xmx300m -Xss512k -XX:CICompilerCount=2 |
Standard-1X | -Xmx300m -Xss512k -XX:CICompilerCount=2 |
Standard-2X | -Xmx671m -XX:CICompilerCount=2 |
Private/Shield-S | -Xmx671m -XX:CICompilerCount=2 |
Performance/Private/Shield-M | -Xmx2g |
Performance/Private/Shield-L | -Xmx12g |
Performance/Private/Shield-L-RAM | -XX:MaxRAMPercentage=80.0 |
Performance/Private/Shield-XL | -XX:MaxRAMPercentage=80.0 |
Performance/Private/Shield-2XL | -XX:MaxRAMPercentage=80.0 |
Fir
すべての Fir 世代の dyno では JAVA_TOOL_OPTIONS
が -XX:MaxRAMPercentage=80.0
に設定されています。
リソース使用量の監視
追加の JVM フラグを使用して、dyno のリソース使用量を監視できます。リソース使用量を監視するには、次のフラグをお勧めします。
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC
JVM プロセスの調整について詳しくは、トラブルシューティングの記事を参照してください。
ビルド動作
アプリケーションには、0.11.0 から 1.x までの間の SBT バージョンが sbt.version
プロパティで指定されている /project/build.properties
ファイルを含める必要があります。SBT のリリース候補、ベータ版、その他の事前リリースバージョンを指定できます。
Heroku Scala buildpack は sbt compile stage
を実行してアプリケーションをビルドします。アプリケーションは、アプリケーションをインプレースで実行するための準備に必要なすべてのタスクを実行する stage
タスクを含む必要があります。たとえば、Typesafe の sbt-native-packager
は、アプリケーションの開始スクリプトを生成する stage
タスクを SBT に追加します。プラグインを使用するには、次の内容を含む /project/plugins.sbt
ファイルを作成します。
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.7.6")
または、次のようなコードを build.sbt
に入力することによって、カスタムの stage
タスクを記述できます。
val stage = taskKey[Unit]("Stage task")
val Stage = config("stage")
stage := {
(packageWar in Compile).value
(update in Stage).value.allFiles.foreach { f =>
if (f.getName.matches("webapp-runner-[0-9\\.]+.jar")) {
println("copying " + f.getName)
IO.copyFile(f, baseDirectory.value / "target" / "webapp-runner.jar")
}
}
}
タスクは sbt compile stage
をローカルで実行することによってテストできます。
クリーンビルド
場合によっては、コンパイル前にビルドでアーティファクトを消去する必要があります。クリーンビルドが必要な場合、SBT_CLEAN=true
を設定することによって clean
を実行するようにビルドを設定します。
$ heroku config:set SBT_CLEAN=true
Setting config vars and restarting example-app... done, v17
SBT_CLEAN: true
後続のすべてのデプロイで clean
タスクが使用されます。clean
タスクを削除するには、SBT_CLEAN
を設定解除します。
$ heroku config:unset SBT_CLEAN
Unsetting SBT_CLEAN and restarting example-app... done, v18
ランタイムの動作
デフォルトでは、Scala アプリケーションは sbt-native-packager
によって生成される開始スクリプトで起動されます。
web: target/universal/stage/bin/appname
アプリケーションが sbt-native-packager
を使用しないか、別の方法で起動される必要がある場合、web
プロセスの別のエントリを指定するプロジェクトのルートにカスタムの Procfile
を含めることができます。
Play フレームワークは開始スクリプトを自動的に生成するため、追加のプラグインは不要です。
サポートされている JDK バージョン
Java サポート記事を参照してください。
Java バージョンの指定
Java サポート記事を参照してください。
Postgres の自動プロビジョニング
このセクションは、2023 年 5 月 15 日より前に作成されたアカウントまたは Heroku サポートにアカウントの自動プロビジョニングを有効にするように依頼した場合にのみ該当します。
Heroku Postgres データベースは、Scala アプリケーションの初回デプロイで自動的にプロビジョニングされます。この自動プロビジョニングにより DATABASE_URL
環境変数が入力されます。
Postgres アドオンが必要ない場合、次のコマンドを実行してアドオンを削除します。
$ heroku addons:destroy DATABASE --app example-app