コンテンツにスキップ
コンソール →
公式サイト →
AI に聞くなら、この URL を貼る https://keelson.dev/ja/llms.txt

エラーコード

CLI とデプロイのエラーは codehint(対処方法)を伴って返ります。AI エージェントにそのまま渡せば対処できます。hint がある場合はこのページより hint を優先してください。workspace 名のコードへ移行したエラーでは、旧 tenant 名のコードを互換用の error.aliases に載せます。撤去時期は未定です。ここでは人が読むための一覧を、発生する場所ごとにまとめます。

このページは日常的に遭遇するコードの一覧で、全コードの網羅ではありません。掲載していないコードが出たときも、codehint の形は同じです。

経路によって、理由を読む場所が違います。

経路
CLI(--json)標準出力に {"error":{"code","message","hint","retryable"}}
デプロイの失敗(status / diagnose)failure_codehint
Keelson API の通常のエラー{"detail": "..."}。入力検証エラーでは detail が配列。code / hint は付かない
アプリの URL に対する認可の拒否(ゲートウェイ)ブラウザには HTML の案内。fetch / XHR には {"detail":"ip-restricted"} のような JSON と、理由を入れた X-Keelson-Auth-Error ヘッダー
稼働枠不足・停止中(ゲートウェイ)503。x-keelson-platform-error ヘッダー(capacity-full / app-suspended)。稼働枠不足は X-Keelson-Error-Code: CAPACITY_FULL も付く
存在しない URL・停止中・予約パス(エッジ)404 / 410 / 503 / 403 の平文と x-keelson-platform-error ヘッダー。ゲートウェイに届かないので X-Keelson-Auth-Error は付かない
Files / Media の配信x-keelson-error ヘッダーに理由。一部のコードだけ {error, hint, doc} の JSON

retryable は HTTP のステータスからは決められません。同じ 503 でも false のことがあり、ビルドの 429 にはトライアルの累積上限のように待っても解除されないものがあります。

アップロード前に報告され、keelson deploy --check でも確認できます。エラーはデプロイを止めますが、警告は止めません。依存マニフェストがない場合、Go ではエラー、Python と Node.js では警告になります。

コード原因対処
missing_dependency_manifest選択したランタイムの依存マニフェストがないGo ではプロジェクトルートに go.mod を置く。Python または Node.js で外部ライブラリを使う場合はマニフェストを置く。標準ライブラリだけのアプリでは依存マニフェストは必須ではありません
command_installs_dependenciescommandpip install / npm install / go build がある削除し、起動コマンドだけにする
runtime_command_mismatchruntimecommand の言語が合わない(例: python-slimnode)どちらかを直す
assets_dir_emptyassets.dir が無い、空、またはパスの大文字小文字が違うビルドを実行する。パスを確認する
assets_fallback_missingassets.fallback のファイルが assets.dir にないビルド出力を確認する
db_wiring_fail(警告)db.mode とコードの DB 接続が食い違う(接続先、ローカル開発用のフォールバック、宣言の不一致など複数の規則がある)表示された hint に従う。多くは KEELSON_DB_URL を読む libSQL クライアントに直す
file_wiring_fail(警告)状態ファイルやアップロードをローカルディスクに書いているFiles / Media SDK に置き換える
コード原因対処
invalid_keelson_configYAML が不正、db.modelibsql / none 以外、db.migratenone と併用、KEELSON_ で始まる env、/__keelson 配下のパス、不明な runtime、cron が 10 本超、などmessage の内容を直す
config_missing_field必須フィールドがない(slugruntimedb など。静的サイトでは typeassets も)追加する
env_value_not_stringenv の値が文字列でない、YAML が曖昧に解釈するキー、キーの重複、merge key(<<)値は引用符かブロック文字列にする。曖昧なキー(on / yes / 数字など)は引用符で囲む。重複は削除する。merge key は展開して書く。重複と merge key は引用符で囲んでも拒否される
description_too_longdescription が 300 文字超短くする
workers_not_supportedworkers: がある削除して crons で書く
DB_DATABASES_REMOVEDdatabases: がある削除する。永続データは db.mode: libsql
SQLITE_LOCAL_SQLITE_INVALID_PATHdb.local_sqlite.paths/tmp/ の外/tmp/:memory: にする
CRON_TIMEOUT_EXCEEDS_STANDARD_LIMITcrons[].timeout が 600 秒超下げる、処理を分割する
plan_cron_limit / plan_cron_min_interval / plan_schedule_timeoutcron の本数・間隔・timeout がプラン上限を超える減らすか、プランを上げる
ARTIFACT_SQLITE_FILE_DRIVERファイル SQLite クライアント(sqlite3better-sqlite3 など)が検出されたlibSQL クライアントへ移行。一時用途なら db.local_sqlite で宣言
ARTIFACT_EXEC_NODE_CRON / ARTIFACT_EXEC_APSCHEDULER / ARTIFACT_EXEC_BACKGROUND_TASKS / ARTIFACT_EXEC_SET_INTERVAL(注意)アプリ内スケジューラが検出されたcrons に移す

