アプリが動くタイミング
Keelson は、アクセスに応じて Web アプリを起動し、アクセスがない状態が続くと停止します。次のアクセスがあると、再び起動します。
画面表示や API の処理はリクエストを受けて実行し、毎日の集計などは Keelson の定期実行ジョブで実行します。アプリが常に起動していることを前提にした処理には対応していません。
Web アプリの起動と停止
Section titled “Web アプリの起動と停止”アプリが停止しているときにリクエストを受けると、Keelson がアプリを起動します。このため、停止後の最初のアクセスでは、通常より応答に時間がかかることがあります。
再起動すると、メモリ上の変数やローカルファイルに保存したデータは引き継がれません。残しておきたいデータは、Managed SQLite や Files / Media SDK に保存してください。
詳しくはデータベース(Managed SQLite)とファイルとメディアを参照してください。
リクエストに応じて実行する処理
Section titled “リクエストに応じて実行する処理”データの保存や外部 API の呼び出しなど、そのリクエストで必要な処理は、レスポンスを返すまでに完了させてください。
レスポンスを返した後にバックグラウンドで続ける処理は、最後まで実行されることが保証されません。FastAPI の BackgroundTasks や、完了を待たずに開始する非同期処理を使う場合は、処理方法の変更が必要です。
AI の回答生成など、結果を少しずつ返す処理にはストリーミングを利用できます。ただし、接続が切れた後も処理を続ける仕組みとしては利用できません。
決まった時刻・間隔で実行する処理
Section titled “決まった時刻・間隔で実行する処理”毎朝のレポート作成や定期的なデータ同期は、keelson.yaml の crons に設定します。Web アプリにアクセスがなくても、設定したスケジュールに従って実行されます。
ジョブは Web アプリとは別の実行環境で起動し、指定したコマンドの処理が終わると終了します。Web アプリと共有するデータは、データベースなどに保存してください。
アプリ内のタイマーやスケジューラで時刻を待つ方法は、アプリの停止中には動作しません。定期的な処理は Keelson の定期実行ジョブに設定してください。
設定方法は定期実行ジョブを参照してください。
処理に合わせた実装方法
Section titled “処理に合わせた実装方法”| やりたいこと | 実装方法 |
|---|---|
| フォームの内容を保存する | リクエスト処理中に保存し、結果を返す |
| AI の回答を順次表示する | リクエスト処理中にストリーミングで返す |
| 毎朝レポートを作成する | 定期実行ジョブに設定する |
| 外部サービスと定期的に同期する | 1 回分の同期処理を定期実行ジョブで実行する |
| 受け付けた処理を後でまとめて実行する | 未処理の内容を DB に保存し、定期実行ジョブで処理する |
DB に保存して後で処理する方法では、次のジョブ実行まで待ち時間が発生します。すぐに開始する必要がある処理には適していません。また、処理の重複や失敗に備える必要があります。詳しくは定期実行ジョブの設計を参照してください。
Keelson は、任意のバックグラウンド処理を即座に開始するタスク実行 API や、常駐ワーカーを提供していません。
ブラウザ側の処理
Section titled “ブラウザ側の処理”ここまでの説明は、サーバー側の処理が対象です。ブラウザ側のタイマーや画面の自動更新に、この制約は適用されません。
実行時間の上限
Section titled “実行時間の上限”HTTP リクエストと定期実行ジョブには、それぞれ実行時間の上限があります。長い処理は、上限内に完了する単位に分けてください。