Metabase→Supersetに乗り替えて気づいた本当の差|本番運用6ヶ月の実体験

セルフサービスBI導入で迷走した僕たちが、MetabaseからSupersetに切り替えた理由。キャッシング、SQL柔軟性、AIアシスト...実運用で感じた本当の違いを率直に話します。

Metabaseから始まったBIツール迷走

昨年、うちのチームがセルフサービスBIに本気で取り組む決定をしたんですよね。それまではダッシュボード作成がデータエンジニアの仕事で、分析リクエストが溜まりまくってた。「エンジニアじゃない人も自分でダッシュボード作れる世界」が欲しかったんです。

最初はMetabaseを選びました。理由は単純で——OSS、軽い、セットアップが簡単。Docker1個で起動できるのが魅力的だった。Postgresをデータソースに繋いで、3日で本番環境を構築。当時は「これで十分」と思ってました。

でも、3ヶ月経つと違和感が出てきた。ダッシュボードのクエリが重くなると、Metabase全体が遅くなるんですよ。キャッシング設定がいまいちで、同じクエリを連続実行すると毎回フルスキャン。あと、複雑な変換ロジックを「UI上で実装する」のが限界を感じ始めた。カスタムカラムの書き方も直感的じゃなくて、チームメンバーから「これ難しい」という声がたくさん上がった。

Superset導入を決めた理由と最初のギャップ

半年前、思い切ってSupersetに乗り替えることにしました。理由は大きく3つですね。

1. SQL記述がメイン

MetabaseはUI上でクエリを組むことが想定されてるんですが、複雑な集計になるとそれが限界になる。Supersetはむしろ「SQLを書いてください」というスタンス。うちのチームにはエンジニアもアナリストもいるから、SQLで記述できる方が柔軟性が高い。正直、UI操作で無理に集計を作るより、SQLで直感的に書く方が圧倒的に早い。

2. キャッシング戦略が豊富

Supersetのキャッシュ層がメチャ充実してる。結果キャッシュ、メタデータキャッシュ、Redis統合——設定の自由度が半端ない。Metabaseだと「設定ページで有効にする」くらいなんですが、Supersetは細かく制御できる。本番環境で月20万件のクエリを捌く必要があったから、ここは決定的だった。

3. 2026年時点でのAIアシスト機能

Supersetが最近力を入れてる「生成SQL」機能が地味に便利。自然言語で「先月の売上推移」って説明すると、SQLを生成してくれるんです。Metabaseにも類似機能がありますが、Supersetの方がクエリの正確さが高い。これはLLM連携の実装が丁寧だからだと思う。

でも、導入直後は正直「Metabaseの方が簡単だった」と後悔しました。UIボタンの配置がクセ強いし、初期学習コストが思ったより高かった。

本番運用で痛感した、ツール選びの本当のポイント

パフォーマンス比較——想像以上の差が出た

実際に同じデータソース(CloudData Warehouseに100GB程度のログテーブル)で、複数のダッシュボード(各10〜15個のビジュアル)を作ってみた時のクエリ実行時間です。差がハッキリ出ました。

xychart-beta
  title Metabase vs Superset クエリ実行時間比較(秒)
  x-axis [集計A, 集計B, 時系列C, フィルタD, JoinE]
  y-axis "実行時間(秒)" 0 --> 15
  line [8.2, 9.5, 12.3, 6.8, 14.1]
  line [3.1, 2.8, 4.2, 2.5, 5.9]

Metabaseはどのクエリも重い。Supersetは最適化戦略がちゃんと効いてる。特に「フィルタが入った時の再クエリ」がMetabaseだと全て再計算されるのに対して、Supersetはキャッシュヒット率が格段に高い。応答速度が全然違うんですよね。

実測値を取ったのは運用3ヶ月目。この時点でMetabaseに戻す選択肢は完全になくなってました。

セルフサービスBI「本当の使いやすさ」について

ここが意外だったんですが、Metabaseの方が初心者向けに見えて、実際はSupersetの方が直感的なんです。

Metabase:UI操作が細かすぎる

カスタムカラムを作ろうとすると、「テーブル選択→カラム追加→式を書く」という3ステップで、各ステップで細かいUIが出現する。エンジニアからするとうっとおしい。非技術者からすると「ボタンどこ?」ってなりやすい。結局、全員がデータエンジニアに頼ることになっちゃう。

Superset:SQLを書く vs ノーコード両立

Supersetはシンプルです。「SQLを書きたい人」はSQL書く。「ノーコードで簡単に作りたい」って人は、プリセットされたメトリクスを組み合わせる。このすみ分けが本当に良い。うちのチームだと、アナリストはSQL書く側に進化したし、マーケティング部門はメトリクス組み合わせ側で十分だった。それぞれのスキルに合わせた使い方ができるのが強い。