ビルド出力の直下に __keelson ディレクトリがあるとビルドが失敗します。このときの failure_codedeploy.build.failed で、ビルドログに reserved_path_conflict が出ます。ディレクトリ名を変えてください。

keelson status / keelson diagnosefailure_code として表示されます。

コード原因対処
deploy.config.invalidkeelson.yaml の内容が不正指摘されたキーを直して再デプロイ
deploy.config.secret_missingsecrets.required で宣言したシークレットが未設定keelson secrets set <KEY>(値は標準入力)で全て設定してから再デプロイ
deploy.artifact.invalidアーカイブの問題(ロックファイルなし、ブロック対象の検出)指摘された箇所を直す
deploy.artifact.assets_invalidassets.dir / assets.fallback で宣言したファイルがアップロードに含まれていない手元でビルドしてから再デプロイ
deploy.build.failedビルド失敗(依存の解決失敗、ビルドスクリプトのエラー、予約パスの衝突)keelson logs deploy <deploy_id> でビルド出力の末尾を見る
deploy.build.timed_outビルドが制限時間内に終わらなかった不要な依存を減らす、重い前処理をビルドの外に出す
deploy.build.image_too_largeイメージが大きすぎる不要な依存やファイルを減らす
deploy.runtime.start_failedアプリが起動中に終了、またはコンテナが起動状態にならなかったkeelson logs deploy <deploy_id> で保存済みのアプリの起動ログを読み、PORT0.0.0.0 を確認
deploy.runtime.health_check_failed起動・ヘルス検証の制限時間内に、/(もしくは health.path)から期待する応答(2xx / 3xx / 404)を得られなかった。アプリが起動中に終了した場合や、401 / 403 / 5xx を返し続ける場合を含むkeelson logs deploy <deploy_id> で保存済みのアプリの起動ログを読み、待ち受けポートと health.path を確認
deploy.runtime.migration_faileddb.migrate が 0 以外で終了。旧リビジョンが配信を継続マイグレーションを直して再デプロイ。途中まで適用された DB の変更は自動では戻らない
deploy.verify.failedverify のパスが取得できない、または JS / CSS の Content-Type が不一致パスとビルド出力を確認。詳細は failure_logsverification_* コードに出る
deploy.plan.limit_exceededプランの上限超過減らすか、プランを上げる
deploy.plan.cron_count_exceededcron の本数がプラン上限を超えている減らすか、プランを上げる
deploy.plan.cron_interval_too_shortcron の間隔がプランの最小間隔より短い間隔を伸ばすか、プランを上げる
deploy.plan.schedule_timeout_exceeded明示した crons[].timeout がプラン上限を超えているtimeout を下げるか、プランを上げる
deploy.app.suspendedアプリまたはワークスペースが Keelson 側の制限措置を受けているサポートへ連絡する。利用者や管理者による再開では解除されない
deploy.app.operation_in_progressこのアプリで別の操作が進行中だったため、デプロイを開始できなかった別の操作が完了してから再デプロイ
deploy.platform.temporarily_unavailable一時的な障害待ってから再試行する。追加で 3 回まで。それでも失敗するなら deploy_id を添えてサポートへ
deploy.platform.errorプラットフォーム側のエラー再試行しても直らない。deploy_id を添えてサポートへ
deploy.cancelledデプロイが取り消された必要なら再デプロイ
deploy_in_progress(409)別のデプロイまたはアプリ操作が進行中進行中の操作が完了してから同じコマンドを再実行
build_rate_limit_exceeded / build_guardrail_exceeded(429)ビルド回数・ビルド時間・同時実行・連続失敗の上限メッセージが解除条件を示す。連続失敗は原因を直して記載の時刻を待つ。トライアルのビルド枠は累積で、待っても解除されないので、その場合はプランを変更する
saved_config_unsupported(409)再デプロイ / ロールバック対象の keelson.yaml が現在のスキーマに合わない直して通常のデプロイをする

