Nixpacks
弊社では、Railwayによって保守管理されているオープンソースプロジェクト「Nixpacks」を使用して、リポジトリに基づいてアプリケーションのコンテナイメージを自動作成します。Nixpacksはアプリケーションのデプロイ時に実行されるスクリプトで、アプリケーションの依存関係をインストールし、環境を設定します。少ないリソースで20以上の言語をサポートしています。
現在BuildpacksまたはDockerfileを使用している場合は、アプリケーションの「設定」>「ビルド」画面に移動し、「ビルド環境」セクションの「設定の更新」で変更可能です。
サポート言語
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が必要になります。
Nixpacksの設定
アプリケーションによっては設定が不要なものもありますが、実行に以下のようなコマンドや設定が必要になることもあります。
環境変数─アプリケーションを実行するために、特定の環境変数の設定が必要になることがあります。
プロセス─ウェブプロセスコマンドは自動検出されますが、必要に応じて変更し、追加のプロセスを定義することができます。
Procfileでのプロセス─必要に応じて、アプリケーションのコード内のProcfileでプロセスを定義することができます。
ビルドの設定
リポジトリにnixpacks.tomlファイルを追加することで、Nixpacksが生成する最終的なDockerイメージをカスタマイズすることができます。この設定ファイルを使用すると、プロバイダーの追加指定、追加パッケージのインストール、ビルドコマンドの編集、startコマンドの上書き、さらには新規ビルドフェーズの定義が可能になり、ビルドプロセスと生成されるイメージをよりきめ細かく制御可能です。
nixpacks.tomlファイルの設定方法の詳細は、Nixpackの公式ドキュメントをご覧ください。
Nixpacksとpnpm
Nixpacksでpnpmを使用する場合は、PNPM_HOMEに以下の場所を使用します。
ENV PNPM_HOME="/app/.pnpm"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.18Java
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環境変数を設定してください。
Ruby
Rubyのバージョンを指定するには、アプリケーション内の.ruby-versionファイルに以下を記述します。
3.0.6Scala
Scalaのバージョンを指定するには、アプリケーションのbuild.sbtファイルに以下を記述します。
scalaVersion := "3.2.2"