AI

BI分析比較:Metabase vs Redash vs Apache Superset でデータを可視化する

オープンソースラボ編集部2026年6月14日

BI分析比較:Metabase vs Redash vs Apache Superset でデータを可視化する

SQLを書けないビジネスメンバーがデータドリブンな意思決定を行うためのセルフサービスBI(Business Intelligence)ツールをセルフホストできるOSSが充実しています。Metabase(直感的UI・最大シェア)・Redash(SQL特化・シンプル)・Apache Superset(高機能・大規模)の3つが2026年のOSS BIデファクトスタンダードです。

OSS BIツールを使う理由

  • コスト削減: Tableau($70/ユーザー/月)・Looker($30〜/月)→セルフホストで$0〜$50/月のVPS費用のみ
  • データ所有権: 顧客データ・売上データを外部BIサービスに送信せずオンプレで完全管理
  • SQL民主化: ノーコードでグラフ・ダッシュボードを作成してビジネスメンバーがデータにアクセス
  • カスタム統合: PostgreSQL・MySQL・BigQuery・Snowflakeなど多数のデータソースに接続

主要ツールの概要

Metabase

2014年公開、Clojure製のOSSです。GitHubスター39k+。最も直感的なUIを持つOSS BIで、「ノーコードで質問(Question)を作成」→「ダッシュボードにピン留め」のワークフローが非エンジニアでも直感的に操作できます。SQLを書かずにグラフを作れる「質問」機能が最大の特徴です。

# docker-compose.yml: Metabase + PostgreSQL
version: "3.8"
services:
  metabase:
    image: metabase/metabase:v0.51.5
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 5432
      MB_DB_USER: metabase
      MB_DB_PASS: ${METABASE_DB_PASS}
      MB_DB_HOST: postgres
      MB_SITE_URL: https://bi.example.com
      MB_EMAIL_SMTP_HOST: ${SMTP_HOST}
      MB_EMAIL_SMTP_PORT: 587
      MB_EMAIL_SMTP_USERNAME: ${SMTP_USER}
      MB_EMAIL_SMTP_PASSWORD: ${SMTP_PASS}
      MB_EMAIL_FROM_ADDRESS: bi@example.com
    depends_on: [postgres]

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: metabase
      POSTGRES_USER: metabase
      POSTGRES_PASSWORD: ${METABASE_DB_PASS}
    volumes:
      - metabase_pg:/var/lib/postgresql/data

volumes:
  metabase_pg:
# Python: Metabase API でダッシュボードを自動生成・共有リンクを取得
import requests
import json

METABASE_URL = 'http://localhost:3000'

def get_metabase_token(username: str, password: str) -> str:
    resp = requests.post(f'{METABASE_URL}/api/session', json={'username': username, 'password': password})
    return resp.json()['id']

def create_question(token: str, database_id: int, query: dict, display: str, visualization_settings: dict) -> dict:
    '''カード(質問・チャート)を作成'''
    headers = {'X-Metabase-Session': token, 'Content-Type': 'application/json'}
    resp = requests.post(
        f'{METABASE_URL}/api/card',
        headers=headers,
        json={
            'name': '月別売上推移',
            'dataset_query': {
                'type': 'native',
                'database': database_id,
                'native': {'query': query['sql'], 'template-tags': {}},
            },
            'display': display,  # 'line' | 'bar' | 'table' | 'pie'
            'visualization_settings': visualization_settings,
        },
    )
    return resp.json()

def get_public_dashboard_url(token: str, dashboard_id: int) -> str:
    '''ダッシュボードの公開共有URLを取得(認証不要で閲覧可能)'''
    headers = {'X-Metabase-Session': token}
    resp = requests.post(f'{METABASE_URL}/api/dashboard/{dashboard_id}/public_link', headers=headers)
    uuid = resp.json()['uuid']
    return f'{METABASE_URL}/public/dashboard/{uuid}'

def embed_dashboard_jwt(token: str, dashboard_id: int, secret_key: str) -> str:
    '''Signed Embedding用JWTトークンを生成(自社アプリに埋め込む)'''
    import jwt, time
    payload = {
        'resource': {'dashboard': dashboard_id},
        'params': {},
        'exp': int(time.time()) + 600,  # 10分間有効
    }
    return jwt.encode(payload, secret_key, algorithm='HS256')

token = get_metabase_token('admin@example.com', 'password')
card = create_question(token, 1,
    {'sql': 'SELECT DATE_TRUNC('month', created_at) as month, SUM(amount) as revenue FROM orders GROUP BY 1 ORDER BY 1'},
    'line',
    {'graph.metrics': ['revenue'], 'graph.dimensions': ['month']}
)
print(f'カード作成: {card["id"]}')

Redash

2013年公開、Python製のOSSです。GitHubスター26k+。SQLを書くエンジニア・アナリスト向けのシンプルなクエリ・可視化ツールで、クエリをパラメーター化({{date}}{{user_id}})してビジネスメンバーが値を入力して実行できる「クエリスニペット」機能が特徴です。

# docker-compose.yml: Redash
version: "3.8"
x-redash-service: &redash-service
  image: redash/redash:25.0.0
  environment:
    REDASH_DATABASE_URL: postgresql://redash:${POSTGRES_PASSWORD}@postgres/redash
    REDASH_REDIS_URL: redis://redis:6379/0
    REDASH_SECRET_KEY: ${REDASH_SECRET_KEY}
    REDASH_COOKIE_SECRET: ${REDASH_COOKIE_SECRET}

