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
機能比較表
| 比較項目 | Metabase | Redash | Superset |
|---|---|---|---|
| ノーコードUI | ✅ 最強 | △ | △ |
| チャートタイプ | 中 | 中 | ✅ 最多(40+) |
| SQL Lab | △ | ✅ | ✅ |
| 行レベルセキュリティ | △ | △ | ✅ |
| セットアップ | ✅ 容易 | ✅ | 中 |
| GitHub Stars | 39k+ | 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 |