Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Rails のサポート
      • Bundler の使用
    • Python
      • Django の使用
      • Python でのバックグランドジョブ
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Java の高度なトピック
      • Spring Boot の使用
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • 言語サポート
  • Java
  • アクティベーションHeroku の Java サポート

アクティベーションHeroku の Java サポート

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2023年01月18日(水)

Table of Contents

  • アクティベーション
  • ビルド動作
  • 環境
  • サポートされている Java バージョン
  • アドオン
  • 参考情報

Heroku は Java のさまざまな実装での Java アプリケーションの実行に対応しており、フレーワーク固有のワークフローのためのサポートを備えています。

このドキュメントでは、Java アプリケーションの認識と実行に関連した Heroku の一般的な動作について説明します。Heroku での一般的な Java サポートとは、Play を除くすべてのフレームワークに対するサポートのことを言います。Play フレームワークのサポートについては、Play フレームワークサポートリファレンス​を参照してださい。

フレームワーク固有のチュートリアルについては、次を参照してください。

  • Heroku スターターガイド (Java)
  • Java チュートリアル

アクティベーション

Heroku での Java アプリケーション用のデフォルトのビルドシステムは Maven です。pom.xml​ を含むアプリケーションには、Maven 用の Heroku Java サポートが適用されます。

デプロイされたアプリケーションが Java アプリケーションとして認識された場合、Heroku は Java app detected​ と応答します。

$ git push heroku master
-----> Java app detected

ビルド動作

アプリをビルドするには以下のコマンドを実行します。

$ mvn -B -DskipTests clean dependency:list install

ただし、Heroku はアプリケーションのリポジトリ内に mvnw​ スクリプトを検出した場合、デフォルトの Maven インストールの代わりにこのスクリプトを実行します。この動作は Maven バージョンを明示的に設定する​ことによってオーバーライドできます。

パフォーマンスを向上させるため、Mavenリポジトリはビルド間でキャッシュされます。

環境

dyno にはブート時に次の環境変数が設定されます。

  • PORT​: Web プロセスがバインドされる HTTP ポート
  • JAVA_HOME​: JDK インストールディレクトリの場所
  • LD_LIBRARY_PATH​: JDK 共有ライブラリの場所
  • JDBC_DATABASE_URL​: ​DATABASE_URL​ 変数が存在する場合、変換された形式がこれに入力されます。詳細は、「Java を使用して Heroku でリレーショナルデータベースに接続する​」を参照してください。
  • JAVA_TOOL_OPTIONS​: dyno サイズに基づくデフォルトの Java オプション
  • JAVA_OPTS​: dyno サイズに基づくデフォルトの Java オプション (JAVA_TOOL_OPTIONS​ と同様)

JAVA_TOOL_OPTIONS について

JAVA_TOOL_OPTIONS​ は Java によって直接サポートされ、コマンドラインにアクセスできないかコマンドラインを変更できない環境でコマンドラインを拡張する​ためのものです。Heroku ではこれを dyno サイズに基づくデフォルトの Java オプションを設定するために使用します。Java ではこれが自動的に選択されるため、これを Procfile​ コマンドに含める必要はありません。

これらの設定を Procfile​ コマンドでオーバーライドすることができます (デフォルトよりも優先される)。たとえば、-Xmx300m​ のデフォルトを変更する場合は、次を渡すことができます。

web: java -Xms150M -jar target/myapp.jar

独自の JAVA_TOOL_OPTIONS​ 環境変数を設定することもできます。独自の変数を設定すると、その値は Heroku のデフォルトに追加されて、優先されます。Procfile​ コマンドやカスタムの JAVA_TOOL_OPTIONS​ でオーバーライドされない個別のオプションは、引き続き有効になります。

Java プロセスが dyno で開始されると、次の Java オプションが JAVA_TOOL_OPTIONS​ に追加され、Java によって自動的に選択されます。

  • -Dfile.encoding=UTF-8
  • -XX:+UseContainerSupport​ (Java 11 以上の場合)

dyno サイズのための環境の調整

新しい dyno タイプ​が選択されると、以下の設定が自動的に JAVA_TOOL_OPTIONS​ に追加されます。

  • eco​、basic​、または standard-1x​: ​-Xmx300m -Xss512k -XX:CICompilerCount=2
  • standard-2x​: ​-Xmx671m -XX:CICompilerCount=2​
  • performance-m​: ​-Xmx2g
  • performance-l​: ​-Xmx12g

Private Space dyno の場合、値は以下のようになります。

  • private-s​: ​-Xmx671m -XX:CICompilerCount=2​
  • private-m​: ​-Xmx2g
  • private-l​: ​-Xmx12g

リソース使用量の監視

dyno のリソース使用量を監視するために追加の JVM フラグを使用できます。リソース使用量を監視するには、次のフラグをお勧めします。

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC

JVM プロセスの調整について詳しくは、トラブルシューティング​の記事を参照してください。

サポートされている Java バージョン

Heroku は現在、デフォルトで OpenJDK 8​ を使用してアプリケーションを実行しています。他の OpenJDK バージョンも利用できます。選択した OpenJDK バージョンに応じて、アプリをデプロイするたびに、その JDK の使用可能な最新のバージョンが使用されます。

各 OpenJDK バージョンと Heroku スタックに対する現在のデフォルトバージョンは、次のとおりです。

