Docker ComposeとSQLiteでMetabaseを構築してみる

# やりたいこと

- Metabase自体はDocker(Docker Compose)で構築する
- Metabaseがデータソースとして扱うDBはホストマシン上に立てているSQLiteを使用する

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/3c6663ed-cc64-79e3-34d5-a16fabdd8d3f.png" width="600">

# Metabaseとは

- BI(Business Intelligence)ツール
- 企業の様々なデータを分析・可視化し、経営の意思決定をサポートする
- Metabase以外の選択肢としては、SupersetやRe:dash等がある
- 環境構築や運用のし易さ、機能性から今回はMetabaseを選定した
- Clojureで実装されており、JVM上で動作する
- GitHub: https://github.com/metabase/metabase

# Metabaseの構築

### SQLiteの構築

```bash
# SQLite(DB)の作成
$ touch database.sqlite3

# SQLiteに接続
$ sqlite3 database.sqlite3 
SQLite version 3.39.5 2022-10-14 20:58:05
Enter ".help" for usage hints.

# テーブルの作成
# 今回はサンプル用のテーブルとして気温を記録するテーブル(計測日と温度をカラムとして持つ)を作成する
sqlite> create table temperatures(measured_at text, celsius real);

# テーブルが作成されていることを確認
sqlite> .tables
temperatures

# テーブルのスキーマを確認
sqlite> .schema temperatures
CREATE TABLE temperatures(measured_at text, celsius real);

# サンプルデータの作成
sqlite> insert into temperatures values("2023-01-01", 10);
sqlite> insert into temperatures values("2023-01-02", 15);
sqlite> insert into temperatures values("2023-01-03", 20);
sqlite> insert into temperatures values("2023-01-04", 10);
sqlite> insert into temperatures values("2023-01-05", 15);

# サンプルデータが作成されていることを確認
sqlite> select * from temperatures;
2023-01-01|10.0
2023-01-01|10.0
2023-01-02|15.0
2023-01-03|20.0
2023-01-04|10.0
2023-01-05|15.0
```

### Docker Composeの設定

```yaml:compose.yml
services:
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    ports:
      - 3000:3000
    # Metabaseがメタデータの保存に使用するDBの保存場所を指定
    environment:
      - MB_DB_FILE=/metabase-data/metabase.db
    # データの永続化
    # データソースとなるSQLiteとMetabaseのメタデータを保存するDBの両方を指定する
    volumes:
      - ./database.sqlite3:/database.sqlite3
      - ./docker/metabase/data:/metabase-data
```

### コンテナの起動

```bash
# コンテナの起動
$ docker compose up -d

# 起動していることを確認
$ docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
metabase            "/app/run_metabase.sh"   metabase            running             0.0.0.0:3000->3000/tcp
```

# Metabaseの操作

### Metabaseの初期設定

- 1分ほど待機して `http://localhost:3000` を開くとMetabaseにアクセスできる

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/5889d5cb-215e-1be7-e283-6756e21e3150.png)

- 言語やパスワード等のプロフィール、データソースの設定を進めていく

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/c89a176b-09b9-a5ac-41ce-3ecc8d59a155.png)

- 一通り完了するとホーム画面が開く

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/3a96c5d6-2cf2-8ca1-fb67-83f0d97c0a50.png)

### Metabaseでデータ分析・可視化

- 次に簡単なデータ分析と可視化を行ってみる
- New > SQLクエリ を開く

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/fb307fba-eac1-9db8-8046-e072046396bb.png)

- `my sqlite`データベースを選択する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/745341f3-9a90-69c8-e4a6-c589e29a2333.png)

- 先程作成した`temperatures`テーブルから温度(`celsius`)と計測日(`measured_at`)を表示するだけのSQLを書き、クエリを実行すると、作成したデータが表示される

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/4c7d1503-f983-796f-025f-99bdfe29703f.png)

- ビジュアライゼーション > 線 を選択して「完了」を押す

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/1cbbe482-270b-1130-7afe-1cff7d8f8b57.png)

- 気温の変化が可視化されたことを確認する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78249/59f4d9f5-f3a9-3083-4435-92a29fb47ea0.png)