Buildpacks

弊社では、Herokuが管理するオープンソースプロジェクト「Buildpacks」を使用し、リポジトリに基づいてアプリケーションのコンテナを自動で作成します。Buildpacksは、アプリケーションのデプロイ時に実行され、依存関係をインストールし、環境を構成するためのスクリプトです。

Buildpacksを使用するには、アプリケーションの追加時に「コンテナイメージを自動で設定」を選択するか、アプリケーションの設定(「設定」>「基本情報」>「情報を編集」)で設定可能です。

対応言語

Buildpacksでは、以下のアプリケーション言語がサポートされています。

アプリケーションで異なる言語バージョンを使用するには、アプリケーションのファイルでバージョンを設定してください。

Buildpacksでサポートされていない言語を使用するには、まずその言語がNixpacksでサポートされているかどうかを確認してください。サポートされていない場合は、Dockerfileを使用します。アプリケーションの追加時に「Nixpacksを使用してコンテナイメージを設定」、または「Dockerfileを使用してコンテナイメージを設定」を選択することができます。

Buildpacksの設定

アプリケーションによっては設定が不要ですが、一部は実行に専用のコマンドや設定が必要なものがあります。

環境変数─場合によっては、アプリケーションを実行するために特定の環境変数の設定が必要になることがあります。

プロセス─Kinstaでは、ウェブプロセスのコマンドを自動検出しますが、必要に応じて変更したり、追加のプロセスを定義したりすることができます。

Procfileでのプロセス─必要に応じて、アプリケーションのコード内のProcfileでプロセスを定義することができます。

Buildpacksの追加と編集

Buildpacksは、アプリケーションの設定で管理可能です。Buildpacksを追加するには「Buildpacksを追加」を、削除したり、順番を変更したりするには、「Buildpacksを編集」をクリックしてください。

Buildpacksを追加すると、自動的にBuildpacks一覧の最後に追加されます。Buildpacksをドラッグ&ドロップすると、「Buildpacksの編集」画面で順序を変更することができます。

Buildpacksのバイナリディレクトリ

Buildpacksでは、バイナリディレクトリがアプリケーション言語デフォルトのものと異なる場合があります。各Buildpacks言語で使用されるバイナリディレクトリには、以下のようなものがあります。

言語ディレクトリ
Node.js/layers/heroku_nodejs-engine/dist/bin/node
Ruby/usr/bin/ruby
Python/usr/bin/python
Java/layers/heroku_jvm/openjdk/bin/java
ScalaScalaには、他のコンパイラ言語とは異なり、特定のデフォルトバイナリパスがありません。Scalaプログラムをコンパイルすると、Java仮想マシン(JVM)上で動作するバイトコードが生成されます。

コンパイルされたScalaクラスは、通常コードのパッケージ構造を反映したディレクトリ構造に格納されます。Javaのクラスが構成される方法と似ています。デフォルトでは、Scalaのソースファイルをコンパイルすると、コンパイルされた.classファイルは、ソースコードと同じディレクトリ(パッケージ宣言に基づくサブディレクトリ構造内)に配置されます。

必要に応じて、Buildpacksの代わりにDockerfileを使用して、Scalaのランタイムツールをインストールすることができます。

PHP/workspace/.heroku/php/bin/
GoGoには、他のコンパイラ言語とは異なり、特定のデフォルトバイナリパスがありません。Goプログラムをコンパイルすると通常、結果のバイナリ実行ファイルは、ソースコードと同じディレクトリにデフォルトで配置されます。

必要に応じて、Buildpacksの代わりにDockerfileを使用して、Goのランタイムツールをインストールすることができます。

Buildpacksの言語バージョンを指定する

Buildpacksを使用してコンテナイメージを設定」を選択すると、アプリケーションのコードでバージョンを指定しない場合、Buildpacksは最新バージョンを使用します。異なる言語バージョンを使用するには、アプリケーションのファイルでバージョンを指定してください。

バージョンの設定方法は、お使いのプログラミング言語によって異なります。以下に、現在サポートされている言語の例をご紹介します。

Go

Goのバージョンを指定するには、アプリケーションのgo.modファイルに以下を記述します。

// +heroku goVersion go1.11
go 1.21.1

Java

Java のバージョンを指定するには、アプリケーションのsystem.propertiesファイルに以下を記述します。

java.runtime.version=11

Node.js

Node.js のバージョンとnpmのバージョンを指定するには、アプリケーションのpackage.jsonファイルに以下を記述します。

"engines": {
  "node": "^16.14.0",
  "npm": "^8.3.1"
}

React

Reactのバージョンを指定するには、package.jsonファイルの依存関係でバージョンを置き換えるか記述してください。

"react": "^17.0.2"

ReactアプリケーションでNode.jsとnpmのバージョンを指定するには、アプリケーションのpackage.jsonファイルに以下を記述します。

"engines": {
  "node": "^16.14.0",
  "npm": "^8.3.1"
}

PHP

PHPのバージョンを指定するには、アプリケーションのcomposer.jsonファイルに以下を貼り付けてください。

{
  "require": {
    "php": "~8.1.0"
  }
}

Python

Pythonのバージョンを指定するには、アプリケーションのruntime.txtファイルに以下を貼り付けてください。

python-3.10.13

モジュールのバージョンは、requirements.txtファイルでも指定可能です。

Django==4.1
virtualenv==20.18.0

Ruby

Rubyのバージョンを指定するには、Gemfileに以下を記述します。

ruby "3.0.6"

Scala

Scalaのバージョンを指定するには、アプリケーションのbuild.sbtファイルに以下を記述します。

scalaVersion := "3.2.2"
この記事は役に立ちましたか?