データカタログ3回失敗して分かった、ようやく「使われる」ようになった話

Collibra・Alation・OpenMetadataを本番導入してきた経験から、ツール選定より運用設計が9割だと気づいた。3回失敗した現場エンジニアが2026年時点の現実を正直に書きます。

データカタログ、3回目の導入でやっと「使われるもの」になった

うちのチームがデータカタログを最初に導入しようとしたのは2023年の話で、その時はCollibraを半導入のまま放置して終わった。2024年にAlationで再挑戦してそれも半年で形骸化。2026年になってOpenMetadataをベースにリアーキテクチャしたら、ようやく「ちゃんと使われるカタログ」になってきた。

3回失敗して分かったことは、ツールの選定ミスより運用設計の失敗のほうが圧倒的に多いという現実だった。データ品質管理のアプローチについてはデータ品質管理2026年版で別途まとめているので合わせて読んでほしいけど、今回はカタログ導入固有の話を正直に書いていく。


2026年のデータカタログ主要ツール比較

正直まだ全部を完全に検証できてるわけじゃないけど、実際に触った範囲でまとめると以下の通り。Collibraは「機能的には最強」という評判を体感できる一方で、とにかく重い。カスタマイズの自由度は高いんだけど、その分セットアップに3ヶ月かかるし、専任担当者が実質必要になる。

ツール形態AI統合Lineage価格感日本語対応向いてる規模
CollibraSaaS/On-prem◎ (AI Governance)高い(要見積)大企業
AlationSaaS○ (Alation AI)中〜高中〜大企業
OpenMetadataOSS/SaaS○ (AI Assistant)低〜中スタートアップ〜中企業
AtlanSaaS◎ (AI全面統合)中〜高×中〜大企業
DataHub (LinkedIn OSS)OSS低(運用コストあり)×技術力高いチーム
Select StarSaaS低〜中×dbt/BIヘビーユーザー

データカタログ完全ガイド2026でも触れているが、2026年時点でのCollibraはAI Governanceモジュールが本格化していて、LLMによる自動メタデータ生成・品質スコアリングが実用レベルになってきた。見積が出た時の金額には思考停止したけど、機能の完成度は正直すごい。


うちが最終的にOpenMetadata + 自前パイプラインを選んだ理由

最終的な構成はこうなっている。

flowchart TB
    subgraph Sources["データソース"]
        BQ[BigQuery]
        RDS[Aurora PostgreSQL]
        S3[S3 / Iceberg]
        Kafka[Kafka Topics]
    end

    subgraph Ingestion["メタデータ収集層"]
        Connector[OpenMetadata Connectors]
        dbt[dbt Metadata]
        Airflow[Airflow DAG Lineage]
    end

    subgraph Catalog["OpenMetadata Core"]
        API[REST API / GraphQL]
        Search[Elasticsearch 検索]
        Lineage[Lineage Graph]
        Classify[AI分類エンジン]
    end

    subgraph Consumers["利用者"]
        DE[データエンジニア]
        DS[データサイエンティスト]
        Analyst[アナリスト]
        Gov[ガバナンス担当]
    end

    Sources --> Connector
    dbt --> Connector
    Airflow --> Connector
    Connector --> API
    API --> Search
    API --> Lineage
    API --> Classify
    Search --> DE
    Search --> DS
    Search --> Analyst
    Lineage --> Gov

OpenMetadataを選んだ理由は正直シンプルで、Lineage機能が他より圧倒的に充実していたからだ。BigQuery・Airflow・dbtのLineageをシームレスにつなげられるのは、うちのパイプライン構成と相性が良かった。dbt Core 2.0移行後1年の運用でもやったけど、dbtのモデル間の依存関係をカタログ側で可視化できるようになったのはかなりでかかった。

もう一つの理由はコスト。Collibraの見積が出た時に、チームの人件費より高いレベルの金額が来て思考停止した。OSSベースならインフラコストだけで済む。ただし、運用コストは別の話で後述する。

