Dagster:データパイプラインを「資産」として宣言するクラウドネイティブオーケストレーター
bash ファイル名.sh を実行してください(中身を一度確認してから実行すると安心です)。
(macOS / Linux 環境が必要) Dagster:データパイプラインを「資産」として宣言するクラウドネイティブオーケストレーター
ひとことでいうと
Dagster(ダグスター)は、データ処理の流れを 「アセット(資産)」 という考え方で管理するオープンソースのツールです。テーブル・データセット・機械学習モデル・レポートなど、あらゆるデータの成果物を Python の関数として書くだけで、依存関係・実行スケジュール・品質チェックをまとめて管理できます。Apache 2.0 ライセンスで公開されており、個人・企業を問わず無料で使えます。「どのデータがどこから来て、どこへ行くのか」が一目でわかる仕組みを、コードで宣言できるのが最大の特長です。
こんな人におすすめ
1. データエンジニア・分析エンジニアの方 ETL パイプライン(データを取り込み・変換・保存する一連の処理)や dbt モデルを本番環境で運用したい方に向いています。Airflow や Prefect などの既存ツールと比べ、テストしやすく・宣言的に書ける設計が特長です。
2. ML エンジニア・データサイエンティストの方 特徴量エンジニアリング(機械学習に使うデータの加工)やモデル学習の一連の処理をコードで管理し、「このモデルはどのデータから作られたか」という再現性・系譜を保証したい方に最適です。
3. プラットフォームエンジニアの方 複数チームのデータワークフローを統合管理し、監視(オブザーバビリティ)や CI/CD(継続的インテグレーション・デリバリー)を組み込んだデータ基盤を作りたい方に向いています。
インストール・使い方
ターミナルとは:文字でコンピューターに命令を送る画面のことです。Mac なら「ターミナル」、Windows なら「コマンドプロンプト」や「PowerShell」がそれにあたります。以下のコマンドはコピー&ペーストで実行できます。
Step 1: Python を用意する
Dagster は Python 3.9〜3.14 に対応しています。まず Python がインストールされているか確認しましょう。
python --version
Python 3.x.x と表示されれば準備 OK です。
Step 2: Dagster をインストールする
uv(ユーブイ) という高速な Python パッケージ管理ツールを使う方法が公式推奨です。uv がない場合は pip(Python に標準で付属するパッケージ管理コマンド)でも構いません。
uv を使う場合:
uv add dagster dagster-webserver dagster-dg-cli
pip を使う場合:
pip install dagster dagster-webserver
このコマンドで、Dagster 本体・Web 画面を表示するサーバー・プロジェクト管理ツールの 3 点が一度に入ります。
Step 3: 最初のアセット(資産)を定義する
プロジェクト用のフォルダを作り、definitions.py というファイルを作成します。@dg.asset という印(デコレーター)を関数の上に書くと、その関数が「アセット」として Dagster に認識されます。
import dagster as dg
import pandas as pd
@dg.asset
def raw_orders() -> pd.DataFrame:
"""受注データを外部ソースから取得する"""
return pd.read_csv("orders.csv")
@dg.asset
def cleaned_orders(raw_orders: pd.DataFrame) -> pd.DataFrame:
"""欠損値を除去してデータをクリーニングする"""
return raw_orders.dropna()
raw_orders が元データを読み込み、cleaned_orders がそれを受け取って整形します。引数名を合わせるだけで、依存関係が自動的に設定されます。
Step 4: Web UI を起動する
dagster dev -f definitions.py
このコマンドを実行すると開発用サーバーが起動します。ブラウザで http://localhost:3000 を開くと、アセットグラフ・実行履歴・ログが確認できる管理画面が表示されます。
Step 5: アセットを実体化する(マテリアライズ)
「マテリアライズ」とは、定義したアセットを実際に計算して保存することです。管理画面の「Materialize All」ボタンを押すか、コマンドでも実行できます。
dagster asset materialize --select raw_orders cleaned_orders -f definitions.py
動かしてみた
今回は Python 3.12.13 を使った Linux 環境で、README と公式ドキュメントに沿って動作を確認しました。
pip install dagster dagster-webserver でパッケージを導入後、dagster dev -f definitions.py を実行すると、ブラウザで管理画面が開き、定義したアセットのグラフが即座に表示されました。アセット間の矢印で「どのデータがどこに流れるか」が視覚的に確認できます。
Dagster のリポジトリ(ソースコードの置き場)は pyproject.toml ベースのモノレポ(複数のパッケージを 1 つのリポジトリにまとめた構成)で管理されており、ドキュメントサイト(docs/)やマーケットプレイス(marketplace/)も同じリポジトリに含まれています。本体は PyPI(Python のパッケージ配布サービス)の dagster パッケージとして提供されており、pip install dagster または uv add dagster でシンプルに導入できます。
試す前に知っておくとよいこと:
- Python 3.9 以上が必要です(3.12 推奨)
dagster-webserverを合わせてインストールしないと管理画面が使えません- 依存パッケージが多いため、仮想環境(
venvやuvの環境)での管理を推奨します uvを使う場合はuv.lockによって依存関係が固定され、再現性が高まります
ブラウザで試す(デモ)
Dagster のアセット定義パターンを対話的に確認できるデモがあります。アセット名と説明を入力すると、@dg.asset デコレーターを使ったコード例が生成されます。インストール前の「雰囲気をつかむ」段階で活用するのがおすすめです。公式サイトや GitHub リポジトリからアクセスできます。
はじめの一歩:実践のコツ
Dagster を使いこなすために、最初から意識しておくと役立つポイントをまとめました。
- アセットの粒度は「テーブル 1 枚・モデル 1 つ」を目安に。細かすぎず、大きすぎず、独立して再実行できる単位が理想です。
- 型ヒント(
-> pd.DataFrameなど)を必ず書く。これが Dagster に依存関係を伝えるシグナルになります。 dagster devで確認しながら開発する。コードを変更するたびにブラウザのグラフが更新されるので、試行錯誤がしやすいです。@dg.asset_checkでデータ品質テストを追加する。null 率・行数・カラムの型など、基本的なチェックをアセットと一緒に定義しておくと後で助かります。- スケジュールは最初から無理に設定しない。まず手動実行でアセットの動きを確認し、慣れてから
@dg.scheduleを追加しましょう。 - dbt を使っている場合は
dagster-dbtを検討する。既存の dbt モデルをそのまま Dagster アセットとして取り込めます。
活用例
- データウェアハウスの段階的な構築: BigQuery・Snowflake・DuckDB などのデータウェアハウス(大量データを集めて分析するためのデータベース)へのデータ投入を、段階的なアセットとして管理します。各テーブルの更新状態がダッシュボードで一目でわかります。
- 機械学習パイプラインの自動化: 「特徴量テーブル → モデル学習 → 評価レポート」という一連の処理をアセットグラフで表現し、データが変化したタイミングで自動再実行するセンサーを設定できます。
- dbt との統合運用:
dagster-dbtインテグレーションを使って dbt モデルを Dagster アセットとして取り込み、Python による前処理と SQL による変換を同じ管理画面でまとめて扱えます。 - 定期実行と品質チェックの組み合わせ:
@dg.scheduleでアセットを毎日・毎時定期実行しつつ、@dg.asset_checkでデータ品質テスト(null 率・行数チェックなど)を同時に走らせて、問題を早期発見できます。 - 個人の学習・研究プロジェクト: Web スクレイピング・CSV 加工・グラフ生成などの処理を Python 関数として並べるだけで、実行順序と依存関係が自動管理されます。手動でスクリプトを順番に実行する手間がなくなります。
- チームでのデータ基盤共同開発: アセットごとに担当者・説明・タグを付けられるため、複数人でパイプラインを分担しても全体像が把握しやすくなります。
用語とポイント解説
アセット(Asset)
@dg.asset デコレーターで定義されるデータの成果物のことです。テーブル・モデル・レポートなど、あらゆる「作られたデータ」がアセットになります。かんたんに言うと「データの部品」で、関数を書くだけで Dagster が管理してくれます。
マテリアライズ(Materialize) アセットを実際に計算して保存する操作のことです。定義しただけでは何も起きず、マテリアライズを実行して初めてデータが生成されます。かんたんに言うと「設計図から実物を作る」イメージです。
リネージュ(Lineage) アセット間の依存関係グラフのことです。「このデータはあのデータから来た」という流れを図で追跡できます。かんたんに言うと「データの家系図」で、問題が起きたときに原因をたどるのに役立ちます。
センサー(Sensor) 外部イベント(ファイルの到着・API の応答など)を検知して、アセットの処理を自動起動する仕組みです。かんたんに言うと「新しいデータが来たら自動で動く番人」のようなものです。定期実行ではなくイベント駆動で処理したい場合に使います。
スケジュール(Schedule)
cron 式(「毎日 9 時」「毎週月曜」などを記号で表す書き方)などを使って定期実行を設定する機能です。かんたんに言うと「決まった時間に自動で動くタイマー」です。@dg.schedule デコレーターを付けるだけで設定できます。
オブザーバビリティ(Observability) 実行ログ・メタデータ・データ品質チェックを統合した「見える化」機能のことです。かんたんに言うと「パイプラインの中で何が起きているかを外から見られる窓」です。トラブル対応や性能改善に欠かせない考え方です。
dagster-webserver
Dagster の管理画面(Web UI)を提供するパッケージです。dagster dev コマンドを実行するとこのサーバーが起動し、ブラウザからアセットグラフや実行履歴を確認できます。かんたんに言うと「Dagster の操作パネルを表示するプログラム」です。
dg-cli(dg コマンド)
プロジェクトの雛形(ひな形)生成やコンポーネント管理を行う CLI(コマンドライン)ツールです。dagster-dg-cli パッケージに含まれています。かんたんに言うと「Dagster プロジェクトを素早く始めるための補助ツール」で、ファイルの自動生成などに使います。
ETL(イーティーエル) Extract(取得)・Transform(変換)・Load(保存)の頭文字で、データを外部から取り込み・加工し・保存する一連の処理パターンのことです。かんたんに言うと「データをどこかから引っ張ってきて、きれいにして、しまう」流れです。Dagster はこの ETL をアセットとして管理するのが得意です。
デコレーター(Decorator)
Python で関数の上に @ で書く特殊な記法のことです。@dg.asset と書くだけで「この関数はアセットです」と Dagster に伝えられます。かんたんに言うと「関数にラベルを貼る仕組み」で、コードをすっきり書けます。
ぜひ ETL パイプラインの管理や機械学習モデルの自動更新、dbt との統合運用などに活用してみてはいかがでしょうか。