Heroku での Scala アプリのデプロイ
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年09月29日(金)
Table of Contents
この記事では、既存の Scala アプリを Heroku にデプロイする方法について説明します。
Heroku をはじめて使う場合は、『Heroku スターターガイド (Scala)』のチュートリアルから始めた方がよい場合もあります。
前提条件
開始する前に、Scala、sbt、および Heroku CLI がインストールされていることを確認してください。この記事では、sbt でビルドするように設定されている既存の Scala アプリから開始することを想定しています。
この記事は、Play フレームワークを使用するアプリには適用されません。Play フレームワークのサポートは、『Play フレームワークサポートリファレンス』に記載されています。
概要
Heroku が Scala アプリケーションを認識する方法は、『Heroku Scala サポート』に記載されています。
ご使用のアプリケーションには、使用することが意図されている sbt.version を定義する project/build.properties
ファイルがすでに含まれている必要があります。これは次のようになります。
sbt.version=0.13.9
詳細については、「動作のビルド」を参照してください。
sbt-native-packager プラグインが正しくセットアップされていることの確認
アプリをデプロイ用にパッケージ化するために、sbt-native-packager sbt コミュニティプラグインを使用することができます。Play Framework バージョン 2.3 以上を使用している場合、プラグインは自動的に設定されます。
Play Framework を使用していない場合、プラグインを手動で設定する必要があります。project/plugins.sbt
ファイルは、使用する sbt-native-packager のバージョンを指定します。project/plugins.sbt
ファイルに次のように追加します。
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.3")
build.sbt
で、必要なプラグインを有効化します。たとえば、JavaAppPackaging
を指定します。
enablePlugins(JavaAppPackaging)
詳細は、sbt のドキュメントおよび sbt-native-packager のドキュメントを参照してください。
JDK の指定
オプションで、JDK を指定できます。詳細は、「Java バージョンの指定」を参照してください。
Procfile
Procfile は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、プロセスタイプを定義し、アプリを起動するために実行するコマンドを明示的に宣言します。sbt-native-packager
および java_application
のパッケージ原型を使用している場合、target/universal/stage/bin
に開始スクリプトがあります。Procfile
は次のようになります。ただし、hello
の代わりにアプリの名前が使用されます。
web: target/universal/stage/bin/hello
単一のプロセスタイプの web
と、その実行に必要なコマンドを宣言しています。ここでは、Web という名前が重要です。これは、このプロセスタイプを Heroku の HTTP ルーティングスタックにアタッチし、デプロイ後に Web トラフィックを受信することを宣言しています。
Web プロセスタイプ内のコマンドは、PORT
環境変数に指定されているポート番号にバインドする必要があります。そうしないと、dyno は起動しません。
ビルド成果物を Git の外部に保持する方法
.gitignore
ファイルを作成することによって、ビルド成果物がリビジョン管理の対象に入らないようにします。標準的な .gitignore
ファイルは次のとおりです。
target/
project/boot
アプリのビルドとローカルでの実行
アプリをローカルでビルドするには、次を実行します。
$ sbt compile stage
$ heroku local --port 5001
これでアプリは http://localhost:5001/ 上で実行されます。
Heroku へのアプリケーションのデプロイ
変更内容を Git にコミットしたら、アプリを Heroku にデプロイできます。
$ git add .
$ git commit -m "Added a Procfile and packaging."
$ heroku login
...
$ heroku create
Creating warm-frost-1289... done, stack is heroku-18
http://warm-frost-1289.herokuapp.com/ | git@heroku.com:warm-frost-1289.git
Git remote heroku added
$ git push heroku master
...
-----> Scala app detected
アプリをブラウザで開くには、heroku open
と入力します。
コンソール
Heroku では、heroku run
コマンドを使用して、One-off dyno (必要な場合にのみ実行するスクリプトおよびアプリケーション) を実行できます。コンソールでは、アプリケーションコードが使用できます。これを使用して、アプリの環境で試行するためにローカルターミナルにアタッチされた REPL プロセスを起動します。
$ heroku run sbt console
Running sbt console attached to terminal... up, run.1
...
scala>
詳細は、「Scala または Play アプリケーションのためのリモート sbt コンソールの実行」を参照してください。
トラブルシューティング
sbt のメジャーリリースどうしで互換性が維持されない場合もあります。ほとんどの問題は、sbt のバージョン不一致に関連するものです。