実際、導入6ヶ月で「ダッシュボード作成リクエスト」が月40件から月120件に増えた。これはセルフサービス化が本当に機能してるということですよ。

AIアシスト機能の現実的な評価

2026年時点でのBIツールのAI統合って、どんな感じかというと——

Supersetの「自然言語→SQL変換」は、本当に価値があります。「先月比で売上が増えた製品カテゴリを教えて」みたいなざっくりした質問でも、正確なSQLを提案してくれる。ただし、「完全自動」ではなく「8割完成度のSQL提案」くらいだと思った方がいい。完璧を期待すると裏切られます。

実装としては、OpenAI APIやBedrock統合で、LLMにテーブルスキーマを送信してSQLを生成させてます。Metabaseにも同機能はありますが、正確度が65%程度。Supersetは82%程度。この違いは意外と大きい。

ただし、複雑な業務ロジック(「このカテゴリは来月から分類が変わるから〜」みたいなの)は当然AIが理解できないので、最後は人間が修正する前提。そこを理解できるかどうかで、AI生成SQLの満足度が変わってきます。

コスト・運用・スケーラビリティの三角形

正直なところ、Metabaseはスタートアップ向け。Supersetはスケールしたい組織向けだと思います。

項目MetabaseSuperset勝者
初期セットアップ5分30分Metabase
メモリ使用量400MB800MBMetabase
クエリキャッシング基本的高度Superset
複雑なSQL対応Superset
チーム規模10人以上での安定性Superset
AI生成SQL精度65%82%Superset
本番環境での推奨小規模中〜大規模Superset

コスト面では両者ともOSSなので、サーバー費用だけ。ただし、Supersetは「複数のデータベース接続を同時にキャッシングする」というロード増加があるので、メモリは倍近く必要になる。月間クエリが10万以上あるならSupersetの方が総合コストは安い。レスポンス遅延による人間の生産性低下を含めて計算すればね。

実装の詳細——Supersetの設定で本気を出すと

Supersetをちゃんと本番環境で回すには、キャッシング層の構築が肝になります。設定で80%のパフォーマンスが決まると言っても過言じゃない。

# docker-compose.yml の一部
superset:
  environment:
    # Redis キャッシュ
    CACHE_DEFAULT_TIMEOUT: 3600
    SUPERSET_CACHE_TYPE: redis
    REDIS_HOST: redis
    REDIS_PORT: 6379
    REDIS_CELERY_DB: 0
    REDIS_RESULTS_DB: 1
    # メタデータキャッシュ
    SQLALCHEMY_ENGINE_OPTIONS: |
      {"pool_pre_ping": true, "pool_size": 30, "max_overflow": 10}
    # クエリ結果キャッシュ有効期限(秒)
    CACHE_QUERY_TIMEOUT: 3600
  depends_on:
    - redis
    - postgres

redis:
  image: redis:7-alpine
  command: redis-server --maxmemory 2gb --maxmemory-policy allkeys-lru

これでクエリ結果を1時間キャッシュ。同じクエリが来たら、Redis経由で0.05秒で返す。Metabaseだとこのレベルの設定をしても、安定性が低かった。キャッシュが効いたり効かなかったりするのが地味にストレス。

データソース設定も重要で、「大規模テーブル用の接続プール」と「ダッシュボード用の接続プール」を分けるのが地味に効く。リソース競合を避けられるんです。

# superset/config.py の設定例
SQLALCHEMY_ENGINE_OPTIONS = {
    "poolclass": StaticPool,
    "pool_pre_ping": True,
    "pool_size": 50,
    "max_overflow": 20,
    "pool_recycle": 3600,
}

# 複雑クエリ用のタイムアウト(秒)
QUERY_TIMEOUT = 300

# セッションタイムアウト
PERMANENT_SESSION_LIFETIME = timedelta(hours=24)

チーム運用で見えた「本当の問題」

Metabaseで困ったこと

ぶっちゃけ、運用してみるまで分からない課題ばかりだった。クエリが重くなるとUI全体が遅延するから、ダッシュボードを開く度にイライラ。カスタムカラムの式を複数組み合わせるとバグりやすいし、複雑な集計ができない。そもそもSQLを直接書く方法がなくて、複雑な集計に対応できなかった。

キャッシング設定も限定的で、同じ集計を何度もやると遅くなる。チームメンバーのスキルも「ダッシュボード作成」で頭打ちになって、みんなが結局エンジニアに頼るようになっちゃった。

Supersetで困ったこと