実際の接続設定

dbtとの連携はこんな感じで設定する。

# openmetadata.yaml(dbt Connector設定)
source:
  type: dbt
  serviceName: dbt_production
  serviceConnection:
    config:
      type: Dbt
      dbtConfigSource:
        dbtConfigType: cloud
        dbtCloudUrl: https://cloud.getdbt.com
        dbtCloudAuthToken: ${DBT_CLOUD_TOKEN}
        dbtCloudAccountId: "123456"
        dbtCloudJobId: "789012"
  sourceConfig:
    config:
      type: DBTMetadata
      dbtUpdateDescriptions: true
      includeTags: true
      dbtClassificationName: dbt_tags
workflowConfig:
  loggerLevel: INFO
  openMetadataServerConfig:
    hostPort: https://your-openmetadata-instance.com/api
    authProvider: openmetadata
    securityConfig:
      jwtToken: ${OM_JWT_TOKEN}

BigQueryとの接続はこう。

# metadata_ingestion.py
from metadata.workflow.metadata import MetadataWorkflow
import json

BIGQUERY_CONFIG = {
    "source": {
        "type": "bigquery",
        "serviceName": "bigquery_production",
        "serviceConnection": {
            "config": {
                "type": "BigQuery",
                "credentials": {
                    "gcpConfig": {
                        "type": "service_account",
                        "projectId": "your-project-id",
                        "privateKeyId": "${BQ_PRIVATE_KEY_ID}",
                        "privateKey": "${BQ_PRIVATE_KEY}",
                        "clientEmail": "${BQ_CLIENT_EMAIL}",
                    }
                },
                "taxonomyProjectID": ["your-project-id"],
                "usageLocation": "us",
            }
        },
        "sourceConfig": {
            "config": {
                "type": "DatabaseMetadata",
                "markDeletedTables": True,
                "includeTables": True,
                "includeViews": True,
                "includeTags": True,
                "tableFilterPattern": {
                    "excludes": ["_bqt_.*", ".*_temp_.*"]  # 一時テーブルを除外
                },
            }
        },
    },
    "sink": {"type": "metadata-rest", "config": {}},
    "workflowConfig": {
        "openMetadataServerConfig": {
            "hostPort": "https://your-openmetadata-instance.com/api",
            "authProvider": "openmetadata",
            "securityConfig": {"jwtToken": "${OM_JWT_TOKEN}"},
        }
    },
}

def run_ingestion():
    workflow = MetadataWorkflow.create(BIGQUERY_CONFIG)
    workflow.execute()
    workflow.raise_from_status()
    workflow.print_status()
    workflow.stop()

if __name__ == "__main__":
    run_ingestion()

これをAirflowのDAGから呼び出して、毎日夜中に回している。最初はJobとして設定してたんだけど、Airflowとの統合のほうが依存関係の管理がしやすかった。


導入して3ヶ月、本当に困ったこと3つ

1. メタデータの「最初の1000テーブル」問題

インジェストしたはいいけど、説明文が空のテーブルが1000個並んでる状態になった。誰も使わない。これが最初の地獄だった。

2026年になってAI自動生成が実用的になったので、OpenMetadataのAI Assistantでカラム名・テーブル名からの自動説明生成を有効化した。精度は正直60〜70%ぐらいで、特にコードネームがついてるテーブルは全然ダメだった。ただ、「完全な手動入力」より「AIが書いたドラフトを人間がレビューして修正」のほうが圧倒的に消化できる量が増えた。

2. Lineageが嘘をつく

dbt・Airflow・BigQueryのLineageを繋いだはいいんだけど、手動で書いたSQLや、Pythonスクリプトで直接BigQueryにインサートしてるパイプラインが抜け漏れる。

