runlot

バンドルのルール

デプロイバンドルに含まれるファイルと制限事項、互換性フラグと WASM モジュールの設定方法を説明します。

runlot deploy は、デプロイに必要なファイルを 1 つの tar バンドルにまとめます。CLI、コントロールプレーン、ノードはそれぞれバンドルを検証しており、ノードも先行する検証結果だけに依存することはありません。

サイズ制限

項目制限
圧縮後のアップロード64 MiB
展開後の合計サイズ512 MiB
単一ファイル64 MiB
エントリ数20,000
パスの長さ255 バイト
runlot.json1 MiB

制限を超えると bundle_too_large エラーが発生します。多くの場合、assets ディレクトリに node_modules やビルドキャッシュが含まれていることが原因です。

compatibilityDate

runlot.json
{ "compatibilityDate": "2025-01-15" }

値は YYYY-MM-DD 形式である必要があります。指定しない場合は 2024-09-23 を使用します。ランタイムよりも未来の日付は許可されず、既定値が自動的に前倒しされることもありません。

compatibilityFlags

互換性フラグは許可リスト方式で管理します。現在使用できるフラグは nodejs_compat の 1 つだけです。

runlot.json
{ "compatibilityFlags": ["nodejs_compat"] }

許可リストにないフラグは使用できません。たとえば unsafe_module は、ユーザーコードがワーカープロセスを制御できるようになるため、マニフェストから設定できません。

通常は自分で設定する必要はありません。バンドルが node: の組み込みモジュールをインポートすると、CLI が nodejs_compat を自動的に追加します。この設定がないとモジュールを読み込めません。TypeORM、Sequelize、Knex を使用する場合も自動的に追加されます。

nodejs_compat はグローバルオブジェクト (processBuffer) とモジュール解決の方法を変更するため、既定では有効にしていません。これを使用しないワーカーの動作を、デプロイの過程で変えないようにするためです。

wasm モジュール

バンドル内の WASM は new WebAssembly.Module(bytes) でコンパイルできません。ランタイムがこの方法に対応していないため、WASM ファイルはマニフェストのモジュールとして含めます。

runlot.json (バンドル内)
{
  "main": "worker/index.js",
  "modules": [{ "name": "query_compiler.wasm", "type": "wasm", "path": "worker/query_compiler.wasm" }]
}

この設定も CLI が自動的に生成します。Prisma のクエリコンパイラはこの方法で含められます。

type に指定できるのは wasm だけです。worker はエントリーモジュールの名前として予約されており、モジュール名を重複させることはできません。

使用できない項目

  • シンボリックリンク — 意図しないノードのファイルが配信されるのを防ぐためです。
  • プロジェクトルートの外を指すパス — 例: "assets": "../../etc"
  • 絶対パスと .. のパス構成要素
  • 重複した tar エントリ — 検証したバンドルと実行するバンドルが異なることを防ぐためです。
  • パスに含まれる NUL 文字
  • サポートされていない framework の値 — 現在サポートしている値は next です。

このページの目次