進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

Heroku での Java アプリケーションの変更とサービスの追加

アプリケーションのローカルでの実行

Heroku で実行するアプリケーションはどれも、いずれ新たな機能や拡張が必要になります。こうした変更を行う際に、問題を簡単にデバッグし、テストを実行して、アプリケーションが機能していることを確認するために、Java プロセスをローカルで実行できることが望まれます。この単元では、サンプルの Java アプリケーションを Heroku プラットフォームで実行する場合と同じように実行する方法を学習します。続いて、ローカル環境でアプリケーションに変更を行い、Heroku にリリースします。

Heroku は、ルートディレクトリの pom.xml ファイルの存在によって Java アプリケーションを認識します。各自のアプリケーションには、mvn archetype:create コマンドを使用してこのファイルを作成できます。リリース済みのデモアプリケーションには pom.xml が含まれています (Github で確認できます)。以下はその抜粋です。

<dependencies>    
   <dependency>      
    <groupId>org.springframework.boot</groupId>      
    <artifactId>spring-boot-starter-actuator</artifactId>    
   </dependency>    
   <dependency>      
    <groupId>org.springframework.boot</groupId>      
    <artifactId>spring-boot-starter-web</artifactId>    
   </dependency>    
   ...
</dependencies>

pom.xml ファイルは、アプリケーションとともにインストールされる必要のある連動関係を指定します。アプリケーションがリリースされると、Heroku がこのファイルを読み取り、mvnw clean install コマンドを使用して連動関係をインストールします。

もう 1 つの system.properties というファイルは、使用する Java のバージョンを判断します (Heroku ではさまざまなバージョンをサポートしています)。このファイル (省略可能) のコンテンツはかなり明快です。

java.runtime.version=1.8

ローカルディレクトリで ./mvnw clean install を実行して、Maven をインストールして実行します (Windows を使用している場合は、./mvnw ではなく、mvnw.cmd コマンドを使用する必要があります)。

./mvnw clean install

これで連動関係がインストールされ、アプリケーションをローカルで実行するシステムの準備が整います。このアプリケーションには Java 8 が必要ですが、Java の別バージョンでも各自のアプリケーションを開発できます。

ここで、heroku local コマンドを使用して、アプリケーションをローカルで起動します。このコマンドは Heroku CLI の一部としてインストールされています。

heroku local

heroku local の出力例

Heroku クラウドの場合と同様に、heroku localProcfile を検証して、実行するコマンドを判断します。

このコマンドを実行したまま、Web ブラウザで http://localhost:5000 を開きます。アプリケーションがローカルで実行されていることがわかります。

アプリケーションのローカルでの実行を停止するには、ターミナルウィンドウに戻り、Ctrl+C キーを押して終了します。

ローカルの変更の転送

このステップでは、ローカルの変更を Heroku 経由でアプリケーションに反映させる方法を学習します。例のとおり、アプリケーションを変更して新しい HTML ページを表示します。

次のメソッドを Main クラスに追加して src/main/java/com/example/Main.java ファイルを変更します。

@RequestMapping("/hello")
String hello(Map<String, Object> model) {
  model.put("message", "Welcome to my app!");
  return "hello";
}

続いて、以下のコンテンツを使用して src/main/resources/templates/hello.html ファイルを作成します。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" 
th:replace="~{fragments/layout :: layout (~{::body},'hello')}">
<body>  
  <div class="container">    
   <p th:text="${message}"/>  
  </div>
</body>
</html>

ここで、以下のコマンドを実行してローカルでテストします (前述のとおり、Windows を使用している場合は mvnw.cmd を使用します)。

./mvnw clean install
heroku local web

ブラウザを http://localhost:5000/hello/hello ルートにあるアプリケーションにポイントします。表示されるお知らせメッセージを確認できます。

いよいよ、これらの変更を Heroku にリリースします。Heroku へのリリースはほぼすべて、同じパターンに従います。

最初に、変更したファイルをローカルの git リポジトリに追加します。

git add .

次に、変更をリポジトリにコミットします。

git commit -m "Demo"

アプリケーションの heroku リモートリポジトリに変更を転送します。

git push heroku master

最後に、/hello ルートでアプリケーションを開いて、すべて機能していることを確認します。

heroku open hello

アプリケーションをローカルで実行したときに表示されたものと同じテキストが Web ブラウザに示されます。

アドオンのプロビジョニング

アドオンとは、サードパーティのクラウドサービスで、保持やロギングから、監視まで、アプリケーションですぐに使える追加サービスを提供します。Java アプリケーションとともに Postgres データベースというアドオンが自動的にインストールされます。Postgres データベースの管理方法についての詳細は、Heroku Postgres Dev Center (Heroku Postgres 開発センター) を参照してください。 

ここでは、ロギング用のアドオンを追加する方法を説明します。

デフォルトで Heroku は、アプリケーションから出力された 1,500 行分のログを保存します。その一方で、完全なログストリームをサービスとして利用することもできます。実際、数社のアドオンプロバイダが、ログの保持、検索、メールや SMS のアラートなどの機能を備えたロギングサービスを記述しています。

このステップでは、こうしたロギングアドオンの 1 つである Papertrail をプロビジョニングします。

Papertrail ロギングアドオンをプロビジョニングします。

heroku addons:create papertrail

papertrail の出力

乱用を防止するために、アドオンをプロビジョニングする場合はアカウント確認が必要です。アカウントの確認を受けていない場合は、確認サイトにリダイレクトされます。

アプリケーションの Heroku URL に数回アクセスすると、この特定のアドオンの実際の動作を確認できます。アクセスするたびに新たなログメッセージが生成され、papertrail アドインに転送されます。papertrail コンソールにアクセスして、ログメッセージを確認します。

heroku addons:open papertrail

ブラウザに Papertrail Web コンソールが開き、最新のログイベントが表示されます。このインターフェースを使用して、アラートの検索や設定を実行できます。

ログされたイベントのリスト

おめでとうございます! Java アプリケーションを本番にリリースする準備ができました。 

[Verify Step (ステップを確認)] をクリックして、プロジェクトを終了します。

リソース