これは正直解決しきれていなくて、今は「カタログ外のパイプラインはカスタムメタデータとして手動登録」というルールにした。地味に運用コストがかかってる部分で、ここは好みが分かれるかもしれない。完全自動じゃないと維持できないチームは、Collibraのほうが自動化のカバレッジが高いので向いてると思う。

3. 誰がオーナーか問題

テーブルに「オーナー」を設定しようとしたら、半分ぐらいのテーブルは誰が担当か不明確だった。このガバナンス問題はツールで解決できないやつで、チームの会議で「新しいテーブルを作ったら必ずカタログにオーナーを登録する」というルールを決めて、PRレビューのチェックリストに追加した。

6ヶ月かけてようやく81%まで来た。100%は無理だと思ってるけど、80%超えたあたりから「カタログ引けば大体わかる」という状態になったのは確か。

xychart-beta
    title "導入から6ヶ月のメタデータカバレッジ推移"
    x-axis ["導入時", "1ヶ月", "2ヶ月", "3ヶ月", "4ヶ月", "5ヶ月", "6ヶ月"]
    y-axis "カバレッジ (%)" 0 --> 100
    line [12, 28, 41, 55, 63, 72, 81]
    bar [12, 28, 41, 55, 63, 72, 81]

AI統合で2026年に変わったこと

個人的に一番感動したのが自然言語でのデータ探索だ。「先週の売上に関連するテーブルを教えて」って聞いたら、関連するテーブルのリストと、それぞれの使われ方の概要が出てくる。最初は懐疑的だったけど、意外と精度が高くて、新しいメンバーがオンボーディングする時の時間が体感で半分ぐらいになった。これは地味にでかい。

OpenMetadataのAI Assistantは2026年2月のリリース(v1.5系)から安定してきたんだけど、コンテキスト理解がまだ浅い部分があって、業界固有のビジネス用語が絡む質問は的外れな回答が返ってくることもある。そのへんはドメイン辞書を手動でメンテするしかないのが現状で、「全部AIに任せられる」とはまだ言えない。

CollibraのAI Governanceは、データの機密性スコアリングと、GDPR・個人情報保護法対応の自動タグ付けが秀逸だった。うちはSOC2対応をやっていた時期があって(SOC2 Type II取得後の地獄に書いた)、あのフェーズでCollibraがあったら相当楽だったと思う。

LLMによる自動ドキュメント生成を試した結果

# openmetadata_ai_enrichment.py
import openai
from metadata.generated.schema.entity.data.table import Table
from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.generated.schema.security.client.openMetadataJWTClientConfig import (
    OpenMetadataJWTClientConfig,
)
from metadata.generated.schema.entity.services.connections.metadata.openMetadataConnection import (
    OpenMetadataConnection,
)

client = openai.OpenAI(api_key="${OPENAI_API_KEY}")

def generate_table_description(table_name: str, columns: list[dict]) -> str:
    column_info = "\n".join(
        [f"- {col['name']} ({col['dataType']}): {col.get('description', '不明')}" 
         for col in columns[:20]]  # 最初の20カラムのみ
    )
    
    prompt = f"""以下はデータウェアハウスのテーブル情報です。
ビジネスアナリストが理解できるような簡潔な説明文を日本語で150字以内で生成してください。

テーブル名: {table_name}
カラム情報:
{column_info}

説明文のみを出力してください。"""
    
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=200,
        temperature=0.3,
    )
    return response.choices[0].message.content.strip()

def enrich_empty_tables(om_client: OpenMetadata, limit: int = 100):
    """説明が空のテーブルにAI生成の説明を付与する"""
    tables = om_client.list_entities(
        entity=Table,
        limit=limit,
        fields=["columns", "description"]
    )
    
    enriched_count = 0
    for table in tables.entities:
        if table.description is None or str(table.description.root) == "":
            columns = [
                {"name": col.name.root, "dataType": str(col.dataType.value),
                 "description": str(col.description.root) if col.description else ""}
                for col in (table.columns or [])
            ]
            
            if not columns:
                continue
                
            description = generate_table_description(
                table.name.root, columns
            )
            
            # 自動生成フラグをタグとして付与
            table.description = description  
            om_client.patch_entity(
                entity_type=Table,
                entity_id=table.id,
                original=table,
                updated=table
            )
            enriched_count += 1
            print(f"✓ {table.name.root}: {description[:50]}...")
    
    print(f"\n{enriched_count}件のテーブルを更新しました")

