TL;DR
- DataOps は専任データチーム専有ではなく、product team が自分たちでデータ品質を担保する文化
- 3本柱:データ品質テスト / データ契約(data contract) / データ観測(data observability)
- データ契約は「スキーマ+SLA+owner」を明示し、producer と consumer の責任境界を固定する
- 品質テストは dbt test / Great Expectations を CI に組み込み、データのリグレッションを検知
- 観測は freshness / volume / schema drift / distribution の4軸でアラート
この記事の目的と成功基準
- 目的: DataOps を product team が自走で回すための3本柱を実装粒度で整理する
- 想定読者: product team の backend / data エンジニア、データ品質に責任を持つ EM
- 成功基準: 「DataOps product team」「data contract」関連クエリでの流入、SRE KPI ツールキット への回遊
なぜ product team が DataOps を持つのか
従来は専任データチームがすべてのデータ品質を担保していた。だが2026年のデータ駆動組織では:
- データ生成元(product team)と利用元(分析・ML)が分離していると品質問題の検知が遅れる
- 「誰のデータか」の責任が曖昧で、壊れたデータが下流に流れる
- データチームがボトルネックになり、product の変更速度が落ちる
DataOps Manifesto の原則「データ品質を継続的に・自動的に担保する」を product team レベルに降ろすのが2026年の方向。
3本柱
1. データ品質テスト
コードに unit test があるように、データにも test を書く。
- dbt test: スキーマテスト(not null / unique / accepted values / relationships)
- Great Expectations: より高度な期待値(分布・統計的性質)
- CI 統合: データパイプライン変更の PR で品質テストを自動実行
# dbt schema.yml 例
models:
- name: orders
columns:
- name: order_id
tests: [unique, not_null]
- name: status
tests:
- accepted_values:
values: ['pending', 'paid', 'shipped', 'cancelled']
品質テストが無いと「データが壊れた」を本番障害で初めて気づく。
2. データ契約(Data Contract)
producer と consumer の間の API 契約のデータ版。datacontract.com の標準が普及しつつある。
契約に含むもの:
- スキーマ: フィールド名・型・制約
- SLA: freshness(更新頻度)・availability
- owner: 誰が責任を持つか
- semantics: フィールドの意味・単位
# data contract 例
dataContractSpecification: 1.1.0
id: orders-events
info:
owner: checkout-team
contact: [email protected]
servers:
production:
type: kafka
topic: orders.events
models:
order:
fields:
order_id: { type: string, required: true }
amount: { type: decimal, unit: JPY }
quality:
- freshness: < 5 minutes
契約があると、producer がスキーマを壊す変更をした時に CI で検知できる。
3. データ観測(Data Observability)
データの健全性を継続監視する。SRE の observability のデータ版。
4軸:
| 軸 | 検出する問題 |
|---|---|
| Freshness | データ更新の遅延・停止 |
| Volume | 行数の異常(急減・急増) |
| Schema drift | 想定外のスキーマ変更 |
| Distribution | 値分布の異常(null 率急増等) |
ツール:Monte Carlo / Soda / 自前(dbt + アラート)。
SRE KPI の SLI/SLO の考え方をデータに適用すると、「freshness SLO 99% 達成」のような運用ができる。
product team での回し方
役割分担
- product team: 自チームが producer のデータの契約・品質テスト・owner
- データ Platform チーム: 観測基盤・契約レジストリ・共通ツール提供
- 分析・ML チーム: consumer として契約を参照、SLA 違反時にエスカレーション
ワークフロー
product team がスキーマ変更
↓
data contract の CI チェック(破壊的変更を検知)
↓ 破壊的なら
consumer への影響通知 → 移行期間設定
↓ 非破壊なら
品質テスト実行 → merge
↓
観測基盤が freshness/volume を継続監視
導入ロードマップ
| 月 | 目標 |
|---|---|
| 0-2 | dbt test を主要テーブルに追加、CI 統合 |
| 2-4 | data contract を最重要 3-5 データセットに定義 |
| 4-6 | 観測基盤(freshness / volume アラート) |
| 6-9 | schema drift / distribution 監視追加 |
| 9-12 | 全 product team に展開、SLA 文化定着 |
アンチパターン
- データチームに丸投げ: producer が責任を持たないと品質が上がらない
- 契約を一度書いて放置: スキーマ変更時に更新しないと形骸化
- 観測アラートを全部 critical に: ノイズ化、severity 分離必須
- 品質テストを後付け: パイプライン構築と同時に書く
- distribution 監視を最初から: freshness/volume から始め、慣れてから distribution
FAQ
Q. dbt を使っていない場合でも DataOps は可能ですか? A. 可能です。品質テストは Great Expectations 単体でも書けますし、data contract はツール非依存です。dbt があると CI 統合が楽になるだけです。
Q. data contract のowner が退職・異動したら? A. owner は個人でなくチーム(checkout-team 等)に紐付けます。契約レジストリで owner チームを必須フィールドにし、定期棚卸しします。
Q. 小規模チームでも3本柱すべて必要ですか? A. まず品質テスト(dbt test)から。データ consumer が複数チームに分かれてきたら data contract、本番依存が高まったら観測、と段階導入で十分です。
まとめ
DataOps は product team が自走でデータ品質を担保する文化。品質テスト / データ契約 / データ観測の3本柱を、SRE の observability や A/B 実験基盤と同じ「測って・契約して・監視する」発想で実装する。データチーム丸投げから producer 責任への移行が2026年の方向。段階導入で1年かけて土台を作る。
