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

keelson.yaml の設定

TODO(内部向け・リリース前に対応して削除)

Section titled “TODO(内部向け・リリース前に対応して削除)”

keelson.yaml は、Keelson がアプリをどのようにビルドし、起動し、公開するかを判断するための設定ファイルです。

このページでは、keelson.yaml が何のためにあるのか、何を書けばよいのか、どう使われるのかを説明します。各フィールドの完全な定義については keelson.yaml リファレンス を参照してください。

ただし、keelson.yaml は Keelson の Agent Skill 機能を使えば AI エージェントが自動生成してくれるため、通常は自分で作成する必要はありません。

keelson.yaml は、アプリごとに用意する設定ファイルです。プロジェクトのルートディレクトリに配置します。

Keelson はこのファイルを読み取り、次のことを判断します。

  • アプリの識別子(URL の一部になる)
  • どのランタイムで動かすか
  • どのように起動するか
  • 永続ストレージやデータベースを使うか
  • 定期実行ジョブやバックグラウンドワーカーがあるか
  • 静的アセット配信を行うか

keelson.yaml は、アプリのコードそのものではなく、そのアプリを Keelson 上で動かすための説明書です。すべての設定項目を覚える必要はなく、まずは最小限の構成から始められます。

同じ Web アプリでも、使用する言語、起動コマンド、必要な機能はアプリごとに異なります。

Keelson は keelson.yaml を通じてその違いを理解し、適切な方法でアプリをデプロイします。このファイルがないと、Keelson はそのアプリをどう扱えばよいか判断できません。

AI エージェントでデプロイする場合も、keelson.yaml はアプリの構成を理解するための重要な手がかりになります。エージェントがアプリのコードを読み取って keelson.yaml を自動生成することもできます。

keelson.yaml は、デプロイの開始時に読み取られます。

Keelson はこの設定をもとに、次の処理を行います。

  1. 設定の検証 — フィールドの値やフィールド間の制約をチェックする
  2. ビルド — ランタイムに応じたコンテナイメージを作成する
  3. 起動command で指定されたコマンドでアプリを開始する
  4. 機能の有効化 — ストレージ、データベース、定期実行ジョブなど、設定された機能を準備する
  5. 公開slug に基づいた URL でアプリにアクセスできるようにする

設定がアプリの実際の構成と合っていない場合、ビルドに失敗したり、ビルドは成功しても起動できなかったりすることがあります。

keelson.yaml のフィールドはすべてトップレベルに配置します。

フィールド説明
slugアプリの識別子。URL の一部になるmy-app
runtime実行環境python-slim, node-slim, go-slim
command起動コマンド"python app.py"

command は、依存パッケージのインストールと起動を 1 つのコマンドにまとめて書きます。

command: "python -m pip install -r requirements.txt && python app.py"
フィールド説明
env環境変数(キーと値のペア)
storage永続ストレージの設定
databasesSQLite データベースの設定
crons定期実行ジョブ
workersバックグラウンドワーカー
assets静的アセット配信
typeアプリ種別(web を指定すると静的サイトモード)

各フィールドの型、制約、指定可能な値については keelson.yaml リファレンス を参照してください。

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

パターンcommandassets動作
通常のアプリありなしコンテナとして起動
静的サイト / SPAなしあり静的ファイルを配信
ハイブリッドありあり静的ファイル + バックエンド API

API キー、トークン、パスワードなどの秘密情報は keelson.yaml に直接書かないでください。

keelson.yaml はソースコードと一緒にリポジトリに含まれるファイルです。秘密情報は環境変数またはシークレットとして、コンソールから設定します。

# NG: 秘密情報を直接書いている
env:
OPENAI_API_KEY: "sk-xxxxxxxxxxxxx"
# OK: 値はコンソールで設定し、keelson.yaml には書かない
env:
PORT: "8080"
NODE_ENV: "production"

環境変数の管理については 環境変数とシークレット を参照してください。

まずは slugruntimecommand の 3 つだけで始められます。

slug: my-app
runtime: python-slim
command: "python -m pip install -r requirements.txt && python app.py"
env:
PORT: "8080"
slug: my-app
runtime: node-slim
command: "npm install && npm start"
env:
PORT: "8080"
slug: my-app
runtime: go-slim
# Keelson が deploy 時に Linux 向け binary を `./app` としてビルドします。
command: "./app"
env:
PORT: "8080"

ランタイムには -slim(軽量)と -media(画像・動画処理ライブラリ含む)の 2 種類があります。迷った場合は -slim から始めてください。

アプリの種類によって、使うフィールドが変わります。

データベースを使うアプリでは、storagedatabases を追加します。

slug: my-app
runtime: python-slim
command: "python -m pip install -r requirements.txt && python app.py"
env:
PORT: "8080"
DB_PATH: "/data/main.db"
storage:
disk_id: my-app-data
databases:
- name: main
type: sqlite
path: /data/main.db

storage を設定しないと、データは永続化されず Pod の再起動時に失われます。

type: web を指定し、assets でアセットディレクトリを設定します。

slug: my-site
type: web
runtime: node-slim
assets:
dir: dist
fallback: index.html

Web サーバーなしで、定期的にスクリプトを実行するだけのアプリです。

slug: daily-report
runtime: python-slim
crons:
- name: generate
schedule: "0 9 * * *"
command: "python report.py"
timeout: 120

ハイブリッド(静的ファイル + API)

Section titled “ハイブリッド(静的ファイル + API)”

フロントエンドの静的ファイルとバックエンド API を 1 つのアプリで提供します。

slug: my-app
runtime: node-slim
command: "npm install && node server.js"
env:
PORT: "8080"
assets:
dir: public
fallback: index.html
api: /api

各構成パターンの完全な例は keelson.yaml リファレンス を参照してください。