Dagu vs Windmill

Dagu vs Windmill: 宣言的 YAML と、スクリプト/アプリ基盤。

どちらもセルフホストで動き、速いです。Windmill はスクリプトを workflow や webhook、low-code アプリに変え、PostgreSQL を使います。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]

PostgreSQL 不要の単一バイナリ

Workflow は既存コマンドを呼ぶ宣言的 YAML

shell、Docker、HTTP、SSH、SQL、SubDAG、AI エージェント向け executor

ローカル、キュー、分散で実行

一目で比較

Windmill vs. Dagu の概要

記述方法
Dagu

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

Windmill

基盤内にホストされた Python、TypeScript、Go、Bash、SQL のスクリプト。

ランタイム
Dagu

単一バイナリ、ファイルベースの状態、DB なし。

Windmill

PostgreSQL キューに支えられた Rust のサービスと worker。

範囲
Dagu

shell、Docker、HTTP、SSH、SQL、AI エージェントステップによるオーケストレーション。

Windmill

Workflow に加え、approval flow を備えた low-code アプリ/UI ビルダー。

詳細

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

01

作業の定義方法は 2 通り

Windmill は code-first の基盤です。Python、TypeScript、Go、Bash、SQL でスクリプトを書くと、それぞれに webhook と生成された UI が付きます。Dagu は workflow を YAML に保ち、スクリプトやバイナリをステップとして扱います。

  • Windmill はスクリプトを基盤内に保存・実行し、入力フォームを自動生成します。
  • Dagu はバージョン管理された YAML でグラフを定義し、コマンドを呼びます。
  • どちらも依存関係、リトライ、スケジュール、実行履歴を提供します。
02

運用に必要なもの

Windmill は状態とジョブキューに PostgreSQL を必要とし、通常は server と worker のコンテナをその上で動かします。Dagu は状態をファイルに保つ単一バイナリなので、用意・バックアップ・アップグレードする DB がありません。

  • Dagu はローカルファイルに支えられた 1 プロセスから始まります。
  • Workflow モデルを変えずに、後からキューと worker を追加できます。
  • Windmill は十分にスケールしますが、PostgreSQL の存在と管理を前提とします。
03

Windmill を選ぶべきとき

Windmill はオーケストレーション以上のことをし、その広さこそが価値です。スクリプトを共有可能なエンドポイントとして置き、その周りに内部アプリや UI を組みたいなら、Windmill は Dagu が踏み込まない領域をカバーします。

  • ランナーだけでなく、low-code のアプリ/UI ビルダーが欲しい。
  • フォーム自動生成、approval step、豊富な組み込み連携が欲しい。
  • 外部コマンド呼び出しより、管理されたスクリプトでロジックを書きたい。

FAQ

Dagu を導入する前によくある質問

Dagu は Windmill を置き換えますか?

完全にではありません。Dagu はオーケストレーション部分、つまりスケジュール、依存関係、リトライ、ログ、実行用 UI を置き換えます。Windmill の low-code アプリビルダーや生成 UI、広い連携カタログは提供しません。コマンドのスケジュールと監視だけが必要なら Dagu が軽い選択です。

Dagu に PostgreSQL は必要ですか?

いいえ。Dagu は状態をローカルファイルに保ち単一バイナリで動くため、導入・管理する DB はありません。Windmill は状態とジョブキューに PostgreSQL を使います。

Dagu で Python や TypeScript のスクリプトを動かせますか?

はい。ステップは任意のコマンドを実行できるので、Python、TypeScript、Bash、コンパイル済みバイナリも動きます。違いは、Windmill のようにスクリプトをホスト・管理するのではなく、ディスク上のスクリプトを呼ぶ点です。

次の一歩

まず 1 つのワークフローから。

Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。