services:
  server:
    <<: *redash-service
    restart: unless-stopped
    ports:
      - "5000:5000"
    command: server
    depends_on: [postgres, redis]

  scheduler:
    <<: *redash-service
    restart: unless-stopped
    command: scheduler

  worker:
    <<: *redash-service
    restart: unless-stopped
    command: worker
    environment:
      QUEUES: queries,scheduled_queries,celery

  postgres:
    image: postgres:14-alpine
    environment:
      POSTGRES_USER: redash
      POSTGRES_DB: redash
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

  redis:
    image: redis:7-alpine

Apache Superset

2015年公開(Airbnb起源)、Python製のOSSです。GitHubスター62k+。最も多機能なOSS BIで、40種類以上のチャートタイプ・SQL Lab(高機能SQLエディタ)・ダッシュボードのインタラクティブフィルター・行レベルセキュリティ・50以上のデータソースコネクターが充実しています。

# docker-compose.yml: Apache Superset(公式)
version: "3.8"
services:
  superset:
    image: apache/superset:4.1.0
    restart: unless-stopped
    ports:
      - "8088:8088"
    environment:
      SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY}
      DATABASE_URL: postgresql+psycopg2://superset:${POSTGRES_PASSWORD}@postgres/superset
      REDIS_URL: redis://redis:6379/0
    depends_on: [postgres, redis]

  superset-init:
    image: apache/superset:4.1.0
    command: ['/app/docker/docker-init.sh']
    depends_on: [postgres, redis]
    environment:
      SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY}
      DATABASE_URL: postgresql+psycopg2://superset:${POSTGRES_PASSWORD}@postgres/superset
      ADMIN_USERNAME: admin
      ADMIN_EMAIL: admin@example.com
      ADMIN_PASSWORD: ${SUPERSET_ADMIN_PASSWORD}

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: superset
      POSTGRES_USER: superset
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

  redis:
    image: redis:7-alpine

機能比較表

比較項目MetabaseRedashSuperset
ノーコードUI✅ 最強
チャートタイプ✅ 最多(40+)
SQL Lab
行レベルセキュリティ
セットアップ✅ 容易
GitHub Stars39k+26k+62k+

OSS BIはDevOpsカテゴリ/categories/devopsのPostgreSQL・TimescaleDB・ClickHouseなどのデータウェアハウスとDBコネクターで直接接続してビジネス指標を可視化します。LLM Toolsカテゴリ/categories/llm-toolsのClaude APIと組み合わせて「自然言語→SQL自動生成→Metabaseのカードとしてチャート化」するAI BI機能を実装するプロジェクトが増えています。

FAQ

Q. Metabaseをビジネスメンバーに展開する際のベストプラクティスは?

A. コレクション(フォルダー)で部門別に整理・パーミッション設定・Signed Embeddingで既存ツールに統合するのが効果的です。コレクション設計: 「営業」「マーケティング」「経営」コレクションを作成して部門ごとにフォルダー管理→ビジネスメンバーは自分のコレクションのみ閲覧・作成可能に設定。Signed Embedding: Metabase Proの機能でiFrameにダッシュボードを埋め込んで既存の社内ポータル・Notionページ・Slackに統合。定期配信: 「毎週月曜9時に売上ダッシュボードのPDFをSlackに送信」をMetabase UIから設定できます。

Q. RedashでAPIデータをJSONデータソースとして接続するには?

A. RedashのJSON APIデータソースタイプを使って外部APIをクエリ可能にできます。設定: ①Admin→Data Sources→Add Data Source→JSON API②URL: https://api.example.com/metrics・HTTP Headers: Authorization: Bearer ${API_KEY}③Query: jqクエリで必要なフィールドを抽出(.[].revenue等)。活用例: Google Analytics API・Stripe API・Salesforce APIをRedashで直接クエリしてビジネスKPIダッシュボードを構築。パラメーター化: {{start_date}}{{end_date}}をURLクエリパラメーターとして埋め込んで期間フィルターを実装します。

Q. Apache SupersetとMetabaseのどちらを選ぶべきですか?

A. 非エンジニア向け・素早い展開・ノーコード優先ならMetabaseエンジニア・アナリスト向け・高度なチャート・行レベルセキュリティ・大規模ならSupersetが向いています。Metabase優位: ①セットアップが最も簡単(Docker1コマンド)②ビジネスメンバーがSQLなしでグラフ作成③日本語UIが標準対応。Superset優位: ①40種類以上のチャートタイプ(Echarts・Mapbox地図・ツリーマップ)②SQL Labが高機能(クエリ履歴・自動補完・実行計画表示)③行レベルセキュリティ(RLS)で特定ユーザーには特定行のみ表示④BigQuery・Snowflake・Redshiftなど50+のデータソース公式対応。

Q. Metabaseダッシュボードを自社アプリに埋め込む(Embedding)方法は?

A. Interactive Embedding(JWT署名)でiFrameにMetabaseダッシュボードを埋め込みます。設定: ①Metabase Admin→Settings→Embedding→有効化→Embedding SecretKeyを取得②バックエンドでJWTを生成(jwt.encode({resource:{dashboard:ID},params:{},exp:now+600}, secret))③フロントエンドでiFramのsrcにMETABASE_URL/embed/dashboard/<JWT>#bordered=false&titled=falseを設定。パラメーター渡し: params: {user_id: currentUserId}でログインユーザーのデータのみ表示するマルチテナント対応が可能(card: {parameterized_field: user_id}との組み合わせ)。セキュリティ: JWTにexp(有効期限)を設定してURLの不正共有を防ぐ。OSS版でも基本Embeddingは無料で使用できます(Interactive EmbeddingはPro版)。

まとめ

ユースケース推奨ツール
ノーコード・非エンジニア向け・簡単展開Metabase
SQL特化・パラメーター化・シンプルRedash
高機能・多チャート・行レベルSec・大規模Apache Superset

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。