Airflow で消耗しているエンジニアへ：ワンバイナリで全部入りのワークフローエンジンがあるって知ってた？

煩雑な cron スクリプトから解放され、もっとスマートにワークフローを管理したいと感じたことはありませんか？
そんな方にぜひ紹介したいのが、Go で書かれたシンプルなワークフローオーケストレーター「[Dagu](https://github.com/dagu-org/dagu)」です。デバッグが困難なジョブの依存関係に悩んでいるなら、きっと役立つはずです。

もう問題だらけのスクリプトをサーバーに SSH して手作業で再起動する必要はありません。何より、どのタスクが何に依存しているか、綺麗な矢印でデータパイプラインを可視化できるのが爽快です。見ているだけで気持ちがいい！わかりやすい！

Airflow のような、インストールと運用にコンピュータサイエンスの専門家が３人も必要になるモンスターと違い、Dagu は徹底してシンプル。

バイナリは１つ、外部データベースも不要。数分で本格的なワークフローオーケストレーターが立ち上がります。公式ドキュメントでも「外部依存は最小限」と明言しており、それを実現しています。

## Airflow の理想と現実のギャップ

想像してみてください。自社のワークフローオーケストレーター導入を半年かけて検討し、コンサルは Airflow を猛プッシュ、アーキテクトは立派な構成図を描き、DevOps チームは Kubernetes クラスタを要求。初年度のコストはざっくり500万円。Python エンジニア３人の人件費は別枠です。

３ヶ月後、ほとんどのデータパイプラインはいまだに cron で動作。Airflow の PoC は週２で夜間障害が発生。DevOps エンジニアはタブとスペースが混在したせいで Python の DAG がパースできず、48時間格闘した挙げ句に退職届を提出。

Airflowは扱いが難しく、DevOpsエンジニアを急募するも、なかなか見つからない。

思い当たる節、ありませんか？心配無用、よくある話です。

## 誰も語らない現場の真実

多くのエンタープライズ向けワークフローツール企業は、**提供機能の90%は実際には必要ない** という事実を隠しています。

本当は不要なもの：
- 日次バッチのための分散システム
- ワークフローのメタデータ専用の巨大なDBクラスタ
- 常時稼働のDevOpsチーム
- 「Hello World」レベルの DAG 実行のための Python 専門知識
- シェルスクリプトを動かすだけの Python コード

本当に必要とされているもの：
- インストールしてすぐ使えること
- 何が動いているのか直感的に見えること
- シンプルで壊れにくいジョブ管理システム
- サーバーに SSH せずにジョブ再実行できる UI
- 新人エンジニアでも 15 分で理解できる仕組み

## Dagu： 「思い通りに動く」ワークフローエンジン

ここからが本題。世の中が「クラウドネイティブでマイクロサービスなワークフローオーケストレーター」で消耗している間に、Dagu は小さなチームによるイノベーションを体現しています。

**Airflow ができることを、より簡単に、50MBの単一バイナリで実現。**

本当にこれだけ。バイナリ一つ。

外部データベースもメッセージキューもコンテナも不要（もちろん使いたい人は使えます）。  
サーバーに置いてコマンドを打つだけで即稼働。

## Dagu 1.17.0-beta：シンプルと強さの両立

この最新ベータリリースは、ただのアップデートではありません。まるでエンタープライズ向けジョブ管理システムのような強力な機能が実装されました。具体的な魅力を紹介します。

### 1. 階層型 DAG ― 再利用性の高いワークフロー

「ほぼ同じなのにコピペしまくった ETL パイプライン」を覚えていますか？  
Dagu 1.17.0-beta では、親子関係の DAG が直感的に定義できます。

```yaml
# parent-dag.yaml
steps:
  - name: extract-data
    command: ./extract.sh
  - name: process-regions
    depends: extract-data
    run: child-dag.yaml
```

child-dagは子DAGとして動作。分離性と可視性を両立し、複雑さは一切ありません。

### 2. 組み込みキューイング ― インフラいらずで同時実行制御

驚くべきポイントはここ。Dagu にはキューイング機能が最初から組み込まれています。
追加サービスも、Redis も RabbitMQ も不要。ただ設定するだけ。

```yaml
maxActiveRuns: 1  # 同時実行は１つだけ
steps:
  - name: heavy-computation
    command: ./process-terabyte.sh
```

これでジョブは自動的に順番待ち。Airflow のために複雑なインフラの Terraform を書くブルシットジョブとはおさらばです。

### 3. 新UI ― Airflow に足りなかったもの

1.17.0-beta からモダンな新 UI を搭載。
見た目が良いだけでなく、本当に使いやすい機能が満載です：

* ダブルクリックで階層型の DAG の実行結果をドリルダウン
* 実行結果をステータスや日時で検索
* 詳細な実行結果の画面
* 標準エラー、標準出力が分かれており、見やすいログビューア

![](https://storage.googleapis.com/zenn-user-upload/9ab77304c439-20250602.png)

![](https://storage.googleapis.com/zenn-user-upload/4d191bf91089-20250602.png)

## 「でも ○○ はできる？」 疑問に全部答えます

**「でも Docker 必須なんだけど？」**
Dagu は Docker コンテナもネイティブに実行可能です。

```yaml
steps:
  - name: ml-training
    executor:
      type: docker
      config:
        image: tensorflow/tensorflow:latest
    command: python train.py
```

**「リモート実行がしたい」**
SSH エグゼキュータを内蔵しています。

```yaml
steps:
  - name: remote-backup
    executor:
      type: ssh
      config:
        host: backup-server.internal
    command: ./backup.sh
```

**「通知は？」**
成功/失敗時のメール通知も標準対応。

```yaml
mailOn:
  failure: true
  success: false
smtp:
  host: smtp.company.com
  port: 587
```

**「APIは？」**
もちろん、すべての機能を備えた REST API を同梱。

## 5分チャレンジ

まずは試してみませんか？タイマーを5分にセットして：

1. **1分目**：Dagu ダウンロード

```bash
curl -L https://raw.githubusercontent.com/dagu-org/dagu/main/scripts/installer.sh | bash
```

2. **2分目**：起動

```bash
./dagu start-all
```

3. **3分目**：初めてのDAG作成

実用的な例として、暗号通貨の価格を毎朝チェックして、買い時を逃さないワークフローを作ってみましょう。

ブラウザで http://localhost:8080 にアクセスし、「DAGs」→「New DAG」をクリック。
ファイル名を `crypto-analytics` とします。

「Spec」タブの下で、「Definition」を編集し、以下の内容を貼り付けます：

```yaml
# crypto-analytics.yaml
schedule: "0 9 * * *"  # 毎朝9時に実行
steps:
  - name: fetch-crypto-prices
    command: |
      curl -s "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,SOL&tsyms=JPY" \
      | jq -r 'to_entries | map("\(.key): ¥\(.value.JPY | floor | tostring | gsub("(?<a>\\d)(?=(?:\\d{3})+(?!\\d))"; "\(.a),"))") | .[]'
    output: CRYPTO_PRICES

  - name: analyze-market
    command: |
      btc_jpy=$(curl -s "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC&tsyms=JPY" | jq -r '.BTC.JPY')
      if (( $(echo "$btc_jpy < 14000000" | bc -l) )); then
        echo "🚨 買い時かも？ビットコインが1,400万円を下回っています！"
        echo "$CRYPTO_PRICES"
      else
        echo "📊 本日の暗号通貨価格（日本円）："
        echo "$CRYPTO_PRICES"
      fi
    depends: fetch-crypto-prices
    output: MARKET_REPORT

  - name: save-to-file
    command: |
      echo "$(date '+%Y-%m-%d %H:%M:%S')" >> crypto_history.txt
      echo "$MARKET_REPORT" >> crypto_history.txt
      echo "---" >> crypto_history.txt
    depends: analyze-market
```

このワークフローの面白いところ：
- **実際のAPIを使用**：CryptoCompare の無料APIで最新の暗号通貨価格を取得
- **データの受け渡し**：`output` で各ステップの結果を次のステップに渡せる
- **条件分岐**：価格が閾値を下回ったら特別なアラートを出す
- **履歴の保存**：毎日の価格を記録して、後で分析可能

保存ボタンを押せば、もう準備完了です！

![](https://storage.googleapis.com/zenn-user-upload/71d9651f6272-20250602.png)

4. **4分目**：実行

DAG の詳細ページに表示される「▶️」ボタンをクリックするだけで実行開始。
ターミナルに戻る必要すらありません。

5. **5分目**：結果を確認

実行が始まると、各ステップの状態がリアルタイムで更新されます。

各ステップをクリックすれば stdout/stderr のログが即座に確認可能。
価格データの取得から分析結果まで、すべてがブラウザ上で完結します。

これで本番対応のパイプラインが完成。Airflow のインストールガイドを読むよりも早く、Dagu のワークフローを体験できます。

![](https://storage.googleapis.com/zenn-user-upload/c84745f80126-20250602.png)

## これだけ簡単でいいのか？ Dagu の導入方法

Dagu の導入はシンプルさが際立っています。

**ローカルPCで動かす場合**

```bash
curl -L https://github.com/dagu-dev/dagu/releases/latest/download/dagu_linux_amd64 -o dagu
chmod +x dagu
./dagu start-all
```

**Dockerで動かす場合**

```bash
docker run --rm -p 8080:8080 ghcr.io/dagu-org/dagu:latest dagu start-all
```

**EC2インスタンス＋ネットワークドライブ**

```bash
ssh ec2-user@your-instance

curl -L https://github.com/dagu-dev/dagu/releases/latest/download/dagu_linux_amd64 -o /usr/local/bin/dagu
chmod +x /usr/local/bin/dagu

sudo mount -t nfs4 fs-12345678.efs.region.amazonaws.com:/ /mnt/dags

dagu start-all --dags /mnt/dags
```

**Kubernetes環境**

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dagu
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: dagu
        image: ghcr.io/dagu-org/dagu:latest
        ports:
        - containerPort: 8080
```

## 他ツールとの明確な違い

比較は明快です。Airflow はたいていの場合、オーバースペック。
cron はシンプルですが、規模が大きくなると破綻します。
Dagu は cron の手軽さと本格的なワークフローエンジンの力を両立。Go 製ならではのパフォーマンスとセットアップの手軽さも特徴です。

## 結論

Dagu 1.17.0-beta は「次世代エンタープライズプラットフォーム」を目指してはいません。
不要な機能拡充ではなく、**ワークフローはもっとシンプルでいい** という課題をただ真っ直ぐに解決しています。

すべてにクラウドアーキテクトが必要な時代に、Dagu は別路線をとっています。
複雑なジョブの運用に疲れたエンジニアが作った、速くて信頼性が高い「思った通りに動く」ワークフローエンジンです。

## 参考資料

* [Dagu 公式リポジトリ](https://github.com/dagu-dev/dagu/releases)
* [ドキュメント](https://dagu.readthedocs.io/)