コンテンツにスキップ
タイプ標準
ステージ本番環境
難易度シンプル
ジョブタスクを自動化
対象バックエンド開発者
対象データ分析
サービスCron
サービスSQLite
サービスExec
Hoody の利点HTTP ネイティブ
タイプ標準
ステージ本番環境
難易度シンプル
ジョブタスクを自動化
対象バックエンド開発者
対象データ分析
サービスCron
サービスSQLite
サービスExec
Hoody の利点HTTP ネイティブ
タイプ標準
ステージ本番環境
難易度シンプル
ジョブタスクを自動化
対象バックエンド開発者
対象データ分析
サービスCron
サービスSQLite
サービスExec
Hoody の利点HTTP ネイティブ
タイプ標準
ステージ本番環境
難易度シンプル
ジョブタスクを自動化
対象バックエンド開発者
対象データ分析
サービスCron
サービスSQLite
サービスExec
Hoody の利点HTTP ネイティブ
use-cases / daily-rollups-no-orchestrator / hero
日次ロールアップ · オーケストレーターなし

オーケストレーターなしの日次ロールアップ

毎晩 1 時、cron エントリが exec URL を curl します。スクリプトはあなたの sqlite URL 上でロールアップ SQL を実行し、日次テーブルを書き戻します。Airflow Postgres なし、DAG ファイルなし、14 のウィジェットを持つスケジューラ ダッシュボードなし、オーケストレーター自体のオンコールなし。

ドキュメントを読む
use-cases / daily-rollups-no-orchestrator / mechanism

2 つの URL と 5 フィールドのスケジュール

パイプライン全体は 1 つの exec URL を指す 1 つの cron エントリです。cron エントリは /users/root/entries への POST。exec URL は sqlite URL を開き、ロールアップ SQL を実行し、新しい行を返す小さなスクリプトです。それが DAG 全体です。

POST /users/root/entries
スケジュール
// every night at 01:00 UTC
POST /users/root/entries
{
  "schedule": "0 1 * * *",
  "command":  "curl -fsS https://exec.containers.hoody.com/scripts/rollup/run"
}
1 時 · CURL
exec.containers.hoody.com/scripts/rollup/run
パイプライン
// the entire pipeline body
import { Database } from "bun:sqlite";

const db = new Database("events.db");
db.run(`INSERT INTO rollup_daily
         SELECT date_trunc('day', created_at), count(*)
         FROM   events GROUP BY 1;`);

return { ok: true, rows: db.query("SELECT * FROM rollup_daily").all() };

ロールアップが失敗した場合、cron ログがそう報告します。昨日をバックフィルする必要があれば、date パラメータ付きで exec URL を手動で curl します。学ぶ 2 つ目のシステム、生かし続けるスケジューラ DB、コミットする DAG ファイルはありません。オーケストレーターは URL を指す cron エントリです。

use-cases / daily-rollups-no-orchestrator / powers

構築しなくてよかったもの

Hoody Kit はスケジューラ、ランタイム、ストレージをプレーンな HTTP サービスとして出荷します。パイプラインはそれらの間の curl コール — それだけです。

オーケストレーター デーモンなし

スケジューラは HTTP エントリ

hoody-cron はスケジュールを /users/root/entries のリソースとして保存します。バックアップする Postgres メタデータ DB なし、健全に保つスケジューラ コンテナなし、デプロイする DAG リポジトリなし。1 行を POST すれば実行が発火します。

ランタイム配線なし

スクリプトは URL

hoody-exec は exec.containers.hoody.com/scripts/rollup/run で要求に応じてロールアップ スクリプトを実行します。cron が curl し、200 を受け取り、レスポンスをログ。ワーカー キュー、ブローカー、pickle 化されたタスク グラフなし。

ログ パイプラインなし

実行履歴はレスポンス ボディ

