データ品質テストの選定は「どこを守るか」で決まります。dbtモデル内部のカラムはdbt tests、ソースやパイプライン横断の契約はGreat Expectations(GE)またはSoda、というのが2026年時点の現実解です。本記事では、これら3ツールの守備範囲と特性を整理し、コード例とともに選定判断をお伝えします。
データ品質テストツールの必要性
データ品質の問題は、ダッシュボードに数字が並んで初めて発覚するケースが多いものです。「昨日の売上がゼロですよ」と役員から指摘されてから調査を始めるのでは遅く、業務とデータチームの信頼関係が音を立てて崩れていきます。こうした事故を未然に防ぐためのメカニズムがデータ品質テストツールです。
類似の仕組みとしてはdbt testsが広く普及していますが、dbt testsは「モデルとして取り込んだ後のカラム品質」に特化しており、ソースデータが届いた時点の検証や、複数のパイプラインを跨いだ一貫性検証にはやや力不足です。Great ExpectationsとSodaは、この守備範囲のギャップを埋める存在として位置付けられます。詳細はデータオブザーバビリティ入門記事(A-15)もあわせてご覧ください。
Great Expectationsの特徴
Great Expectations(以下GE)はPythonベースのデータ品質フレームワークで、2018年ごろから急速にコミュニティを拡大してきました。中核概念は「Expectation(期待値)」と呼ばれる宣言的な品質ルールで、例えば「このカラムは非NULLで、値は0〜100の範囲に収まる」といった条件をPythonまたはJSONで定義します。
特筆すべきは「Data Docs」と呼ばれる自動ドキュメント生成機能で、実行結果をHTMLレポートとして出力し、誰が・いつ・どの期待値を満たしたかをチームで共有できます。高い柔軟性の裏返しとして設定ファイルの階層が深く、初学者にはとっつきにくい一面があるのも事実です。
import great_expectations as gx
context = gx.get_context()
batch = context.sources.pandas_default.read_csv("orders.csv")
# カラムの非NULL・値範囲・一意性を宣言
batch.expect_column_values_to_not_be_null("order_id")
batch.expect_column_values_to_be_unique("order_id")
batch.expect_column_values_to_be_between("amount", min_value=0, max_value=1000000)
result = batch.validate()
print(result.success)
Soda(soda-core)の特徴
SodaはYAMLベースで品質チェックを定義する後発ツールで、SodaCLという専用DSLにより読みやすい記述を実現しています。「最小5,000件以上あること」「NULL率は1%未満であること」といったチェックを自然言語に近い形で書けるため、データエンジニア以外のメンバーもレビューに参加しやすい設計です。
OSSのsoda-coreとSaaSのSoda Cloudが提供されており、後者ではダッシュボード、インシデント管理、データコントラクト機能が利用できます。GEと比較して学習コストは低く、最初の一歩を踏み出しやすい点が強みです。
checks for orders:
- row_count > 1000
- missing_count(order_id) = 0
- duplicate_count(order_id) = 0
- invalid_percent(amount) < 1%:
valid min: 0
valid max: 1000000
- freshness(created_at) < 1d
dbt testsとの比較
dbt testsはdbtモデルに紐づく品質テストで、schema.ymlに宣言するだけで実行できる手軽さが魅力です。unique、not_null、accepted_values、relationshipsといった組み込みテストに加えて、dbt-utilsなどのパッケージで補強できます。dbtプロジェクト内のモデルに対する最初の防衛線としては十分に機能します。
ただし、ソースデータが到着する前段のファイルや、dbtで管理していない外部システムとの整合性検証には向きません。ここでGEやSodaを併用することで、パイプライン全体の品質ゲートを構築できます。下表に3ツールの守備範囲を整理しました。
version: 2
models:
- name: stg_orders
columns:
- name: order_id
tests:
- unique
- not_null
| 観点 | dbt tests | Great Expectations | Soda |
|---|---|---|---|
| 主な守備範囲 | dbtモデルのカラム | ソース〜変換全般 | ソース〜変換全般 |
| 定義形式 | schema.yml | Python / JSON | YAML(SodaCL) |
| 学習コスト | 低 | 中〜高 | 低〜中 |
| ドキュメント生成 | dbt docs | Data Docs(HTML) | Soda Cloud UI |
| 向く用途 | モデル内品質 | 複雑な検証ロジック | 軽量な契約検証 |
徹底比較
ここからはGEとSodaの2ツールに絞って、運用上のポイントを掘り下げます。言語仕様、DWH対応、CI/CDとの相性、ドキュメント生成、商用版の有無など、選定で効いてくる項目を一覧で整理しました。
| 比較項目 | Great Expectations | Soda(soda-core) |
|---|---|---|
| 主要言語 | Python | YAML(SodaCL) + Python実行 |
| 定義方式 | Expectation Suite | SodaCLチェック |
| 対応DWH | Snowflake / BigQuery / Redshift / Databricks / Postgres 他 | Snowflake / BigQuery / Redshift / Databricks / Postgres 他 |
| CI/CD統合 | CLI + Airflow / Prefect / GitHub Actions | CLI + Airflow / dbt / GitHub Actions |
| ドキュメント生成 | Data Docs(静的HTML) | Soda Cloud(SaaS) |
| 学習コスト | やや高い(概念階層が深い) | 低い(YAMLで書ける) |
| 商用版 | GX Cloud | Soda Cloud |
| コミュニティ | GitHub Star 9000+ 規模で歴史あり | 比較的新しいが成長中 |
| 向くチーム規模 | 中〜大規模、検証ロジック多め | 小〜中規模、導入スピード重視 |
GEはPythonの柔軟性を活かしてカスタム検証ロジックを組み込めるため、金融・医療のように業界固有のバリデーションが多い領域で重宝されます。一方のSodaは、YAMLで完結する軽量さが武器となり、立ち上げ期のチームや非エンジニアも触れる環境での採用が進んでいます。
選定判断
以下の推奨表は、よくある状況ごとに適した組み合わせを示したものです。絶対解ではなく出発点として活用してください。
| 状況 | 推奨組み合わせ | 理由 |
|---|---|---|
| dbt中心のスタートアップ | dbt tests + Soda | 軽量に契約検証を追加できる |
| 規制業界で複雑な検証が必要 | dbt tests + Great Expectations | Python実装で柔軟に対応可能 |
| 非エンジニアもレビューに参加 | Soda | YAMLが読みやすい |
| 既にAirflow中心の運用 | Great Expectations | OperatorでDAG統合が成熟 |
| dbt未導入のパイプライン | Great ExpectationsまたはSoda単独 | スタンドアロンでも実用十分 |
まとめ
データ品質テストは「事故ってから対応」ではなく「事故らないための仕組み」へと重心が移りつつあります。dbt testsで内部を守り、GEまたはSodaでソースや境界を守る――この二段構えが、壊れにくいデータ基盤の基本戦略です。チームの規模と守りたい領域から逆算して、ツールを選定してください。
よくある質問
dbt testsだけでは不十分ですか?
dbt testsはモデル内のカラム品質チェックには優秀ですが、ソースデータの品質検証やパイプライン横断のテストにはGreat ExpectationsやSodaの併用が効果的です。dbtで扱わない外部ファイルやAPIからの取り込みデータの検証もカバーできます。
Great ExpectationsとSodaのどちらが簡単ですか?
SodaはYAML定義でシンプルに始められるため導入のハードルが低いです。Great ExpectationsはPythonベースで柔軟性が高いですが、概念階層が深く学習コストはやや高めです。導入スピードを重視するならSodaが先手となります。
データ品質テストをCI/CDに組み込めますか?
はい。いずれのツールもCLIベースで実行でき、GitHub ActionsやAirflowのタスクに組み込んでCI/CDパイプラインの一部として自動実行できます。PRマージ前のチェックや日次バッチ後の検証で活用されています。