デフォルトでは、アプリケーション管理機能は、バージョンが heroku/builder:24 の Heroku Cloud Native Buildpacks(CNBs)を使用してアプリケーションをビルドします。このトピックでは、Heroku CNBs を使用して、Java、Python、Go、Node.js などのさまざまなプログラミング言語でアプリケーションを構成する方法について説明します。
コンテナイメージとコンテナの構成に関する注意事項
コンテナイメージのビルド時に環境変数を構成する
コンテナイメージのビルド時に環境変数を指定するには、
project.tomlファイルを追加します。たとえば、MAVEN_OPTSを指定します。説明project.tomlの詳細については、このトピックの「project.toml の概要」セクションをご参照ください。コンテナランタイムパラメータを渡すための環境変数を構成する
コンテナランタイムパラメータは、環境変数でアプリケーションに渡されます。コードが環境変数からパラメータを読み取ることができることを確認してください。コンテナをデプロイするときに、コンテナの環境変数を指定できます。アプリケーション管理は、環境変数を
envファイルに保存し、--env-fileオプションでコンテナプロセスに変数を渡します。
アプリケーション構成
コードリポジトリでは、次のプログラミング言語でのみアプリケーションを直接デプロイできます。このセクションでは、さまざまなプログラミング言語でアプリケーションを構成する方法について説明します。
Java
アプリケーションの要件
Java アプリケーションには、次の要件が適用されます。
コードリポジトリのルートディレクトリには、
pom.xmlファイルが含まれている必要があります。Maven または Gradle を使用してアプリケーションコードをビルドできます。
アプリケーションの JDK バージョンがサポートされている必要があります。
構成に関する注意事項
OpenJDK のバージョン
OpenJDK メジャーバージョン 8、11、17、21、および 22 がサポートされています。CNBs は、指定された OpenJDK メジャーバージョンの最新のマイナーバージョンをインストールします。
説明OpenJDK のバージョンを指定しない場合、CNBs はデフォルトで最新の長期サポート(LTS)バージョン(OpenJDK 8、11、17、または 21 の最新のマイナーバージョンなど)をインストールします。
OpenJDK のバージョンを指定するには、アプリケーションのルートディレクトリに
system.propertiesJava プロパティファイル を追加します。次のサンプルコードは、OpenJDK 21 を指定する方法を示しています。java.runtime.version=21Maven オプション
MAVEN_OPTS環境変数を使用して、Maven 設定を適用できます。この環境変数を指定するには、project.tomlファイルを追加します。デフォルトでは、CNBs は Maven 3.9 のみをサポートしています。アプリケーションが他の Maven バージョンに依存している場合は、Maven Wrapper(mvnw) を使用します。CNBs は、プロジェクトのルートディレクトリにある
mvnwを使用してアプリケーションをビルドします。Maven Wrapper を使用するには、次のコマンドを実行します。
mvn wrapper:wrapper # .mvn ディレクトリ、mvnw、および mvnw.cmd ファイルを生成します。 git add .mvn mvnw mvnw.cmd git commit -m "support maven wrapper" git push origin # ブランチをコードリポジトリに送信します。Procfile
Procfileは、アプリケーションを起動するために使用されるプロセスタイプとコマンドを宣言します。詳細については、このトピックの「Procfile の概要」セクションをご参照ください。Spring Boot アプリケーションの場合、Procfileは、プラットフォームが Spring Boot アプリケーションを起動する方法を定義します。次のサンプルコードは、Spring Boot アプリケーションの一般的なProcfileを示しています。web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/demo-0.0.1-SNAPSHOT.jar
サンプルプロジェクト
GitHub: github-java-springboot-demo
Gitee: gitee-java-springboot-demo
詳細については、「buildpacks-jvm」をご参照ください。
Python
アプリケーションの要件
Python アプリケーションの場合、ソースコードのルートディレクトリは requirements.txt ファイルまたは poetry.lock ファイルに保存する必要があります。
構成に関する注意事項
Python のバージョン
デフォルトでは、CNBs は最新の Python バージョン(3.13)をインストールします。他の Python バージョンを使用する場合は、アプリケーションのルートディレクトリに
.python-versionファイルを追加し、使用する Python バージョンを指定します。サンプルコード:$ cat .python-version 3.13Procfile
Procfileは、アプリケーションのルートディレクトリにあるテキストファイルです。Python アプリケーションの場合、Procfile は、アプリケーションを起動するために使用されるプロセスタイプとコマンドを宣言します。次のサンプルコードは、Python アプリケーションのProcfileを示しています。web: gunicorn --config gunicorn.conf.py gettingstarted.wsgi説明Procfile は、単純なアプリケーションには必須のファイルではありません。ただし、Python アプリケーションに Procfile を追加することを強くお勧めします。詳細については、このトピックの「Procfile の概要」セクションをご参照ください。
サンプルプロジェクト
GitHub: github-python-falcon-demo
Gitee: gitee-python-falcon-demo
詳細については、「buildpacks-python」をご参照ください。
Go
アプリケーションの要件
Go アプリケーションには、次の要件が適用されます。
コードリポジトリのルートディレクトリには、
go.modファイルが含まれている必要があります。go.modファイルのmodule nameには、少なくとも 1 つのスラッシュ(/)が含まれている必要があります。Go アプリケーションは、コンパイルに Go 1.16 以降をサポートしています。Go アプリケーションは、依存関係のインストールに Go モジュールもサポートしています。
説明CNBs は、Go モジュールなどの Go 依存関係管理のみをサポートしています。dep、godep、govendor、glide などのサードパーティの依存関係マネージャーはサポートされていません。
構成に関する注意事項
Go のバージョン
CNBs は、
go.modファイルのgo行から Go のバージョンを読み取ります。たとえば、CNB は Go 1.17 から最新のリリースを選択します。サンプルコード:
go 1.17依存関係管理
コードリポジトリのルートディレクトリに
vendor/modules.txtファイルが含まれている場合、CNBs は Go モジュールをダウンロードする代わりに、vendorディレクトリにある Go モジュールを使用しようとします。コードリポジトリのルートディレクトリに
vendor/modules.txtファイルが含まれていない場合、CNBs はコンパイル前に Go モジュールをダウンロードします。
パッケージのインストール
CNBs は、プロジェクトによって検出されたすべての
mainパッケージをビルドします。
サンプルプロジェクト
GitHub: github-go-web-demo
Gitee: gitee-go-web-demo
詳細については、「buildpacks-go」をご参照ください。
Node.js
アプリケーションの要件
Node.js アプリケーションには、次の要件が適用されます。
ビルドプロセス中に、有効な
package.jsonファイルを CNBs 用に準備する必要があります。依存関係をインストールするには、有効な
npm、yarn、またはpnpm lockファイルを準備する必要があります。
構成に関する注意事項
Node.js のバージョン
Node.js のバージョンを指定するには、package.json ファイルの engines.node フィールドを指定します。Node.js のバージョンを指定しない場合、最新の LTS バージョンが使用されます。
package.json ファイルで Node.js のバージョンを指定します。たとえば、20 行目に最新バージョンを指定します。サンプルコード:
{"
engines":{"
node":"20.x"
}
}このフィールドは、package.json ファイルと同じ構文をサポートして、セマンティックバージョンを制御します。予期しない変更を防ぐために、Node.js のバージョンを指定することを強くお勧めします。
サンプルプロジェクト
GitHub: github-nodejs-express-demo
Gitee: gitee-nodejs-express-demo
詳細については、「buildpacks-nodejs」をご参照ください。
PHP
アプリケーションの要件
プログラミング言語が PHP の場合、アプリケーションは次の要件を満たす必要があります。
PHP 8.2、PHP 8.3、および PHP 8.4 をサポートします。
アプリケーションリポジトリのルートディレクトリには、
composer.jsonファイルとcomposer.lockファイルが含まれている必要があります。
構成
PHP
composer.json で PHP ランタイムバージョンを指定します。次のサンプルコードは、PHP 8.2.0 以降のバージョンを指定しています。
{
"require": {
"php": "^8.2.0"
}
}例
GitHub: github-php-demo
Gitee: gitee-php-demo
詳細については、「buildpacks-php」および「php-support」をご参照ください。