Heroku の Scala サポート
最終更新日 2024年05月09日(木)
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
アプリケーションに /conf/application.conf
ファイルも含まれている場合、Play 2.0 アプリケーションが検出され、Heroku は -----> Play 2.0 app detected
と応答します。詳細については、Heroku Play サポートの記事を参照してください。
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 サイズのための環境の調整
eco
、basic
、またはstandard-1x
: -Xmx300m -Xss512k -XX:CICompilerCount=2
standard-2x
: -Xmx671m -XX:CICompilerCount=2
performance-m
: -Xmx2g
performance-l
: -Xmx12g
performance-l-ram
、performance-xl
、performance-2xl
: XX:MaxRAMPercentage=80.0
Private Space dyno および Shield Private Space dyno の場合、値は以下のようになります。
private-s
またはshield-s
: -Xmx671m -XX:CICompilerCount=2
private-m
またはshield-m
: -Xmx2g
private-l
またはshield-l
: -Xmx12g
private-l-ram
、private-xl
、private-2xl
、shield-l-ram
、shield-xl
、shield-2xl
: 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 バージョン
Heroku は現在、OpenJDK 8 を使用してアプリケーションを実行しています。OpenJDK バージョン 7 も使用できます。選択したメジャーバージョンに応じて、アプリをデプロイするたびに、その Java ランタイムの使用可能な最新のアップデートが使用されます。現在のバージョンの一覧は、Java サポート記事を参照してください。
アプリが使用する JDK は slug に含められるので、slug のサイズに影響します。
Java バージョンの指定
system.properties
というファイルをアプリケーションに追加することによって Java バージョンを指定できます。
ファイル内の java.runtime.version
プロパティを設定します。
java.runtime.version=1.8
1.8 is the default version. To use Java 8, you don’t need this file at all. You can specify JDK 7 by setting this property to “1.7”. For details on how to set specific update versions, see the Java support article.
Postgres の自動プロビジョニング
このセクションは、2023 年 5 月 15 日より前に作成されたアカウントまたは Heroku サポートにアカウントの自動プロビジョニングを有効にするように依頼した場合にのみ該当します。
Heroku Postgres データベースは、Scala アプリケーションの初回デプロイで自動的にプロビジョニングされます。この自動プロビジョニングにより DATABASE_URL
環境変数が入力されます。
Postgres アドオンが必要ない場合、次のコマンドを実行してアドオンを削除します。
$ heroku addons:destroy DATABASE --app example-app