LangGraph 代替
アプリに埋め込むライブラリではなく、エージェントワークフローのランタイム。
LangGraph はエージェントのグラフをコードで表現する良い方法です。Dagu はそれを実行する層です。単一の自己ホストバイナリで、ワークフローは YAML、エージェントは通常のステップ、スケジュール、キュー、リトライ、永続的な中断、実行履歴は、周囲に書くアプリケーションではなくエンジンから得られます。
# triage.yaml
schedule: "*/15 * * * *"
max_active_runs: 1
steps:
- id: fetch
run: ./scripts/fetch-new-issues.sh
output: ISSUES
- id: classify
action: harness.run
with:
provider: claude
prompt: Classify each issue in ${ISSUES}. Return JSON.
output_schema: schemas/triage.json
retry_policy:
limit: 3
interval_sec: 30
depends: [fetch]
- id: apply_labels
run: ./scripts/apply-labels.sh
depends: [classify]ワークフローはアプリのコードではなく YAML
ステップはプロセスなので、どの言語でも CLI でも動く
スケジュール、キュー、リトライ、履歴はバイナリに同梱
待機中の実行はプロセスを手放し、後で再開する
一目で比較
運用する側から見た LangGraph と Dagu
バイナリとして動かすワークフローエンジン。
Python または JavaScript のアプリに組み込むライブラリ。
宣言的な YAML。実行対象のコードと並べてバージョン管理します。
アプリケーションコード内でのグラフ構築。
スケジュール、キュー、リトライ、成果物、実行履歴がエンジンに付属します。
チェックポインタがグラフ状態を永続化し、スケジュールと配信は自前のサービスか LangGraph Platform が担います。
プロセス。任意の言語、任意の CLI、必要ならコンテナ内。
ホストプロセス内の関数。
詳細
それぞれの強みと向き不向き
ライブラリにはアプリケーションが要る。エンジンには要らない。
LangGraph はグラフを組み立てます。それでも、スケジュールし、キューに入れ、リトライし、状態を永続化し、何が起きたかを見せる何かが必要です。その何かとは、自分で書くサービスか LangGraph Platform です。Dagu は最初からその層です。
- バイナリを 1 つ動かすだけ。書くべき Web サービスも、設計すべきワーカープールもありません
- スケジュール、キュー、リトライ、実行履歴は連携先ではなくエンジンの機能です
- 同じ定義を、ノート PC でも 1 台の VM でも、コーディネーターとワーカー構成でも動かせます
ステップはプロセスなので、ワークフローが言語に縛られない
LangGraph のノードは、自分のプロセス内で動く Python または JavaScript の関数です。Dagu のステップはコマンドなので、作業の単位はその環境ですでに動いているものになります。
- シェルスクリプト、バイナリ、コンテナ、SSH コマンド、HTTP エンドポイント、SQL を 1 つのワークフローから呼ぶ
- harness.run でコーディングエージェントを実行する: Claude、Codex、Gemini、OpenCode、社内 CLI
- 任意のステップに、マウント、ツールチェーン、外部通信を明示したコンテナサンドボックスを与える
描けるならグラフを描き、描けないなら順序を委ねる
LangGraph はすべての経路を描くことを求めます。順序がレビューの内容に依存し始めるまでは、それが正しいやり方です。Dagu は type: graph を既定のまま残し、1 つのグラフに収まらなかった仕事のために type: controller を足しました。
- コントローラワークフローは完了条件を宣言し、次のアクションはモデルが選びます
- モデルは宣言されたステップの中からしか選べないため、影響範囲はそのファイルです
- どちらの型でも実行は同じで、ログ、リトライ、成果物、履歴も同じです
FAQ
Dagu を導入する前によくある質問
Dagu は LangGraph をそのまま置き換えられますか?
いいえ。層が違います。Python や JavaScript でモデル呼び出しを組み立て、グラフの状態を細かく制御したい場合は LangGraph が適しています。Dagu は、作業がコマンドとエージェント CLI の集まりで、スケジュール、リトライ、承認、監査証跡が必要な場合に向いています。
LangGraph を Dagu の中で使い続けられますか?
使えます。LangGraph のアプリケーションをスクリプトまたはコンテナのまま残し、1 つのステップとして実行してください。その周囲のスケジュール、リトライポリシー、ログ、成果物、実行履歴を Dagu が提供します。
Dagu は human-in-the-loop をどう扱いますか?
ヒューマンタスク、およびコントローラワークフロー内の ask_user が、実行を永続的に中断します。プロセスは終了してワーカースロットが解放され、担当者が回答すると新しいプロセスで実行が再開します。
Dagu にデータベースは必要ですか?
不要です。Dagu は単一バイナリで、ワークフロー定義、実行履歴、ログをファイルとして保存します。最初の実行までにメタデータベースもメッセージブローカーも運用する必要がありません。
次の一歩
まず 1 つのワークフローから。
Dagu をインストールし、不安定なスクリプトやエージェントタスクを 1 つ YAML に移して、実際の実行履歴を見て判断できます。