Table of Contents [expand]
最終更新日 2024年10月16日(水)
この記事では、既存の 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 のバージョン不一致に関連するものです。