keelson crons runs listkeelson logs cron に出ます。

コード意味
cron.failed.command_failedコマンドが 0 以外で終了した
cron.failed.timed_outtimeout を超えた
cron.failed.terminated_no_callback実行が終了したが結果が報告されなかった
dispatch_failed実行の起動に失敗した
cron.skipped.schedule_disabledジョブが無効化されている
cron.skipped.quota_exceededプランの実行枠を超えた
cron.skipped.due_to_lock / cron.skipped.lease_held前回の実行がまだ終わっていない
cron.skipped.missed_run予定時刻を過ぎたため飛ばした
cron.skipped.app_suspendedアプリが停止中
cron.skipped.plan_downgradeプラン変更で実行できなくなった

keelson snapshots ... のエラーです。名前が snapshot_export_ で始まるものは snapshots export の同じ条件です。

コード意味対処
snapshot_plan_not_included手動スナップショットがプランに含まれないプランを変更する
snapshot_no_managed_dbManaged SQLite を使っていないdb.mode: libsql で DB を作ってから
snapshot_db_name_invalid / snapshot_db_name_unknownDB 名が不正、または存在しないhint に出る名前を使う
snapshot_already_running / snapshot_export_already_running前の処理が実行中終わってから再試行
snapshot_rate_limited / snapshot_export_rate_limited回数上限hint の時刻まで待つ
snapshot_export_invalid_timestamp復元可能な範囲の外の時刻範囲内の時刻を指定する
snapshot_app_deleting / snapshot_export_app_deletingアプリが削除中
snapshot_launch_failed / snapshot_export_launch_failed起動に失敗再試行。続くならサポートへ
snapshot_disabled / snapshot_storage_unconfigured(export 系も同様)プラットフォーム側で無効サポートへ
snapshot_not_readyまだダウンロードできない(X-Keelson-Error-Code ヘッダー)完了を待つ
コード意味対処
not_logged_in未ログインkeelson login
multiple_workspaces / workspace_ambiguous / workspace_not_found / no_workspacesワークスペースを特定できない--workspace <slug>keelson workspaces list --query で検索
app_not_foundアプリが見つからないslug を確認。新規なら --new
app_manage_requiredアプリは存在するが、管理権限がない現在の管理者に、管理権限を持つグループへ自分を追加してもらう。ワークスペースの OWNER / ADMIN なら keelson groups members add <グループ> <メール> で自分を追加する
app_deleting削除中のアプリ完了を待つ
forbidden権限がない。CONSOLE_ONLY_OPERATION ならコンソール限定の操作ロール・アプリ権限を確認
confirmation_requiredブラウザでの承認が必要な操作表示された URL を開いて承認。削除・SQL・復元は承認と同時に実行されるので再実行は不要。preview / app curl は承認後に --confirmation <id> を付けて同じコマンドを再実行する
confirmation_expired / confirmation_rejected承認の期限切れ(削除・SQL・復元は 15 分、preview / app curl は 30 分)/ 却下コマンドをやり直す
deploy_failedデプロイ失敗keelson diagnose <deploy_id>
sql_faileddb apply の SQL エラー。ロールバック済みSQL を直す
usage(access set。API の 409 detail.reasonlast_manage_binding_removed / no_effective_manager / self_lockout)管理グループが空になる、有効な管理者がいなくなる、自分の権限が失われる管理グループを残す。--allow-self-lockout で解除できるのは自分が外れる場合だけで、管理グループや有効な管理者がゼロになる変更は解除できない
transient一時的なネットワークエラー--retry を付けて再試行
skill_outdated(meta.skill_outdateddoctor の警告でもある)Skill が CLI より古い。コマンドは失敗しないkeelson install-agent --yes
表示状態対処
ログイン画面未ログインワークスペースに登録されたアカウントでログイン
「アクセスできません」(403)メンバーでない、ブロック済み、アプリの閲覧権限がない管理者にメンバー登録・権限を依頼
「このアプリは、許可されたアクセス元からのみ利用できます」(403)IP 制御で拒否。画面に送信元 IP が表示される管理者にその IP のアクセス元への追加を依頼
「アプリの稼働枠が空いていないため起動できません」(503)同時に使えるアプリ数の上限枠を使っている別のアプリへのアクセスが約 5 分途絶えると空く。使われ続けていれば空かないので、管理者がアプリの停止・優先起動・プラン変更で調整する
「アプリを起動しています」スリープからの起動中数秒待つ(自動で再読み込み)
「このアプリは停止中です」(503)サスペンド中、または Keelson 側の制限措置管理者が再開する。再開しても直らない場合は制限措置なのでサポートへ
「App not found」(404)URL が間違っている、またはアプリが削除されたURL を確認
410 Gone公開 URL が変更された(旧 URL は 30 日間予約)新しい URL を案内
504アプリが 120 秒以内に応答ヘッダーを返し始めなかった。ストリーミングの全体時間ではない処理を短くする、cron に逃がす
501WebSocket は未対応SSE やポーリングに変える

