Heroku での Java アプリのデプロイ
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年09月29日(金)
Table of Contents
この記事では、既存の Java アプリを Heroku にデプロイする方法について説明します。
Heroku をはじめて使う場合は、『Heroku スターターガイド (Java)』のチュートリアルから始めた方がよい場合もあります。
前提条件
この記事のベストプラクティスでは、以下があることを想定しています。
- Maven をビルドツールとして使用する既存の Java アプリ。
- 無料の Heroku アカウント
- Heroku CLI
- Java JDK
- Maven 3
概要
Heroku の Java サポートについての詳細は、『Heroku Java サポート』の記事に記載されています。
Heroku の Maven 用 Java サポートは、pom.xml
ファイルを含むアプリケーションに適用されます。
pom.xml
ファイルが正しく設定されていることの確認
アプリに依存関係がある場合、pom.xml
ファイルには maven-dependency-plugin
が含まれています。これは Maven に対し、アプリが依存する jar ファイルを target/dependency
ディレクトリにコピーするよう指示します。この方法により、これらは slug に配置され、.m2 ディレクトリを slug から除去できます。これは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>helloworld</artifactId>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals><goal>copy-dependencies</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
JDK の指定
オプションで、JDK を指定できます。詳細は、「Java バージョンの指定」を参照してください。
Procfile
Procfile は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、プロセスタイプを定義し、アプリを起動するために実行するコマンドを明示的に宣言します。Procfile
は次のようになります。
web: java $JAVA_OPTS -cp target/classes:target/dependency/* com.example.HelloWorld
単一のプロセスタイプの web
と、その実行に必要なコマンドを宣言しています。ここでは、Web という名前が重要です。これは、このプロセスタイプを Heroku の HTTP ルーティングスタックにアタッチし、デプロイ後に Web トラフィックを受信することを宣言しています。
Web プロセスタイプ内のコマンドは、PORT
環境変数に指定されているポート番号にバインドする必要があります。そうしないと、dyno は起動しません。
ビルド成果物を Git の外部に保持する方法
.gitignore
ファイルを作成することによって、ビルド成果物がリビジョン管理の対象に入らないようにします。標準的な .gitignore
ファイルは次のとおりです。
target
アプリのビルドとローカルでの実行
アプリをローカルでビルドするには、次を実行します。
Git Bash
アプリケーションを使用して、Windows でコマンドシェルを開きます。CLI のインストール中に、このアプリケーションのショートカットがデスクトップに追加されます。$ mvn clean install
$ heroku local --port 5001
これでアプリは http://localhost:5001/ 上で実行されます。
Heroku へのアプリケーションのデプロイ
変更内容を Git にコミットしたら、アプリを Heroku にデプロイできます。
$ git add .
$ git commit -m "Added a Procfile."
$ heroku login
Enter your Heroku credentials.
...
$ heroku create
Creating arcane-lowlands-8408... done, stack is heroku-18
http://arcane-lowlands-8408.herokuapp.com/ | git@heroku.com:arcane-lowlands-8408.git
Git remote heroku added
$ git push heroku main
...
-----> Java app detected
...
-----> Launching... done
http://arcane-lowlands-8408.herokuapp.com deployed to Heroku
アプリをブラウザで開くには、heroku open
と入力します。