Supersetにも問題はある。初期学習コストが高くて、SQLを書く必要があるから、非技術者は最初戸惑う。UIのボタン配置が直感的じゃないページがあって、アラート設定とかは「どこやるの?」ってなりやすい。

メタデータ更新が遅れることがあって、新しいカラムが反映されない時がある。エラーメッセージも分かりにくいし、複数チームでの運用だと権限管理が設定地獄に陥る。

正直、Supersetの権限管理が一番つらかった。Metabaseは「このユーザーはこのデータベースを見られる」くらいの粗さでいいんですが、Supersetは「ロール・リソース・データパーミッション」が絡み合って、設定ミスが本当に多かった。運用4ヶ月目くらいまでは権限周りの問題に悩まされました。

2026年版の推奨パターン

個人的には、チームサイズと複雑さで判断すべきだと思う。

Metabaseを選ぶべき場面:

  • 5人以下のチーム
  • SQLを書きたくない分析担当がいる
  • ダッシュボード数が少ない(月の更新が数個程度)
  • 既存クエリがシンプル
  • とにかく今すぐ始めたい

Supersetを選ぶべき場面:

  • 10人以上のチーム
  • SQLを書ける人が複数いる
  • 複雑な集計が必要
  • 月間クエリ数が1万以上
  • スケーラビリティが重要
  • 長期的な保守を考えている

うちのチームは後者だったので、Supersetで正解だった。ただし、導入直後の「このUI分かんない」という苦労は覚悟すべき。最初の2週間は結構大変です。

AI生成SQL機能の使い所——実装例

2026年版のBIツールで面白いのは、やっぱり「生成SQL」ですね。Supersetで試した実装をシェアします。

# Superset内のカスタムプラグイン例
from superset.models.database import Database
from superset.db_engine_specs import get_engine_spec

class NLtoSQLGenerator:
    def __init__(self, database_id: int):
        self.db = Database.query.get(database_id)
        self.schema_info = self._get_schema_info()
    
    def generate_sql(self, natural_language: str) -> str:
        # スキーマ情報をプロンプトに含める
        prompt = f"""
Available tables and columns:
{self.schema_info}

User request: {natural_language}

Generate a valid SQL query.
        """
        
        # LLM呼び出し(Bedrock or OpenAI)
        response = bedrock_client.invoke_model(
            model_id="anthropic.claude-3-sonnet-20240229-v1:0",
            body=json.dumps({"prompt": prompt})
        )
        return response['sql']

これを試した結果、精度は「8割」。残りの2割は複雑なビジネスロジックなので、人間が修正する。実用的だと思う。生成されたSQLを眺めて「あ、こここうした方がいいな」って手直しするのが日々のワークフローになってます。

現在の運用体制

うちは今、Superset + dbtの組み合わせで回してます。dbtで変換ロジックを管理して、Supersetで可視化。これが最強の組み合わせだと確信してます。BIツールは見せ方に集中できるし、dbtがデータの品質保証をしてくれるから。

データパイプラインとBIツールを分離した方が保守性が圧倒的に高い。だから、「Metabase vs Superset」という比較は、実はBIツール選びの氷山の一角で、本当の問題は「データパイプラインの品質」だったりします。ツール選びより先に、データの信頼性を確保する方が100倍重要。

まとめ

  • Metabaseはシンプルだけど、スケールに弱い。初心者向けのプロトタイプには最適だが、月10万クエリ超の本番環境では心許ない。UI操作だけでは複雑な集計に対応できない。
  • Supersetは複雑だけど、スケールに強い。SQLを書ける人がいるなら、長期的には絶対こっち。キャッシング設定とRedis統合で、パフォーマンスが全然違う。
  • 2026年のAI生成SQL機能は、どちらでも8割程度の精度。完全自動ではなく、人間が修正前提で使うべき。信頼しすぎは禁物です。
  • 権限管理の複雑さはSuperset > Metabase。複数チームでの運用を考えるなら、初期設計を丁寧に。後から修正するのは本当に大変。
  • 結局、チームのSQLスキルがボトルネック。BIツール選びより「SQLが書ける人を育成する」ことの方が重要だと痛感した。

次のアクション:

  1. 月間クエリ数を測定する
  2. チーム内のSQLスキル分布を把握する
  3. 6ヶ月単位でTools Sprintを設定して、実際に両方試す
  4. キャッシング戦略を事前に設計する(これがパフォーマンスの50%を決める)

繰り返しになりますが、BIツール選びは「データ品質管理」とセットで考えるべき。ツール選びだけに時間をかけるより、データの信頼性確保に時間をかけた方が、長期的には絶対に効きますよ。

U

Untanbaby

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

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

関連記事