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

形態
Dagu

バイナリとして動かすワークフローエンジン。

LangGraph

Python または JavaScript のアプリに組み込むライブラリ。

定義
Dagu

宣言的な YAML。実行対象のコードと並べてバージョン管理します。

LangGraph

アプリケーションコード内でのグラフ構築。

運用
Dagu

スケジュール、キュー、リトライ、成果物、実行履歴がエンジンに付属します。

LangGraph

チェックポインタがグラフ状態を永続化し、スケジュールと配信は自前のサービスか LangGraph Platform が担います。

作業の単位
Dagu

プロセス。任意の言語、任意の CLI、必要ならコンテナ内。

LangGraph

ホストプロセス内の関数。

詳細

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

01

ライブラリにはアプリケーションが要る。エンジンには要らない。

LangGraph はグラフを組み立てます。それでも、スケジュールし、キューに入れ、リトライし、状態を永続化し、何が起きたかを見せる何かが必要です。その何かとは、自分で書くサービスか LangGraph Platform です。Dagu は最初からその層です。

  • バイナリを 1 つ動かすだけ。書くべき Web サービスも、設計すべきワーカープールもありません
  • スケジュール、キュー、リトライ、実行履歴は連携先ではなくエンジンの機能です
  • 同じ定義を、ノート PC でも 1 台の VM でも、コーディネーターとワーカー構成でも動かせます
02

ステップはプロセスなので、ワークフローが言語に縛られない

LangGraph のノードは、自分のプロセス内で動く Python または JavaScript の関数です。Dagu のステップはコマンドなので、作業の単位はその環境ですでに動いているものになります。

  • シェルスクリプト、バイナリ、コンテナ、SSH コマンド、HTTP エンドポイント、SQL を 1 つのワークフローから呼ぶ
  • harness.run でコーディングエージェントを実行する: Claude、Codex、Gemini、OpenCode、社内 CLI
  • 任意のステップに、マウント、ツールチェーン、外部通信を明示したコンテナサンドボックスを与える
03

描けるならグラフを描き、描けないなら順序を委ねる

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