データコントラクト

英語名 Data Contract
読み方 データ コントラクト
難易度
所要時間 1〜2週間(1契約あたり)
提唱者 マイクロサービスのAPI契約の考え方をデータ領域に応用。データメッシュの普及とともに注目が拡大
目次

ひとことで言うと
#

データの提供者と利用者の間で「何を・どんな形式で・どの品質で・いつまでに届けるか」を明文化した合意書。APIの仕様書のように、データにも契約を設けることで、予告なしのスキーマ変更や品質劣化を防ぐ。

押さえておきたい用語
#

押さえておきたい用語
スキーマ(Schema)
データの構造定義を指す。カラム名・データ型・Nullable可否などを規定したもので、コントラクトの中核をなす。
SLA(Service Level Agreement)
データの提供水準に関する合意のこと。更新頻度・遅延許容時間・可用性などを数値で定める。
データプロデューサー(Data Producer)
データを生成・提供する側のチームやシステムである。コントラクトに基づいてスキーマと品質を保証する責任を持つ。
データコンシューマー(Data Consumer)
データを受け取り・利用する側のチームやシステム。コントラクトに定義された仕様を前提にパイプラインやレポートを構築する。
セマンティクス(Semantics)
カラムの意味や業務定義を記述したもの。「revenue」が税込か税抜か、返品控除後かなどを明確にする。

データコントラクトの全体像
#

データコントラクト:提供者と利用者間の合意構造
データプロデューサーデータを生成・提供スキーマと品質を保証変更時は事前通知データコンシューマーデータを受け取り・利用契約仕様を前提に構築要件変更時は協議データコントラクトスキーマ定義カラム名・型・Nullableセマンティクス業務定義・単位・計算式品質基準欠損率 ≤ 1%、重複ゼロSLA毎朝6時までに更新、遅延≤30分変更ルール自動検証(CI/CD)契約違反を検知 → アラートスキーマ・品質・SLAを明文化し、契約違反を自動で検知する
データコントラクト策定の進め方フロー
1
対象データの選定
チーム間連携の多いデータから
2
契約項目の合意
スキーマ・品質・SLAを定義
3
自動検証の実装
CI/CDで契約違反を検知
運用と改善
違反パターンを分析し契約を改善

こんな悩みに効く
#

  • 上流チームのスキーマ変更で、下流のダッシュボードが突然壊れる
  • データの品質が劣化しているのに、誰が責任を持つのか曖昧
  • チーム間で「このカラムの意味は何?」という確認が繰り返し発生する

基本の使い方
#

ステップ1: コントラクト対象のデータを選定する

すべてのデータに契約を作るのは現実的ではない。まずチーム間で共有され、問題が頻発しているデータから始める。

選定基準:

  • 複数チームが利用しているデータセット
  • 過去にスキーマ変更で障害が発生したテーブル
  • 経営レポートやKPIに直結する重要データ

最初は3〜5個のデータセットに絞るのが成功のコツ。

ステップ2: 契約項目を定義し合意する

プロデューサーとコンシューマーが一緒に以下を定義する。

スキーマ定義:

  • カラム名、データ型、Nullable可否
  • 主キー、外部キーの制約

セマンティクス:

  • 各カラムの業務上の意味(例: revenue = 税抜・返品控除後・円建て)
  • 計算式がある場合はその定義

