Dagu vs Prefect

Python を書かずにオーケストレーションしたいなら Dagu を。

Prefect は flow をコードで書くデータチーム向けの Python framework です。Dagu は宣言的 YAML で既存のコマンドを呼ぶ単一バイナリで、運用する DB がありません。本ページは双方の適所を正直に見ていきます。

decorator 不要、コマンドを呼ぶワークフロー
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 早見表

記述方法
Dagu

コマンドを呼ぶ宣言的 YAML。

Prefect

@flow と @task の decorator を付けた Python 関数。

ランタイム
Dagu

ファイルベースの状態を持つ単一バイナリ。

Prefect

Prefect server と DB、別建ての worker。

向いている用途
Dagu

小さな自己ホスト型ランタイムを求めるスクリプト、コンテナ、運用自動化。

Prefect

動的な flow と任意のマネージドクラウドを求める Python 中心のデータチーム。

詳細

それぞれの強みと向き不向き

01

Python framework ではなく宣言的 YAML

Prefect は @flow と @task の decorator で包んだ Python 関数として処理を表し、ワークフローがコードベースの中に置かれます。Dagu は各ステップをコマンドのまま保ち、スケジュール、リトライ、依存関係を YAML で周囲に付けます。

  • shell、Docker、HTTP、SSH、SQL、SubDAG を実行するステップを定義
  • Python を書かない運用者にも読めるワークフローを保つ
  • 呼び出すスクリプトの隣で YAML を git 管理
02

ファイルベースの状態を持つ単一バイナリ

本番の Prefect 構成は Postgres などの DB を後ろに置いた Prefect server と、flow を実行する worker を動かします。Dagu は単一バイナリとして配布され、実行履歴、ログ、キュー状態をローカルのファイルに保存します。

  • ダウンロード 1 つで開始し、DB の用意は不要
  • ファイルと 1 バイナリの扱いでバックアップとアップグレード
  • 必要になればローカル実行からキューや分散 worker へ拡張
03

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 に移して、実際の実行履歴を見て判断できます。