Table of Contents [expand]
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2024年12月03日(火)
このドキュメントでは、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:/binPORT: 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