コンテンツにスキップ
公式サイト →

Keelson Deploy Spec

Spec version: 2025-03-14 / Raw text (AI向け): /ja/docs/reference/deploy-spec.txt

この文書は、Keelson にアプリをデプロイする際の対応ランタイム・制約・成立条件を定義する正本です。デプロイの可否判断は、この文書に従ってください。

クイックスタートや操作手順は デプロイする を参照してください。


Keelson におけるデプロイ成功とは、ビルドが完了することではありません。次の条件をすべて満たした場合にのみ、デプロイは成功とみなされます。

  1. アプリのビルドが完了している
  2. アプリのプロセスが起動している
  3. ヘルスチェックに通過している
  4. アプリ URL(https://<slug>.keelson.run)が発行されている
  5. アプリ URL にアクセスできる状態である

ビルドが成功しても、起動に失敗した場合やヘルスチェックに通らない場合は、デプロイ成功ではありません。


すべてのデプロイには keelson.yaml が必要です。プロジェクトのルートディレクトリに配置します。

最小構成:

slug: my-app
runtime: python-slim
command: "pip install --user -r requirements.txt && python app.py"
env:
PORT: "8080"

各フィールドの詳細は keelson.yaml リファレンス を参照してください。


Keelson は、以下のランタイム上でのみアプリを実行できます。

ランタイム言語用途
python-slimPython軽量。API、テキスト処理、自動化など
python-mediaPythonメディア処理向け。画像・動画ライブラリを含む
node-slimNode.js軽量。Web アプリ、API など
node-mediaNode.jsメディア処理向け。画像処理ライブラリを含む
go-slimGo軽量
go-mediaGoメディア処理向け

keelson.yamlruntime フィールドで指定します。迷った場合は -slim から始め、メディア処理系ライブラリが必要になったら -media に切り替えてください。

  • slim — 言語ランタイムと標準ライブラリのみ。ビルドが速く、イメージサイズが小さい
  • media — slim に加え、画像処理(Pillow、sharp 等)や動画処理に必要なシステムライブラリがプリインストールされている

特定のフレームワークに依存しません。command で起動でき、HTTP サーバーとしてリクエストを受け付けるアプリであれば動作します。

例: FastAPI、Flask、Express、Next.js、Hono、Gin など。


以下の言語・ランタイムはサポート対象外です。

  • Ruby
  • Java / Kotlin / Scala
  • PHP
  • Rust
  • .NET / C#
  • Elixir / Erlang
  • Swift

非対応ランタイムのアプリは、修正や変換を行っても Keelson へデプロイできません。


Keelson は固定されたビルド環境・実行環境を提供します。アプリはその環境上でビルドおよび起動できる必要があります。

  • OS: Linux
  • CPU: x86_64 (amd64)

アプリは非 root ユーザーとして実行されます。sudoapt-get install、システムレベルの変更は実行できません。

使用できません。Keelson はランタイムを選択し、command で起動する方式です。Dockerfile の代わりに keelson.yaml でランタイムと起動コマンドを指定します。

パス書き込み永続化用途
/datastorage 設定時のみSQLite、ファイルアップロード、アプリデータ
アプリディレクトリ可(一時的)不可ソースコード、依存関係
/tmp可(一時的)不可一時ファイル
その他不可
  • 再デプロイ時に /data 以外の書き込みは失われます
  • /data を永続化するには keelson.yamlstorage を設定してください
  • 詳細は 永続ストレージ を参照
  • Web アプリは環境変数 PORT で指定したポートで HTTP リクエストを待ち受けてください
  • 0.0.0.0 で listen する必要があります。127.0.0.1localhost ではリクエストが届きません
  • HTTPS 終端は Keelson が行います。アプリは HTTP で listen してください

Keelson は任意の OS パッケージ追加を前提とした環境ではありません。

  • -slim ランタイムには最小限のシステムライブラリのみ含まれます
  • -media ランタイムには画像・動画処理に必要な一般的なライブラリが含まれます
  • それ以外のシステムライブラリが必要な場合、アプリは動作しない可能性があります
  • apt-get 等によるパッケージ追加はできません(非 root のため)
  • command で起動した単一プロセスが基本です
  • systemd やデーモン管理は使えません
  • バックグラウンド処理が必要な場合は workers を使ってください
  • CPU とメモリはプランの Compute Class に応じて割り当てられます
  • アプリごとの個別設定ではなく、ワークスペース内の全アプリに共通の性能帯が適用されます

言語ランタイムが対応していても、依存ライブラリやシステム要件によってはデプロイできない場合があります。

言語パッケージマネージャで追加できる依存

Section titled “言語パッケージマネージャで追加できる依存”

以下のパッケージマネージャで管理される純粋な言語パッケージは問題なくインストールできます。

  • Python: pip(requirements.txt
  • Node.js: npm(package.json
  • Go: go mod(go.mod

依存関係は command 内でインストールします。

# Python
command: "pip install --user -r requirements.txt && python app.py"
# Node.js
command: "npm install && npm start"
# Go (Keelson 側で deploy 時に `./app` がビルドされます)
command: "./app"

ネイティブ依存が必要なパッケージ

Section titled “ネイティブ依存が必要なパッケージ”

一部のパッケージは、C ライブラリやシステムレベルの依存を必要とします。

  • -media ランタイムで動作するもの: Pillow、opencv-python、sharp、ffmpeg 関連など、一般的なメディア処理ライブラリ
  • 動作しない可能性があるもの: ランタイムに含まれないシステムライブラリに依存するパッケージ

サポート対象外になる典型パターン

Section titled “サポート対象外になる典型パターン”
パターン理由
apt-get install が必要非 root でパッケージ追加不可
特殊な C ライブラリに依存ランタイムに含まれていない可能性
GPU を前提とした推論ライブラリGPU インスタンス未提供
データベースサーバー(PostgreSQL、MySQL、Redis)外部サービスとして接続は可能だが、Keelson 上での起動は不可
systemd やバックグラウンドデーモン前提プロセスモデルが異なる

commandassets の組み合わせにより、デプロイモードが決まります。

モードcommandassets説明
コンテナありなし通常のアプリデプロイ
静的サイトなしあり(fallback なし)静的ファイルのみ
SPAなしあり(fallback あり)SPA(フォールバック付き)
ハイブリッドありあり(fallback 必須)静的ファイル + バックエンド API

アプリの起動に必要な API キー、トークン、接続情報は、コードに直接埋め込まず、環境変数またはシークレットとして設定してください。

  • keelson.yamlenv — バージョン管理に含めてよい値
  • コンソールのシークレット — API キーやトークンなど、コードに含めたくない値

必要な値が未設定の場合、アプリは正常に起動できないことがあります。

詳細は 環境変数とシークレット を参照してください。

変数名説明
TZタイムゾーン(Asia/Tokyo
KEELSON_APP_IDアプリの内部 ID
KEELSON_TENANT_IDテナントの内部 ID

対象制限
HTTP リクエスト一般的なタイムアウトが適用
定期実行ジョブ(cron)1〜3,600 秒(デフォルト 300 秒)
ビルド制限あり(依存関係の量による)

  • アプリから外部 API やサービスへの通信(Egress)はデフォルトで可能です
  • Business プラン以上では、通信先をホスト名単位で制限できます

症状原因対処
ビルド成功、起動後すぐ落ちる0.0.0.0 で listen していないhost="0.0.0.0" を明示
ポートに接続できないポート番号がハードコード環境変数 PORT から読み取る
モジュールが見つからないcommand に依存インストールが含まれていないpip install / npm installcommand に含める
ネイティブモジュールのビルド失敗システムライブラリ不足-media ランタイムに変更、または依存を見直す
/data に書き込めないstorage 未設定keelson.yamlstorage を追加
起動コマンドが見つからないエントリポイントのパスが間違いファイル名・パスを確認
  1. ビルドログを確認 — 依存関係のインストールが成功しているか
  2. 実行ログを確認 — 起動時エラーやランタイムエラーがないか
  3. keelson.yaml を確認runtimecommandenv の設定が正しいか

AI エージェントは、Keelson へのデプロイ時に以下の順序で判断してください。

  1. ランタイム確認 — アプリの言語がこの仕様の対応ランタイムに含まれるか確認する
  2. 依存関係確認 — ネイティブ依存やシステムライブラリの要件が制約内か確認する
  3. keelson.yaml 確認 — ファイルの有無と設定内容の妥当性を確認する。なければ作成する
  4. 環境変数確認 — 必要な環境変数やシークレットが不足していないか確認する
  5. デプロイ実行 — CLI または Skill を使ってデプロイを実行する
  6. 完了確認 — ビルド完了だけでなく、起動・ヘルスチェック・URL アクセスまで確認する
  7. 失敗時対応 — ログを確認し、修正可能な範囲で対処する。制約違反がある場合は理由を明示して停止する
  • 非対応ランタイムの場合は、デプロイを試行しない。理由を明示して停止する
  • 必須設定が不足している場合は、必要事項を提示する
  • ビルド成功のみで完了扱いにしない
  • 起動失敗時は必ずログを参照する
  1. Web 上の最新 Keelson Deploy Spec(この文書)
  2. Web 上の最新 CLI バージョン情報
  3. Skill 同梱版の仕様
  4. 一般知識・推測

Web 上の正本と Skill 同梱の情報が矛盾する場合は、Web 上の正本を優先してください。