Heroku の Scala サポート
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2022年11月28日(月)
このドキュメントでは、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 サイズのための環境の調整
新しい dyno サイズが選択されると、以下の設定が自動的に JAVA_TOOL_OPTIONS
に追加されます。
eco
、basic
、またはstandard-1x
: -Xmx350m -Xss512k
standard-2x
: -Xmx768m
performance-m
: -Xmx2g
performance-l
: -Xmx12g
リソース使用量の監視
dyno のリソース使用量を監視するために追加の JVM フラグを使用できます。リソース使用量を監視するには、次のフラグをお勧めします。
-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 so if you’d like 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.
アドオン
Heroku Postgres の Starter Tier データベースアドオンが、Scala アプリケーション用に自動的にプロビジョニングされています。これにより DATABASE_URL
環境変数が入力されます。