これを週1回Airflowで回している。AIが生成した説明には ai_generated タグを付けて、人間がレビューした後は verified タグに変える運用にした。地味に便利で、「ドラフトがある状態」と「何もない状態」では、人間のレビュー速度が全然違う。


運用して分かった、データカタログが「死ぬ」パターン

3回失敗してるので、死に方のパターンは熟知している。

パターン1: データエンジニアだけが使うカタログ
アナリストやビジネス側の人が使わないと、結局「エンジニアがメンテするだけで誰も見ない」状態になる。うちは導入時に「BIツールの新しいダッシュボードを作るときは必ずカタログでデータソースを確認する」というプロセスを義務付けた。MetabaseとSupersetの比較でも書いたけど、BIツールとカタログの連携を強制的に作るのが効く。

パターン2: スキーマ変更に追従できない
テーブルのスキーマが変わってもカタログが更新されず、情報が古いままになる。これはインジェストの自動化で対応できるけど、完全に自動化できないのがLineageとオーナー情報だ。スキーマ変更のPRに「カタログ更新確認」のチェックを入れるのが現実的な対策。

パターン3: 「検索しても出てこない」体験
最初の1〜2ヶ月が一番危険で、メタデータが薄い状態だと検索しても関係ないものが出てきて「使えないツール」という印象になる。最初の3ヶ月は重要テーブル100個に絞って丁寧にメタデータを育てることを優先した。

3プロジェクト分の経験をベースに形骸化の原因を振り返ると、こんな内訳になった。ツール選定が原因で失敗したのはたった10%で、残り90%はプロセスと品質の問題だった。これは声を大にして言いたい。

pie title データカタログが形骸化した原因(N=3プロジェクト経験ベース)
    "メタデータ品質の低さ" : 35
    "使う動機付けの欠如" : 30
    "運用プロセスの未整備" : 25
    "ツール選定ミス" : 10

まとめ

3回の失敗から学んだことを正直に整理すると、結局のところ「いいツールを選ぶ」より「使われ続ける設計をする」ほうがはるかに難しい。以下が個人的に外してはいけないと思うポイントだ。

  • ツール選定の前に「誰が何のために使うか」を決める:Collibraは大企業のガバナンスチームが主体の場合に強い。エンジニア主体ならOpenMetadata・DataHubがコスパ高い。
  • 最初の3ヶ月は「重要テーブル100個」だけに集中する:全テーブルを同時にやろうとすると全部中途半端になる。
  • AI自動生成はドラフト作成ツールとして使う:2026年時点では精度60〜70%。レビューフローとセットで設計する。
  • カタログを「使わざるを得ない」プロセスに埋め込む:BIダッシュボード作成、PR承認、オンボーディングなどの既存フローに強制的に組み込む。
  • Lineageは完全自動化できないと割り切る:手動登録のルールと、それをモニタリングする仕組みの両方が必要。

まだデータカタログを入れていないチームは、まずDataHubかOpenMetadataをローカル環境で動かして、自分たちのBigQuery・Redshiftと繋いでみるのが早い。DockerComposeで5分で立ち上がるので、「まず触ってみる」コストが低いのがOSSの強みだ。皆さんのチームはどんな構成で運用してますか?Xで教えてもらえると嬉しい。

U

Untanbaby

ソフトウェアエンジニア|AWS / クラウドアーキテクチャ / DevOps

10年以上のIT実務経験をもとに、現場で使える技術情報を発信しています。 記事の誤りや改善点があればお問い合わせからお気軽にご連絡ください。

関連記事