品質基準:

  • 欠損率の上限(例: 1%以下
  • 重複レコードの許容(例: ゼロ
  • 値の範囲(例: age0〜150

SLA:

  • 更新頻度と配信タイミング(例: 毎朝6:00 JSTまでに更新完了)
  • 遅延の許容時間(例: 30分以内

変更ルール:

  • 破壊的変更(カラム削除・型変更)は2週間前に通知
  • 非破壊的変更(カラム追加)は事後通知で可
ステップ3: 自動検証の仕組みを実装する

契約を人手でチェックし続けるのは現実的ではない。CI/CDパイプラインに検証を組み込む

検証の実装方法:

  • スキーマ検証: Great Expectations、Soda、dbt testsでカラムの型・制約をチェック
  • 品質チェック: 欠損率・重複・値の範囲を自動計測
  • SLA監視: パイプラインの完了時刻を監視し、遅延時にアラート

契約違反が検出されたらSlack通知 + チケット自動起票する仕組みが理想的。

ステップ4: 違反パターンを分析し契約を改善する

運用開始後、契約違反の傾向を月次で振り返る

  • 頻繁に違反する項目 → 品質基準が現実離れしていないか見直す
  • 一度も違反しない項目 → 基準が甘すぎないか確認
  • 新たな品質問題 → 契約に項目を追加

コントラクトは生きたドキュメントであり、運用しながら育てていくもの。

具体例
#

例1:マーケティングチームのセグメント配信エラーが週5件→ゼロになる

状況: 従業員300名のD2C企業。プロダクトチームが管理するユーザーテーブルを、マーケティングチームがセグメント配信に利用している。

起きていた問題:

  • プロダクトチームがuser_typeカラムの値を予告なく変更(“free”→“free_plan”)→ セグメント条件が不一致に
  • emailカラムの欠損率が突然**8%**に上昇 → 配信対象から漏れるユーザーが発生
  • 週平均5件のセグメント配信エラーが発生

導入したコントラクト:

  • user_typeの許容値: free_plan, pro, enterprise の3値に限定
  • emailの欠損率: 0.5%以下
  • 破壊的変更: 1週間前にSlack通知 + コンシューマーの承認

導入後3ヶ月で配信エラーは週5件からゼロに。マーケティングチームが「とりあえず動くか確認する」作業に費やしていた週4時間がそのまま浮いた。

例2:金融データ基盤で規制レポートの品質を契約で担保する

状況: 従業員2,500名の証券会社。取引データを基盤チームが集約し、リスク管理部門が規制レポートを作成している。四半期に1回の頻度で、レポート提出直前にデータ不備が発覚し、徹夜で修正するのが常態化していた。

コントラクトで定義した内容:

項目基準
取引IDの一意性重複ゼロ
約定日時の欠損0件
通貨コードISO 4217準拠
更新SLA翌営業日7:00までに反映
破壊的変更4週間前通知 + 承認

Great Expectationsで日次検証を実装し、違反時はPagerDutyでオンコール担当に即時通知。提出直前の「データ不備発覚 → 徹夜修正」が4四半期連続でゼロに。規制領域では「問題を起こさないこと」自体が最大の成果であり、コントラクトはその保険として機能した。

例3:地方自治体がオープンデータの品質をコントラクトで標準化する

状況: 人口25万人の地方自治体。12部署がそれぞれ独自フォーマットでオープンデータを公開していたが、利用者(市民・企業・研究者)から「フォーマットがバラバラで使えない」という苦情が年間40件以上寄せられていた。

各部署と「オープンデータコントラクト」を締結:

  • ファイル形式: CSV(UTF-8) に統一
  • カラム名: 総務省推奨語彙に準拠
  • 更新頻度: 月次データは翌月10日までに公開
  • 欠損値の表記: 空文字ではなくNAで統一

公開前の自動バリデーションスクリプトを導入し、基準を満たさないファイルは公開不可とした。苦情件数は年間40件から3件に減少。「公開する」だけでなく「使える形で届ける」への転換が活用を呼び込んだ。

やりがちな失敗パターン
#

  1. 契約を厳しくしすぎて運用が回らない — 欠損率0%、遅延0秒といった完璧主義の基準は違反が頻発して形骸化する。現状の実績値を測定し、そこから10〜20%改善した値を最初の基準にする
  2. コントラクトを作っても自動検証しない — 合意書だけ作って検証しなければ、ただの紙になる。契約と同時に自動テストを実装するのが鉄則
  3. プロデューサー側だけで勝手に決める — コンシューマーの要件を聞かずに一方的に定義すると、実際の利用に合わない契約になる。両者が同席して合意する場を設ける

まとめ
#

データコントラクトは、データの提供者と利用者の間でスキーマ・品質基準・SLAを明文化する合意の仕組み。予告なしのスキーマ変更や品質劣化を防ぎ、チーム間のデータ連携を安定させる。まずは障害が頻発しているデータセットに対して契約を結び、自動検証を組み込むところから始めるのが効果的。