Claude CodeのAstronomerプラグインでAirflow DAGを書いて直す
Astronomerのデータエンジニアリングプラグインを入れ、authoring-dagsでDAGを書き、debugging-dagsで失敗を直し、Airflow 3への移行とCosmosまで進める手順です。
Astronomerが配布するデータエンジニアリングプラグインは、Airflow用のMCPサーバーと30以上のスキルを1回の導入でまとめて入れられます。DAGの新規作成、失敗の原因調査、Airflow 2から3への移行、dbtプロジェクトのDAG化までを、スキルが決まった手順で進めます。ここでは入れ方、DAGを書くスキルと直すスキル、移行とCosmosの扱い、安全に任せるための設定を順に追います。
プラグインの入れ方と最初の確認
導入は2コマンドです。マーケットプレイスの表示名は「Data Engineering」ですが、GitHubのREADMEが示すインストール名はastronomer-data@astronomerです。
claude plugin marketplace add astronomer/agents
claude plugin install astronomer-data@astronomer以前の名前data@astronomerで入れた場合は、先にアンインストールしてから入れ直します。スキルが一覧に出ないときも同じ手順で再導入します。
claude plugin uninstall data@astronomer \
&& claude plugin marketplace update \
&& claude plugin install astronomer-data@astronomerプラグインにはAirflow MCPサーバーが含まれ、PyPIからuvxで起動します。Airflowのプロジェクトディレクトリ(airflow.cfgかdags/がある場所)でClaude Codeを起動すると、接続先を自動で見つけます。リモートのAirflowを使うなら、次の環境変数を設定します。
| 環境変数 | 役割 |
|---|---|
AIRFLOW_API_URL | 役割Airflow webserverのURL |
AIRFLOW_USERNAME | 役割ユーザー名 |
AIRFLOW_PASSWORD | 役割パスワード |
AIRFLOW_AUTH_TOKEN | 役割Bearerトークン(ユーザー名とパスワードの代わり) |
スキルは自動で呼ばれるほか、/astronomer-data:<スキル名>で直接呼べます。MCPサーバーだけを単体で使う方法はAirflow MCPサーバーの記事にあります。
authoring-dagsはDAGを6段階で書く
「S3からSnowflakeへ毎時取り込むDAGを作って」のような依頼で動くのがauthoring-dagsです。コードを書き始める前に環境を調べ、計画の承認を取ってから実装します。
authoring-dagsの流れ
- 1
Discover
既存のDAGと慣習をコードから探し、
afコマンドで接続・変数・インストール済みプロバイダーを確かめます。 - 2
Plan
DAGの構成、使うオペレーター、必要な接続と変数、追加パッケージを提案し、実装前にユーザーの承認を取ります。
- 3
Implement
DAGファイルを作り、必要なら
requirements.txtを更新します。 - 4
Validate
インポートエラー、DAGの存在、警告を
afで順に確かめます。 - 5
Test
ユーザーの同意を得てからDAGを起動し、結果とログを見ます。
- 6
Iterate
問題があればコードを直し、検証からやり直します。
Discoverで使うafコマンドは、問いごとに決まっています。
| 知りたいこと | コマンド |
|---|---|
| どの外部システムの接続があるか | コマンドaf config connections |
| どんな設定値(変数)があるか | コマンドaf config variables |
| どのオペレーターパッケージが入っているか | コマンドaf config providers |
| Airflowのバージョンと制約 | コマンドaf config version |
| 既存DAGと命名規則 | コマンドaf dags list |
| 並列実行用のプール | コマンドaf config pools |
Validateでは、af dags errorsでインポートエラーを先に見て、af dags get <dag_id>でスケジュールとタグとpause状態を確かめ、af dags warningsで非推奨の警告を拾います。af dags explore <dag_id>なら、メタデータ・タスク・依存関係・ソースコードを1回で返します。Astronomer製のAstroを使っているなら、astro dev parseでAirflowを起動せずにパース確認もできます。
dags testやインポートエラーの切り分けを手元で追う手順は、DAG検証の記事が詳しく扱っています。プラグインを使う場合、その検証をClaudeがafコマンドで自走するのが違いです。
Testの段階で必ず同意を取る点は、スキルの手順に書かれています。実行にはaf runs trigger-wait <dag_id> --timeout 300を使います。さらに、このスキルは停止時のフックを持ちます。セッションを止めると「testing-dagsスキルでDAGをテストするのを忘れずに」というメッセージが出ます。
debugging-dagsは失敗を4種類に分けて原因を探す
「昨夜のETLがなぜ失敗した?」「DAGが壊れたので直して」に応えるのがdebugging-dagsです。ログを読むだけの単純な質問は、メインのairflowスキルが直接答えます。深掘りが要るときにこちらが選ばれます。
手順は4ステップです。
- 失敗の特定: 実行IDがあれば
af runs diagnose <dag_id> <dag_run_id>、なければaf dags statsやaf healthで直近の失敗を探します。 - エラーの詳細:
af tasks logs <dag_id> <dag_run_id> <task_id>でログを読み、Airflow定型文の奥にある実際の例外を探します。 - 背景の確認: 直近のデプロイ、データ量の急増、上流の状態、過去の同種の失敗、発生時刻を調べます。
- 出力: 根本原因、影響範囲、即時の修正、再発防止、すぐ使えるコマンドの順にまとめます。
失敗は、データの問題・コードの問題・インフラの問題・依存の問題の4種類に分類されます。
コードを触っていないのに壊れたとき
このスキルの特徴は、パッケージのバージョン変動を独立した調べ方にしている点です。コードが変わっていないのに失敗するケースの典型が、依存パッケージの更新だからです。
- 直近2つのワーカーイメージで
pip freezeの差分を取ります。Pythonのバージョン差も併せて比べます。 @task.virtualenvやKubernetesPodOperatorなどは、ワーカーイメージと別に環境を作ります。このためイメージの差分では見えず、requirementsやimageの指定を直接読みます。- 上限のない指定(
pandas>=2.0.0)や:latestのイメージが疑わしい、という優先順位です。 - イメージ履歴で決着しなければ、PyPIなどのインデックスで該当パッケージのリリース日時を調べます。初めて失敗した実行より前、最後に成功した実行より後に出たリリースが原因候補です。
修正の例は、pandas>=2.0.0,<3.0.0のように上限を付ける、ロックファイルを使う、イメージをSHAで固定する、といったものです。
直したあとの再実行用に、スキルは次のコマンドを案内します。
af runs clear <dag_id> <run_id> # 実行全体をやり直す
af tasks clear <dag_id> <run_id> <task_ids> -D # 失敗したタスクだけやり直す
af runs delete <dag_id> <run_id> # 詰まった実行を削除するmigrating-airflow-2-to-3はRuffから始める
Airflow 3への移行にはmigrating-airflow-2-to-3が使えます。DAGコードの変更(インポート、オペレーター、フック、コンテキスト、APIの使い方)が対象です。
最初に、RuffのAIRルールで自動修正できる箇所を直します。
ruff check --preview --select AIR --fix --unsafe-fixes .AIR30・AIR301・AIR302はAirflow 3で削除された記述で、必ず直す対象です。AIR31・AIR311・AIR312は非推奨で、今は動いても将来消えます。Ruffで拾えないものは、スキル付属のチェックリストで手作業の検索になります。
スキルが手順の冒頭で強調する注意点は、アップグレードの経路です。まずAirflow 2.11に上げ、次に3.0.11以上(できれば3.1へ直接)へ進めます。ほかの経路だとロールバックできなくなります。
移行で特に踏みやすい変更は次のとおりです。
| 項目 | Airflow 2 | Airflow 3 |
|---|---|---|
scheduleの既定値 | Airflow 2timedelta(days=1) | Airflow 3None |
catchupの既定値 | Airflow 2True | Airflow 3False |
execution_date | Airflow 2コンテキストのキー | Airflow 3context["dag_run"].logical_date |
Dataset | Airflow 2airflow.datasets.Dataset | Airflow 3airflow.sdk.Asset |
@dag / @task | Airflow 2airflow.decorators | Airflow 3airflow.sdk |
ワーカーからメタデータDBへ直接つなぐ書き方は、Airflow 3では動きません。provide_sessionやORMのクエリを使っていると、「Direct database access via the ORM is not allowed in Airflow 3.x」というエラーになります。スキルは代わりにAirflowのPythonクライアントかREST APIの利用を案内します。
cosmos-dbt-coreはdbtプロジェクトをDAGにする
dbt CoreのプロジェクトをAirflowのDAGやTaskGroupにするのがcosmos-dbt-coreです。Astronomer Cosmosを使います。このスキルは実装の前に6点の確認を求めます。
- dbtのエンジンがCoreか(Fusionなら別スキルの
cosmos-dbt-fusion) - ウェアハウスの種類
- Airflowのバージョン
- 実行環境(Airflow環境か、仮想環境か、コンテナか)
DbtDagかDbtTaskGroupか、個別のオペレーターか- manifestが使えるか
スキルはCosmos 1.11以降とAirflow 3.xを前提に書かれています。Airflow 2.xのインポート差は付録で扱います。cosmos-dbt-fusionが対応するのはSnowflakeとDatabricksだけです。
Claudeに任せる範囲を設定で決める
スキルの手順には「起動前に同意を取る」とありますが、手順は指示であって強制ではありません。Claude Code側の権限で、読むだけのafコマンドは通し、実行を伴うものは確認を挟む構成にできます。次はその一例です(プラグインの付属物ではなく、権限設定の書き方に沿った筆者の例示です)。
{
"permissions": {
"allow": [
"Bash(af dags errors)",
"Bash(af dags list)",
"Bash(af dags get:*)",
"Bash(af dags warnings)",
"Bash(af config:*)",
"Bash(af tasks logs:*)"
],
"ask": [
"Bash(af runs trigger-wait:*)",
"Bash(af runs clear:*)",
"Bash(af tasks clear:*)"
],
"deny": ["Bash(af runs delete:*)"]
}
}DAGの命名規則やチームの決まりごとは、CLAUDE.mdに書いておくとDiscoverの段階で拾われます。例えば次のような断片です。
# Airflow規約
- DAG IDは `<チーム>_<対象>_<頻度>` にする
- 接続は `af config connections` に存在するものだけを使う
- スキーマ変更を伴うDAGは、起動前に必ず確認を取るつまずきやすい点
落とし穴
Airflowが検出されない
自動検出は、airflow.cfgかdags/のあるディレクトリでClaude Codeを起動したときに働きます。別の場所から起動すると見つかりません。
落とし穴
ウェアハウス接続のエラー
データ分析系のスキルは~/.astro/agents/warehouse.ymlと~/.astro/agents/.envを読みます。認証情報を.envに置き、warehouse.ymlから${変数名}で参照します。SnowflakeのアカウントにはアカウントIDの識別子(orgname-accountname形式など)を指定します。
afコマンドは、uv tool install astro-airflow-mcpで入れるか、uvx --from astro-airflow-mcp af --helpで直接実行します。afは匿名の利用統計を取ります。収集されるのはコマンド名だけで、引数や値は含まれません。止めるにはaf telemetry disableです。- ヒューマンインザループのスキル
airflow-hitlは、Airflow 3.1以降が対象です。 - Airflow 2.xやオープンソース版でもMCPサーバーは動きます。AstroのセットアップスキルはAstro専用ですが、DAGを書くスキルは環境を選びません。
まとめ
DAGを書く・直す・移行する作業を、同じafコマンド群の上で回せる点がこのプラグインの強みです。まずはAirflow 3対応の検証用プロジェクトで、afの読み取り系だけを許可してauthoring-dagsを試すと、挙動を安全に確かめられます。