コンテンツにスキップ
コンソール →
公式サイト →
URL を貼り付けて AI に質問 https://keelson.dev/ja/llms.txt

対応アプリと制約

Keelson は、Python・Node.js・Go の Web アプリ、静的サイト、定期実行ジョブに対応しています。 フレームワークやデータの保存方法によっては、コードや設定の変更が必要です。以下の表で対応状況を確認してください。

Dockerfile は不要です。アプリに含まれていても、Keelson のビルドには使用されません。

アプリ対応状況補足
Python の Web アプリ(FastAPI、Flask など)対応環境変数 PORT で指定されたポートで起動。Flask は gunicorn を使用
Node.js の Web アプリ(Express、Hono、Next.js など)対応環境変数 PORT で指定されたポートで起動。Next.js は next start
Go の Web アプリ(net/http、Gin など)対応Keelson がビルドして ./app で起動
ビルド済みの静的サイト / SPA(React、Vue、Svelte など)対応assets にビルド出力を指定
静的な画面 + API サーバー(ハイブリッド構成)対応assets.api で API のパスを指定
定期実行ジョブのみ対応共通の必須項目に加えて crons を設定し、Web サーバー用の command は省略
外部の PostgreSQL / MySQL / libSQL に接続する対応db.mode: none。接続情報はシークレットで渡す
外部 API(OpenAI、Slack、Google Sheets など)を呼ぶ対応外部通信は制限なし(SMTP ポート TCP 25・465・587・2525 のみ常に遮断)
ファイル SQLite に永続データを保存している(sqlite3、better-sqlite3 など)変更が必要接続部分を libSQL クライアントに置き換えて db.mode: libsql。SQL は通常そのまま(Managed SQLite は SQLite 互換)だが、クライアント API の差(Node.js は非同期化、Python は row_factory 等)に応じた修正が要る。Python / Node.js のローカル開発は file:local.db で従来どおり
ローカルファイルに残しておきたいデータを保存している変更が必要Managed SQLite か Files SDK / Media SDK へ。実行中に保存したローカルデータは再起動後に引き継がれない
アプリ内でタイマーやバックグラウンドスレッドを動かしている変更が必要時刻で動く処理は定期実行ジョブに移し、リクエストの後に続く処理はバックグラウンドタスクに投入する(アプリが動くタイミング)
Django外部 DB 接続のみ対応db.mode: none で PostgreSQL などの外部 DB に接続し、gunicorn で起動する。Managed SQLite(libSQL)には Django ORM 用のバックエンドがないため、Managed SQLite との組み合わせは未対応(フレームワーク別の注意点)
Streamlit未対応WebSocket が必須のため、現在は動きません(フレームワーク別の注意点)
Gradio検証中4 以上を検証中。現時点では動作を保証しません
Ruby / PHP / Java / Rust / .NET / Elixir未対応対応ランタイムは Python / Node.js / Go のみ
Dockerfile で apt パッケージを追加している未対応root 権限なし。画像・動画系は -media ランタイムで代替できる場合あり
常駐プロセス・デーモン・WebSocket サーバー前提未対応アイドル時に停止する実行モデルと合わない
Redis / Kafka / DB サーバーを自前で起動する未対応外部サービスとして接続するのは可
GPU が必要未対応

「変更が必要」のアプリは、コードや設定を変更して対応できる場合があります。AI エージェントに確認を依頼すると、必要な変更を提案します。

再生成できる一時データは、ローカルファイルに保存できます。一時的な SQLite の利用には db.local_sqlite の宣言が必要です。条件は keelson.yaml リファレンスを参照してください。

他のツールで作ったアプリ(Lovable、Bolt、v0 など)をデプロイする手順は持ち込みガイドにあります。

keelson.yaml の runtime で選びます。迷ったら -slim から始め、画像・動画・PDF 処理のライブラリ(Pillow、sharp、ffmpeg など)が必要になったら -media に切り替えます。

ランタイム言語バージョンビルド時の処理
python-slim / python-mediaPython 3.12requirements.txt または pyproject.toml から自動インストール
node-slim / node-mediaNode.js 24package.json と package-lock.json から依存を自動インストール。npm run build があれば実行
go-slim / go-mediaGo 1.26go.mod から go build し、./app として起動

Go のバージョンは、ビルドに使用するツールチェーンのバージョンです。表のビルド処理は、サーバー側の処理があるアプリや定期実行ジョブが対象です。依存パッケージはビルド時にインストールされます。command には起動コマンドだけを書きます。

  • Node.js: Keelson 上でのビルドには npm を使います。pnpm-lock.yaml / yarn.lock のみの構成は対応していないため、package-lock.json を用意してください。静的サイトは、手元で pnpm や Yarn を使ってビルドしたものも配信できます。
  • Go: CGO_ENABLED=0 でビルドします。cgo に依存するライブラリは使用できません。

依存ファイルの要件やビルドの制約は、keelson.yaml リファレンスを参照してください。

項目内容
OS / CPULinux / x86_64
権限・システムパッケージ非 root で動作します。sudo や apt-get は使えません
Web サーバーの起動0.0.0.0 と環境変数 PORT で指定されたポートで待ち受けます
データの保存ローカルファイルは永続保存されません。残したいデータには Managed SQLite や Files / Media SDK を使います
処理の実行リクエスト処理、バックグラウンドタスク、定期実行ジョブに対応します。詳しくはアプリが動くタイミングを参照してください

実行時間やアプリ数などの上限はプランと制限を参照してください。

Python(FastAPI)の例です。keelson.yaml と requirements.txt と app.py の 3 ファイルでデプロイできます。

keelson.yaml
slug: my-app
runtime: python-slim
command: "python app.py"
db:
mode: none
requirements.txt
fastapi
uvicorn
app.py
import os
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def index():
return {"message": "Hello from Keelson"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=int(os.environ["PORT"]))

通常は AI エージェントが keelson.yaml を書くので、自分で作る必要はありません。