Dagu vs Dagster
Dagu と Dagster は別の課題を解く。
Dagster は software-defined assets と lineage を中心に据えた Python のデータオーケストレーターです。Dagu は、すでに持っているコマンドを呼ぶ YAML ワークフローを動かす単一バイナリです。このページはそれぞれの適所を説明します。
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]単一バイナリで完結し、Postgres、daemon、webserver の運用が不要
ワークフローは Python フレームワークではなく宣言的な YAML
状態はファイル管理で、外部の database や message broker は不要
shell、Docker、HTTP、SSH、SubDAG、SQL、AI エージェントの executor を搭載
Dagu が提供するもの
Dagu はコマンドをスケジュールし、リトライし、観測します。ワークフローを YAML で書くと、Dagu はそれをファイルベースの 1 プロセスとして実行します。Web UI は追加サービスなしで実行、ログ、履歴を表示します。
- スクリプト、バイナリ、コンテナ、HTTP、SSH、SQL、AI エージェントのステップを実行
- 単一バイナリで始め、後からキューや分散実行へ拡張
- database を立てずに Web UI で実行履歴とログを確認
Dagster との違い
Dagster は data asset を作業の単位として扱います。asset を Python で宣言すると、プラットフォームがその間の lineage、partition、materialization を追跡します。セルフホスト構成では Postgres を背後に webserver と daemon が動きます。
- software-defined assets がパイプラインの生成するテーブルやファイルをモデル化
- partition と backfill でデータの一部を処理・再処理できる
- IO manager が読み書きを担い、asset のコードを簡潔に保つ
Dagster を選ぶべきとき
作業の本質が data asset とその lineage にあるなら、Dagster が優れた選択です。Dagu には software-defined assets も IO manager もなく、Python フレームワークでもないため、Dagster のようにデータ基盤をモデル化することはできません。
- dbt のモデルやテーブルにまたがる lineage と asset 単位の可観測性が欲しい
- partition 化したデータ、backfill、IO manager がパイプラインの中心にある
- チームが Python でパイプラインを書き、asset 中心の開発モデルを求める
Dagu vs Dagster 一覧
FAQ
Dagu を導入する前によくある質問
Dagu は Dagster を置き換えますか?
data asset の用途では置き換えません。Dagster は software-defined assets、lineage、partition のために作られており、Dagu はそれらを扱いません。主にコマンドのスケジュールと観測が目的で、asset モデルが過剰だった場合にのみ Dagu が代わりになります。
Dagu でデータパイプラインを動かせますか?
はい。コマンド、コンテナ、HTTP、SSH、SQL、SubDAG で表現できる場合は動かせます。Dagu はステップをオーケストレーションしますが、その間の data asset や lineage は追跡しません。
Dagu の実行に database は必要ですか?
いいえ。Dagu は状態をファイルに保持し、単一バイナリで動きます。Postgres、daemon、別の webserver を運用する必要がなく、これがセルフホストの Dagster との主な構成上の違いです。
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。