API や XHR から同じ状況になると、ゲートウェイの拒否では JSON の detailX-Keelson-Auth-Error ヘッダーに理由(ip-restrictedapp-view-denied など)が入ります。稼働枠不足と停止中は x-keelson-platform-error ヘッダー(capacity-fullapp-suspended)です。

外部連携(アプリトークン / Webhook)

Section titled “外部連携(アプリトークン / Webhook)”

詳しい理由は X-Keelson-Auth-Error で返ります。IP 許可範囲による拒否でも、互換性のため JSON の detailmachine-forbidden または webhook-forbidden のままです。

machine-forbiddenwebhook-forbidden は、アプリが存在しない場合、トークンが別のアプリのものである場合、経路が消失した場合を意図的にまとめ、応答からアプリの存在を判定できないようにしています。

X-Keelson-Auth-Error原因
invalid-app-tokenトークンが無効、または失効済み
machine-scope-deniedトークンのスコープ(api / webhook)がパスと合わない
machine-endpoint-deniedauth.endpoints で宣言されていないパス・メソッド
machine-forbidden / webhook-forbiddenアプリが存在しない、トークンが別のアプリのもの、または経路が消失した
machine-ip-not-allowedアプリトークンの許可 IP の外から呼ばれた
invalid-webhook-secretWebhook シークレットが一致しない
webhook-scope-deniedトークンに webhook スコープがない
webhook-ip-not-allowedWebhook トークンの許可 IP の外から呼ばれた

/api/webhooks/email などプラットフォーム予約のパスへの Webhook は、ゲートウェイより手前のエッジが 403 の平文で拒否します。このときのヘッダーは X-Keelson-Auth-Error ではなく x-keelson-platform-error: auth-webhook-endpoint-blocked です。