​OpenJDK バージョン ​heroku-18 ​heroku-20 ​heroku-22
​OpenJDK 7 ​1.7.0_352 ​1.7.0_352 ​1.7.0_352
​OpenJDK 8 ​1.8.0_362 ​1.8.0_362 ​1.8.0_362
​OpenJDK 11 ​11.0.18 ​11.0.18 ​11.0.18
​OpenJDK 13 ​13.0.14 ​13.0.14 ​13.0.14
​OpenJDK 14 ​14.0.2 ​14.0.2 ​-
​OpenJDK 15 ​15.0.10 ​15.0.10 ​15.0.10
​OpenJDK 16 ​16.0.2 ​16.0.2 ​-
​OpenJDK 17 ​17.0.6 ​17.0.6 ​17.0.6
​OpenJDK 18 ​18.0.2.1 ​18.0.2.1 ​18.0.2.1
​OpenJDK 19 ​19.0.2 ​19.0.2 ​19.0.2

​赤色のテキストと背景でマークアップされている​行は、サポートが完全に終了し、上流の保守担当からいかなる種類のアップデートも受け取っておらず​、Heroku によるサポートが終了している OpenJDK バージョンを示しています。

アプリが使用する OpenJDK は slug に含められ、slug のサイズに影響します。

Java バージョンの指定

system.properties​ というファイルをアプリケーションに追加することによって Java バージョンを指定できます。

ファイル内の java.runtime.version​ プロパティを設定します。

java.runtime.version=11

Refer to the supported Java versions table for accepted major version values. Because the default is 8, you don’t need this file if you would like to use Java 8.

次のような値を使用することによって、JDK アップデートバージョンを固定することもできます。

java.runtime.version=1.8.0_202

ただし、より一般的な 1.8​ 形式を使用することをお勧めします。こうすることで、あらゆるセキュリティ更新が自動的にインストールされます。

OpenJDK ディストリビューションの指定

Heroku では、Azul® Zulu®​ または Heroku のいずれかからの OpenJDK のビルドがサポートされています。どちらのディストリビューションも同じソースから構築されており、Java SE 仕様に完全に準拠しています。OpenJDK の Azul® Zulu® ビルドはさらに TCK/JCK​ 認証を受けており、推奨される OpenJDK ディストリビューションです。

各スタックでの現在の OpenJDK のデフォルトディストリビューションは、次のとおりです。

​heroku-18 ​heroku-20 ​heroku-22
​Heroku ​Heroku ​Azul® Zulu®

デフォルト以外のディストリビューションの使用

アプリでデフォルト以外のディストリビューションを使用するには、Java バージョンを指定する​必要があります。バージョン文字列に heroku-​ または zulu-​ の接頭辞を付けて、それぞれのディストリビューションを選択します。

OpenJDK 11 を使用し、Azul® Zulu® を OpenJDK ディストリビューションとして明示的に選択するには、以下を system.properties​ に追加します。

java.runtime.version=zulu-11

Java バージョンのアップグレード

すべての Java アプリは、デプロイされたときに限り、利用可能な最新の JDK バージョンに自動的にアップグレードされます。アプリが再デプロイされない場合、または system.properties​ ファイルに特定のバージョンが構成されていた場合、これらはアップグレードされません。

Maven バージョンの指定

Heroku では、Maven バージョンを定義するために推奨されるメカニズムである Maven Wrapper​ のサポートが提供されています。Heroku はリポジトリのルートディレクトリに mvnw​ ファイルを検出した場合、このスクリプトを使用して Maven プロセスを起動します。

また、次のように maven.version​ プロパティを設定することによって、system.properties​ ファイルで Maven バージョンを指定できます。

maven.version=3.6.2

If this property is defined, the mvnw script will be ignored.

maven.version​ で許可される値は次のとおりです。

  • 3.2.5
  • 3.3.9
  • 3.5.4
  • 3.6.2

バージョンを指定しない場合のデフォルトは 3.6.2 です。新しいバージョンに自動的にアップグレードされることはありません。現在 3.0.5 を使用していて最新バージョンにアップグレードする場合、system.properties​ ファイルを作成してバージョンを指定する必要があります。

デフォルトの Web プロセスタイプ

Java buildpack は Spring Boot​ および Thorntail​ の Web フレームワークの使用を自動的に検出します。Spring Boot の場合、次のコマンドで web​ プロセスタイプを作成します。

java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar

Thorntail の場合、buildpack はデフォルトの web​ プロセスタイプに対して次のコマンドを使用します。

java -Dswarm.http.port=$PORT $JAVA_OPTS -jar target/*.jar

Procfile​ を使用して、これらのデフォルトをオーバーライドしたり、カスタムプロセスタイプを定義したりできます。適切なコマンドは、ご使用のアプリおよびフレームワークによって異なります。Procfile​ の設定については、いずれかの Java チュートリアル​を参照してください。

アドオン

pom.xml​ 内で Postgres JDBC ドライバー​や pgjdbc-ng ドライバー​に依存関係を持つ Java アプリケーションについては、Postgres データベースが自動的にプロビジョニングされます。これにより DATABASE_URL​ 環境変数が入力されます。

Postgres アドオンが必要ない場合、次のコマンドを実行してアドオンを削除できます。

$ heroku addons:destroy DATABASE --app sushi

参考情報

  • Java プロセスのウォームアップ
  • Java アプリ用のデータベース移行の実行
  • Java アプリケーションの slug のサイズの削減

関連カテゴリー

  • Java
Java に関するよくある質問 Heroku での Java アプリのデプロイ

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences