Dagu vs Temporal
Dagu と Temporal は解く課題が違います。
Temporal はコードで書くステートフルなアプリケーションワークフローのための耐久実行エンジンです。Dagu は既存のコマンドをスケジュールしてオーケストレーションする単一バイナリです。このページではそれぞれの用途を整理します。
name: nightly-ops
schedule: "0 2 * * *"
steps:
- id: extract
run: python scripts/extract.py
- id: transform
run: ./bin/transform
retry_policy:
limit: 3
depends: [extract]
- id: notify
run: ./scripts/slack-success.sh
depends: [transform]自己完結した 1 バイナリ。DB も message broker も不要
ワークフローは既存コマンドを呼ぶ宣言的 YAML
shell、Docker、HTTP、SSH、SQL、SubDAG、AI エージェント向け executor
local、queue ベース、worker への分散実行に対応
一目で比較
Dagu vs Temporal の概要
コマンドを呼ぶ宣言的 YAML。
SDK によるコードでのワークフロー(Go、Java、TypeScript、Python)。
ファイルベースの状態を持つ単一バイナリ。
Cassandra、PostgreSQL、MySQL を背後に持つサービス。
スケジュールジョブ、パイプライン、運用自動化。
耐久でステートフルなアプリ・マイクロサービスワークフロー。
詳細
それぞれの強みと向き不向き
それぞれが想定する用途
Temporal はクラッシュや再起動を越えて長時間のアプリケーションロジックを生かし続けます。SDK でコードとしてワークフローを書き、サービスが event history を replay するため、worker は停止地点から再開します。Dagu はジョブをスケジュールし、コマンドをグラフに組みます。タスクを framework 内のコードに書き換えさせることなく、実行、リトライ、ログ、履歴を追跡します。
- Temporal は障害を越えて生き残るべき分散・マイクロサービスワークフロー向け。
- Dagu は cron ジョブ、バッチパイプライン、コマンドで組む運用自動化向け。
- Dagu の 1 ステップはスクリプト、コンテナ、HTTP 呼び出し、別ワークフローを実行できる。
運用する対象と記述方法
Temporal は Cassandra、PostgreSQL、MySQL のいずれかを背後に持つサービスの稼働が必要で、多くは Helm で Kubernetes に展開するか Temporal Cloud を使います。ワークフローは Go、Java、TypeScript、Python のコードに存在します。Dagu は状態をディスク上のファイルに保存する 1 バイナリです。ワークフローは diff で読め、オーケストレーション対象のコードの隣に commit できる YAML です。
- Dagu の実行に database、broker、cluster は不要。
- YAML ステップは SDK 呼び出しではなく既存ツールを shell out する。
- ノートPCで始め、1 台で足りなくなったら後から worker を追加できる。
代わりに Temporal を選ぶべき場合
課題が耐久実行なら Temporal が適切で、Dagu は代替になりません。数時間から数日にわたり状態を保持し、外部 signal を待ち、長寿命プロセスをまたいで timer を設定し、障害後に決定論的に replay すべきワークフローは、まさに Temporal の設計対象です。Dagu にこのプログラミングモデルの相当物はありません。
- プロセスのクラッシュを越えて生き残り、実行途中から再開するコード定義ワークフローが必要。
- アプリケーションロジック内の signal、耐久 timer、child workflow に依存している。
- 宣言的 YAML より Go、Java、TypeScript、Python の SDK を使いたい。
FAQ
Dagu を導入する前によくある質問
Dagu は Temporal を置き換えますか?
多くの用途では置き換えません。Temporal はコードで書くステートフルワークフローのための耐久実行エンジンで、Dagu はそのモデルを提供しません。単なるスケジュールジョブやコマンドパイプラインに使っていた場合だけ、より軽い構成の Dagu が代替になります。
Dagu は長時間ワークフローを動かせますか?
Dagu は長いタスクを動かし多段パイプラインをオーケストレーションできますが、コード定義のワークフロー状態をプロセスのクラッシュを越えて保持したり event history を replay したりはしません。ステップを数日止めて障害後に決定論的に再開する必要があるなら Temporal が適切です。
スケジュールジョブで Temporal より Dagu を選ぶ理由は?
既存コマンドで組む cron ジョブやパイプラインなら、Dagu は database も broker も SDK も不要です。1 バイナリを入れ、YAML を書けば、スケジュール、リトライ、ログ、履歴、Web UI が手に入り、Temporal のサービスより運用が軽くなります。
次の一歩
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。