Nixpacks
弊社では、リポジトリに基づいてアプリケーションのコンテナイメージを自動的に作成する手段の一つとして、Railwayによって開発、保守管理されているオープンソースプロジェクト「Nixpacks」をご利用いただけます。Nixpacksは、アプリケーションのデプロイ時に実行されるスクリプトで、アプリケーションの依存関係をインストールし、環境を設定します。
Nixpacksにはリソースの消費量が少ない、20以上の言語をサポートしているなどのメリットがあります。アプリケーションの追加時に選択するか、アプリケーションの設定(「設定」>「基本情報」>「情報を編集」)でビルド環境オプションを変更し使用することができます。
サポート言語
Nixpacksでは、以下の言語がサポートされています。
- Clojure
- Cobol
- Crystal
- C#/.NET
- Dart
- Deno
- Elixir
- F#
- Go
- Haskell
- Java
- Lunatic
- Node.js
- PHP
- Python
- Rust
- Swift
- Scala
- Zig
異なるバージョンを使用するには、アプリケーションのファイルでバージョンを指定してください。
Nixpacksを使用する際、通常ビルド用のサービスは自動的に検出されるため、選択や追加は不要です。サービスを選択、変更したい場合には、Nixpacksの設定ファイルで定義してください。
Nixpacksやビルドパックでサポートされていない言語を使用する場合は、Dockerfileが必要になります。アプリケーションを追加する際、「Dockerfileを使用してコンテナイメージを設定」を選択してください。
Nixpacksの設定
アプリケーションによっては設定が不要なものもありますが、実行に以下のようなコマンドや設定が必要になることもあります。
環境変数─アプリケーションを実行するために、特定の環境変数の設定が必要になることがあります。
プロセス─ウェブプロセスコマンドは自動検出されますが、必要に応じて変更し、追加のプロセスを定義することができます。
Procfileでのプロセス─必要に応じて、アプリケーションのコード内のProcfileでプロセスを定義することができます。
Nixpacksのバイナリディレクトリ
Nixpacksでは、バイナリディレクトリがアプリケーション言語デフォルトのバイナリディレクトリと異なる場合があります。一般的な言語で使用されるバイナリディレクトリには、以下のようなものがあります。
言語 | ディレクトリ |
---|---|
Node.js | /nix/var/nix/profiles/default/bin/node |
Ruby | /nix/var/nix/profiles/default/bin/ruby |
Python | /nix/var/nix/profiles/default/bin/python |
Java | /nix/var/nix/profiles/default/bin/java |
Scala | Scalaには、他のコンパイラ言語とは異なり、特定のデフォルトバイナリパスがありません。Scalaプログラムをコンパイルすると、Java仮想マシン(JVM)上で動作するバイトコードが生成されます。
コンパイルされたScalaクラスは、通常コードのパッケージ構造を反映したディレクトリ構造に格納されます。Javaのクラスが構成される方法と似ています。デフォルトでは、Scalaのソースファイルをコンパイルすると、コンパイルされた.classファイルは、ソースコードと同じディレクトリ(パッケージ宣言に基づくサブディレクトリ構造内)に配置されます。 必要に応じて、Nixpackの代わりにDockerfileを使用して、Scalaのランタイムツールをインストールすることができます。 |
PHP | /nix/var/nix/profiles/default/bin/php |
Go | Goには、他のコンパイラ言語とは異なり、特定のデフォルトバイナリパスがありません。Goプログラムをコンパイルすると通常、結果のバイナリ実行ファイルは、ソースコードと同じディレクトリにデフォルトで配置されます。
必要に応じて、Nixpackの代わりにDockerfileを使用して、Goのランタイムツールをインストールすることができます。 |
Nixpacksの言語バージョンを設定する
「Nixpacksを使用してコンテナイメージを設定」を選択すると、アプリケーションのコードでバージョンを指定しない場合、Nixpacksは最新バージョンを使用します。異なる言語バージョンを使用するには、アプリケーションのファイルまたは環境変数でバージョンを指定してください。
バージョンの設定方法は、お使いのプログラミング言語によって異なります。以下に、現在サポートされている言語の例をご紹介します。
Go
Goのバージョンを指定するには、アプリケーションのgo.modファイルに以下を記述します。
go 1.18
Java
Javaのバージョンを指定するには、ビルドプロセス中にこの変数が利用可能であることを確認した上で、NIXPACKS_JDK_VERSION
環境変数を設定します。
Gradleを使用している場合は、ビルドプロセス中にこの変数が利用可能であることを確認した上で、NIXPACKS_GRADLE_VERSION
環境変数を設定します。
Node.js
Node.jsのバージョンを指定するには、次のいずれかを実行します。
アプリケーションのpackage.jsonファイルに以下を貼り付けてください。
"engines": {
"node": "18"
}
ビルドプロセス中にこの変数が利用可能であることを確認した上で、NIXPACKS_NODE_VERSION
環境変数を設定してください。
PHP
PHPのバージョンを指定するには、アプリケーションのcomposer.jsonファイルに以下を貼り付けてください。
{
"require": {
"php": "8.2"
}
}
Python
Pythonのバージョンを指定するには、以下のいずれかを実行します。
- アプリケーションのruntime.txtファイルに以下を記述します。
python-3.10.6
- リポジトリの.python-versionファイルに以下を記述します。
3.10.6
- ビルドプロセス中にこの変数が利用可能であることを確認した上で、
NIXPACKS_PYTHON_VERSION
環境変数を設定してください。
Scala
Scalaのバージョンを指定するには、アプリケーションのbuild.sbtファイルに以下を記述します。
scalaVersion := "3.2.2"