Docker と DuckDB を用いた、Metabase をローカルで試せる構成です。DuckDB はファイルベースの分析用データベースで、サンプル売上データを収録した .duckdb ファイルを Metabase から参照します。
- Docker Desktop もしくは docker + docker compose が動作する環境
curlとjq(ダッシュボード自動作成スクリプトで利用)
- DuckDB ファイルを生成
make seed
duckdb/sample.duckdbにサンプルデータが作成されます。 - Metabase を起動
ブラウザで
make up
http://localhost:3000を開き、管理者アカウントの初期設定を完了させます。 - DuckDB を Metabase に登録
Metabase の管理画面から「データベースを追加」→「DuckDB」を選択し、以下の値を入力します。- Database file:
/app/duckdb/sample.duckdb
その他の設定は既定のままで構いません。
- Database file:
API 経由で接続設定・カード・ダッシュボードを生成するには以下を実行します。
export MB_EMAIL="admin@example.com" # Metabase で作成した管理者メール
export MB_PASSWORD="your_password" # そのパスワード
make bootstrap完了すると Metabase 上に以下が作成されます。
- DuckDB の Sample Sales データベース接続(既存の場合は再利用)
- 「Monthly Revenue」「Top Customers」の 2 つのカード
- カードを配置した「Sales Overview」ダッシュボード
- 停止:
make down - 状態確認:
make status - ログ閲覧:
make logs - ボリュームも含めて削除:
make clean - DuckDB ファイルのみ再生成:
make seed
Metabase の Embedding SDK を使った React サンプルを embedding-demo/ に用意しています。Metabase の「アプリに埋め込み」機能を有効にし、埋め込みシークレットと埋め込み用ダッシュボード ID を取得した上で以下を実施してください。
- 依存関係のインストール(Bun 使用)
cd embedding-demo cp .env.example .env.local bun install.env.localのMETABASE_EMBED_SECRETとダッシュボード ID を実際の値に更新します(Vite 用VITE_付き変数も同じ値に揃えてください)。 - 署名サーバーを起動
4000 番ポートで
bun run server
/api/metabase-embed-jwtエンドポイントが立ち上がり、埋め込みトークンを生成します。 - 別ターミナルでフロントエンドを起動
ブラウザで
bun run dev
http://localhost:5173を開くと、Metabase のダッシュボードが React コンポーネントとしてレンダリングされます。
コード整形は bun run format、lint チェックは bun run lint で実行できます。
必要に応じて METABASE_SITE_URL をホストに合わせて変更してください。Metabase が Basic 認証や VPN の裏にある場合は、署名サーバーからアクセス可能であることを確認してください。
Makefile: docker-compose やスクリプトをラップする操作コマンドdocker-compose.yml: Metabase コンテナとボリューム設定duckdb/seed.sql: サンプルデータ作成用 SQLscripts/seed_duckdb.sh: DuckDB ファイルを Docker 経由で生成scripts/bootstrap_metabase_content.sh: Metabase API でカードとダッシュボードを自動作成embedding-demo/: React + Vite 製の埋め込みデモ(フロントエンドと署名サーバー)