AI

オープンソースデータパイプライン比較:Apache Airflow vs Dagster vs dbt でETLを自動化する

オープンソースラボ編集部2026年6月13日

オープンソースデータパイプライン比較:Apache Airflow vs Dagster vs dbt でETLを自動化する

BigQueryやSnowflakeのデータウェアハウスにデータを定期的に取り込むETLパイプラインの構築・運用・監視は複雑です。Apache Airflow・Dagster・dbtを組み合わせて、エンタープライズグレードのデータパイプラインをオープンソースで構築しましょう。

データエンジニアリングのスタックを理解する

データパイプラインには3つのレイヤーがあります:

  • オーケストレーション層: いつ・どの順序でジョブを実行するか(Airflow・Dagster)
  • 変換層: データをどう整形・集計するか(dbt)
  • ストレージ層: どこにデータを保存するか(BigQuery・Snowflake・Redshift)

主要ツールの概要

Apache Airflow

Airbnbが2014年に開発したデータワークフロー管理ツールで、現在はApache Software FoundationのTLPです。DAG(有向非巡回グラフ)でパイプラインを定義し、数千のタスクを並列実行できます。

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta

default_args = {
    'owner': 'data-team',
    'retries': 3,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    'daily_sales_etl',
    default_args=default_args,
    schedule_interval='0 6 * * *',
    start_date=datetime(2024, 1, 1),
    catchup=False,
) as dag:

    extract = PythonOperator(
        task_id='extract_from_postgres',
        python_callable=extract_sales_data,
    )
    transform = PythonOperator(
        task_id='transform_data',
        python_callable=transform_sales_data,
    )
    # 依存関係: extract -> transform -> load
    extract >> transform

Dagster

「データアセット中心」の設計が特徴のモダンなオーケストレーションツールです。タスクではなく「アセット(データ成果物)」を主体として考えるため、データリネージ(データの血統)の追跡・テスト・型チェックが容易です。

from dagster import asset, AssetIn
import pandas as pd

@asset(group_name="raw")
def raw_sales_data() -> pd.DataFrame:
    conn = get_postgres_connection()
    return pd.read_sql("SELECT * FROM sales WHERE date > NOW() - INTERVAL '1 day'", conn)

@asset(group_name="transformed", ins={"raw_sales_data": AssetIn()})
def daily_sales_summary(raw_sales_data: pd.DataFrame) -> pd.DataFrame:
    return raw_sales_data.groupby(['product_id', 'region']).agg({
        'amount': 'sum',
        'quantity': 'sum',
    }).reset_index()

@asset(group_name="output", ins={"daily_sales_summary": AssetIn()})
def sales_to_bigquery(daily_sales_summary: pd.DataFrame):
    daily_sales_summary.to_gbq(
        destination_table='analytics.sales_daily',
        project_id='my-project',
        if_exists='append',
    )

dbt(data build tool)

SQLを使ってデータウェアハウス内のデータ変換を行うツールです。SQLファイルをバージョン管理し、テスト・ドキュメント・依存関係管理を自動化します。ELT(Extract-Load-Transform)アプローチの「Transform」部分を担当します。

-- models/sales/daily_sales.sql
{{ config(materialized='incremental', unique_key='date_id') }}

WITH base AS (
    SELECT
        DATE(created_at) AS sale_date,
        product_id,
        SUM(amount) AS total_amount,
        COUNT(*) AS order_count
    FROM {{ source('raw', 'orders') }}
    WHERE status = 'completed'
    {% if is_incremental() %}
        AND created_at > (SELECT MAX(sale_date) FROM {{ this }})
    {% endif %}
    GROUP BY 1, 2
)

SELECT
    {{ dbt_utils.generate_surrogate_key(['sale_date', 'product_id']) }} AS date_id,
    sale_date,
    product_id,
    total_amount,
    order_count,
    CURRENT_TIMESTAMP() AS updated_at
FROM base
dbt run          # モデルを実行
dbt test         # テストを実行
dbt docs generate && dbt docs serve
dbt build        # run + test を一括実行

機能比較表

比較項目AirflowDagsterdbt
用途オーケストレーションオーケストレーションSQL変換
学習コスト高い中程度低い
DAG定義PythonPython(アセット)SQL/YAML
テスト⚠️✅ 豊富
データリネージ⚠️✅ 高機能
ドキュメント自動生成
スケジューリング✅(外部)
モニタリング
型チェック
Kubernetes✅ Helm✅ HelmN/A
セルフホスト
ライセンスApache 2.0Apache 2.0Apache 2.0
GitHub Stars36k+12k+9k+

Modern Data Stack:Airflow + dbt の組み合わせ

現代のデータスタックは多くの場合以下の組み合わせです:

  • データ収集: Airbyte(OSS)でソースからDWHにロード
  • 変換: dbtでSQLによるデータ変換・集計モデル構築
  • オーケストレーション: Airflow/DagsterがdbtのrunをスケジューリングしてBIツールに渡す
  • 可視化: MetabaseでBIダッシュボードを構築

Dagsterはdbtのネイティブ統合(dagster-dbt)があり、dbtモデルをDagsterアセットとして自動取り込みできます。

DevOps・データエンジニアリングツールはDevOpsカテゴリ(/categories/devops)で一覧でき、データ可視化ツールはローコードカテゴリ(/categories/low-code)でも探せます。

FAQ

Q. AirflowとDagsterのどちらを新規プロジェクトで選ぶべきですか?

A. 2024年時点での選択基準: チームがAirflowに習熟していて移行コストを払えない場合はAirflow継続。新規プロジェクトや「データアセット管理・テスト・リネージが重要」ならDagsterが現代的な選択です。Dagsterはアセット中心の設計でデータカタログ機能を内蔵しており、データ品質管理が容易です。

Q. dbtはAirflowなしに単独で使えますか?

A. はい。dbt Cloud(SaaS版)にはスケジューリング機能が内蔵されており、Airflowなしでジョブを定期実行できます。セルフホストのdbt Coreはスケジューリング機能がなく、cronやAirflow/Dagsterと組み合わせます。小規模チームではdbt Cloud Developerプラン(無料枠あり)から始めるのが最速です。

Q. BigQueryとdbtを統合する最低限の設定を教えてください。

A. profiles.ymlにBigQueryのプロジェクトIDとサービスアカウントを設定し、dbt debugで接続確認します。その後models/にSQLファイルを作成してdbt runで実行するだけです。Google Cloud Service Accountのbigquery.dataEditor権限が必要です。

Q. Airflowのセルフホストは複雑ですか?

A. ローカルモード(airflow standaloneコマンド)は1コマンドで起動でき、開発用途に最適です。本番環境ではCelery Worker・Redis・PostgreSQLを組み合わせるか、Kubernetes(Helm Chart)を使います。Google Cloud Composer・MWAA(AWS)はAirflowのマネージドサービスです(有料)。

Q. データパイプラインのエラーを自動で検知・通知するには?

A. AirflowとDagsterはどちらもSlack/PagerDutyへのアラート通知機能を持っています。Airflowはon_failure_callbackでタスク失敗時にSlack通知を設定できます。dbtはテスト失敗時にエラーを返し、CIパイプライン(GitHub Actions)で自動検知して通知する構成が一般的です。

まとめ

ユースケース推奨ツール
複雑なジョブ依存関係・大規模Airflow
アセット中心・データ品質重視Dagster
SQL変換・ELTのT部分dbt
実績あるスタックAirflow + dbt

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。