各 exec コールは新しい行を JSON として返し、cron がステータス、タイムスタンプ、stdout でログします。バックフィル、失敗、再実行はすべて同じ 2 つの URL に存在 — ログ集約システムへ送る追加要素はありません。

use-cases / daily-rollups-no-orchestrator / backfill

実行が失敗した場合 — またはバックフィルが必要な場合

パイプラインは 2 つの URL と date パラメータです。昨日の再実行は夜間実行と同じ形で、exec URL に ?date=2026-04-30 を付けるだけ。リプレイ UI なし、スケジューラの癖なし。

  1. 01 · 検出

    cron ログが失敗を示す

    1 時の実行が non-2xx を返したら、hoody-cron 上のエントリの最新実行レコードに終了コードとキャプチャされたレスポンスボディが表示されます。配線する別個のアラート サービスは不要 — エントリを GET して読むだけ。

  2. 02 · バックフィル

    ?date= 付きで exec URL を curl

    スクリプトは date パラメータを受け付けます。昨日の日付を渡すと、その日のロールアップ行を再計算し、INSERT OR REPLACE で壊れた行を置き換えます。1 つのコマンド、DAG 再トリガー UI なし。

  3. 03 · 検証

    レスポンスは新しい行

    exec は新しく書き込まれたロールアップ行を JSON として返します。期待した結果と diff を取り、次に進みます。他に確認することはありません — ダッシュボード URL は今書いたのと同じテーブルを提供します。

// rerun yesterday's rollup by handcurl -fsS https://exec.containers.hoody.com/scripts/rollup/run?date=2026-04-30
use-cases / daily-rollups-no-orchestrator / capacity

パイプラインの形

3 つの数字でシステム全体を記述します。あなたのリポジトリにある今日の Airflow デプロイメントと比較してください。

  1. フィールド · CRON スケジュール5

    分、時、日、月、曜日。実行が発火するタイミングの設定面はそれだけです。

  2. URL · エントリ + EXEC2

    スケジュール登録の 1 つの POST、スクリプトを実行する 1 つの GET。それがデプロイ可能なパイプライン全体です。

  3. デーモン · オーケストレーターなし0

    生かし続けるスケジューラ プロセスなし、メタデータ データベースなし、ワーカー プールなし。Hoody Kit がスケジュールを保持しスクリプトを実行します。

数字は Hoody Kit 上の cron + exec モデルを表します。既存のパイプラインにはおそらく可動部品がもっと多いでしょう、それが比較の要点です。

use-cases / daily-rollups-no-orchestrator / punchline

オーケストレーターは URL を指す cron エントリです。

ビフォー · スケジューラ スタックアフター · 1 行の cron
ビフォーairflow webserver + scheduler + worker + postgres + dags/rollup_daily.py5 つのプロセス、メタデータ DB、DAG ファイルのリポジトリ
現在0 1 * * * curl -fsS https://exec.containers.hoody.com/scripts/rollup/run1 行。1 つの URL。1 つのスケジュール。
ドキュメントを読む
use-cases / daily-rollups-no-orchestrator / replaces

これが置き換えるもの

オーケストレーション層は 1 行の cron に折りたたまれます。DAG はあなたのスクリプトの中に住みます。

  • Apache Airflow1 つのクエリのための Postgres + Redis + scheduler + worker
  • Prefectクラウドアカウント、エージェント インストール、フロー登録
  • DagsterPythonic、しかし依然として運用するサービス
  • Luigi夜間 SQL をスケジュールするためのグラフエンジン
  • GitHub Actions スケジュールmain にピン留め、テナント別コンテキストなし
  • dbt CloudSELECT をラップする CLI をラップする SaaS
  • カスタム Python スケジューラwhile ループと try/except、「堅牢」と呼ばれる
use-cases / daily-rollups-no-orchestrator / cta

オーケストレーターを稼働させるのをやめましょう。cron エントリを稼働させましょう。

ドキュメントを読む
use-cases / daily-rollups-no-orchestrator / related

他のユースケースを読む