Dagu vs Prefect
Python を書かずにオーケストレーションしたいなら Dagu を。
Prefect は flow をコードで書くデータチーム向けの Python framework です。Dagu は宣言的 YAML で既存のコマンドを呼ぶ単一バイナリで、運用する DB がありません。本ページは双方の適所を正直に見ていきます。
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]ワークフローは Python コードではなく宣言的 YAML
ファイルベースの状態を持つ単一バイナリ
外部 DB やメッセージブローカー不要
shell、Docker、HTTP、SSH、SQL、SubDAG、AI エージェントステップ向け executor
一目で比較
Dagu vs Prefect 早見表
コマンドを呼ぶ宣言的 YAML。
@flow と @task の decorator を付けた Python 関数。
ファイルベースの状態を持つ単一バイナリ。
Prefect server と DB、別建ての worker。
小さな自己ホスト型ランタイムを求めるスクリプト、コンテナ、運用自動化。
動的な flow と任意のマネージドクラウドを求める Python 中心のデータチーム。
詳細
それぞれの強みと向き不向き
Python framework ではなく宣言的 YAML
Prefect は @flow と @task の decorator で包んだ Python 関数として処理を表し、ワークフローがコードベースの中に置かれます。Dagu は各ステップをコマンドのまま保ち、スケジュール、リトライ、依存関係を YAML で周囲に付けます。
- shell、Docker、HTTP、SSH、SQL、SubDAG を実行するステップを定義
- Python を書かない運用者にも読めるワークフローを保つ
- 呼び出すスクリプトの隣で YAML を git 管理
ファイルベースの状態を持つ単一バイナリ
本番の Prefect 構成は Postgres などの DB を後ろに置いた Prefect server と、flow を実行する worker を動かします。Dagu は単一バイナリとして配布され、実行履歴、ログ、キュー状態をローカルのファイルに保存します。
- ダウンロード 1 つで開始し、DB の用意は不要
- ファイルと 1 バイナリの扱いでバックアップとアップグレード
- 必要になればローカル実行からキューや分散 worker へ拡張
Prefect を選ぶべきとき
ワークフローが Python に属し、チームがそのサービス運用に慣れているなら Prefect が向いています。Dagu より Prefect に自然に対応するニーズもあります。
- 実行時に Python で形が決まる動的な DAG が欲しい
- コマンド呼び出しでなく Python オブジェクトをタスク間で受け渡す
- Prefect Cloud によるマネージドな選択肢が欲しい
FAQ
Dagu を導入する前によくある質問
Dagu は Prefect を置き換えますか?
すべてのチームでではありません。ワークフローが Python で、動的な flow や Python オブジェクトのタスク間受け渡しに依存するなら Prefect が向きます。コマンド、コンテナ、サービス呼び出しで動き、YAML と DB なしを求めるなら Dagu が向いています。
Python を書かずに Dagu を使えますか?
はい。Dagu のワークフローはコマンドを呼ぶ YAML です。ステップで既存の Python スクリプトを実行できますが、オーケストレーション層自体に Python や framework import は不要です。
Prefect と比べて Dagu に必要なインフラは?
Dagu は状態がファイルベースなので 1 バイナリとファイルシステムがあれば動きます。一般的な Prefect 構成は DB 付きの server と 1 つ以上の worker を動かします。Dagu にマネージドクラウドはなく、自己ホストします。
次の一歩
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。