オープンソースデータパイプライン比較: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 を一括実行
機能比較表
| 比較項目 | Airflow | Dagster | dbt |
|---|---|---|---|
| 用途 | オーケストレーション | オーケストレーション | SQL変換 |
| 学習コスト | 高い | 中程度 | 低い |
| DAG定義 | Python | Python(アセット) | SQL/YAML |
| テスト | ⚠️ | ✅ | ✅ 豊富 |
| データリネージ | ⚠️ | ✅ 高機能 | ✅ |
| ドキュメント自動生成 | ❌ | ✅ | ✅ |
| スケジューリング | ✅ | ✅ | ✅(外部) |
| モニタリング | ✅ | ✅ | ✅ |
| 型チェック | ❌ | ✅ | ❌ |
| Kubernetes | ✅ Helm | ✅ Helm | N/A |
| セルフホスト | ✅ | ✅ | ✅ |
| ライセンス | Apache 2.0 | Apache 2.0 | Apache 2.0 |
| GitHub Stars | 36k+ | 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 |