VisasQ Dev Blog

ビザスク開発ブログ

Re:dashとDocker for Macでらくらく分析・可視化環境構築

ビザスク開発者ブログ第一弾記事を書かせてもらうことになりました、 @shinyorke(Shinichi Nakagawa)ともうします.

我々ビザスク(https://service.visasq.com)の開発チームでは、データに基づいた客観的な観点をベースに施策を実施しています.

現状はエンジニアがGoogle SpreadsheetsGoogle Apps Script(社内では「ガス(GAS)」と呼ばれています)、Slackを駆使して数値の可視化や共有をしていますが、

  • ひとつの画面、いわゆる「ダッシュボード」で分析・可視化を行ってチーム全員で共有しよう!
  • 将来的にはビジネス側のメンバーにも数値出しや可視化をしてもらおう!

という機運が高まり、分析・可視化ツールの代表格であるRe:Dash(http://redash.io/)を試すことにしました.

このエントリーでは実際の構築前にローカル環境(Macbook Pro)で検証を行った際の手順やノウハウについて紹介したいと思います.

なお、実際の環境構築から検証までの時間は約2時間でした!(おそらくですが、早い方かと思います)

おしながき

  • なぜDocker for Macで動かすのか
  • 前提条件
  • Mac for Dockerのインストール
  • dockerでRe:dashを立てる
  • データソース(MySQL)と繋ぐ&可視化!
  • まとめ&次回予告

なぜDocker for Macで動かすのか

分析・可視化基盤の導入自体は決まっており、いきなりServerを立てて運用しても良かったのですが、

  • Re:dashの他、複数の選択肢があった(tableau、DOMO、Mackerelなど)
  • 複数の選択肢の中で選ぶ関係上、気軽に実験がしたかった(最初なので自分のPCでデモできればOK)
  • クラウドサービスやSaaSではなく、オンプレミスで運用する前提だったので手順も確かめたかった

という理由があり、Docker for Macで試すことにしました.

なお、ビザスクでは全エンジニアメンバーがDockerを利用(開発環境の共有、E2Eテストなどで使っています)しており、他に試したいメンバーがいた際に共有しやすいのもDocker for Macを選択した理由のひとつです.

前提条件

私が試した環境は以下の通りです.

  • Mac OS X 10.11.6(ElCapitan) ※macOS Sierra(10.12.1)でも検証済み
  • Docker for Mac
  • bowerが動く環境(あらかじめbrewなどでインストール)
  • MySQLデータベース(Vagrant+ansibleで構築&Open Dataを利用)

なお、業務で行った際はプロダクトのデータ(本物)を利用しましたが、残念ながらこのブログではお見せ出来ないため、代わりのOpen Dataで代用します.

Mac for Dockerのインストール

Mac for DockerはMac上でDockerをホスティングするためのツール群で、

  • docker本体
  • docker-machine
  • docker-compose

などを含んでいます.

インストールは公式の手順に従い実施します.

Getting Started with Docker for Mac

dockerでRe:dashを立てる

Gitリポジトリからコードをcloneし、docker-compose.ymlを記述後に起動します.

Gitリポジトリをcloneする

Re:dashはOSSとなっており、BSD-2-Clauseライセンスで利用することが出来ます.

任意のディレクトリ(ここでは仮に/Users/shinyorke/workspace、とします)に移動後、gitリポジトリをcloneします.

$ git clone https://github.com/getredash/redash.git

無事にcloneがおわったらredashディレクトリに移動しましょう.

$ cd redash

フロントエンドパッケージのインストール

フロントエンド系のライブラリ(angularなど)をインストールします.

これをやっておかないと、あとでdockerで立ち上げ後に何も出てこなくなります.

$ bower install

DB(PostgreSQL)のボリューム用ディレクトリを作る

Dockerで立ち上げる際に、PostgreSQL用のボリュームを用意する必要があります.

具体的にはDocker for Mac(docker machine)とMac OS(Host)で共有可能なディレクトリの下にディレクトリを作ります.

デフォルトでは/Users, /Volumes, /tmp, /privateが共有可能です.

今回の例では/Users/sharedの下に作ります.

$ mkdir -p /users/shared/redash/postgres-data

docker-compose.ymlを書く

docker-compose.ymlファイルはテンプレがあるのでそれをコピーします.

$ cp docker-compose-example.yml docker-compose.yml

コピーしたdocker-comopose.ymlを編集します.

具体的にはpostgresql(Re:dash本体はポスグレを使っています)コンテナのマウント先のボリュームを指定してあげればOKです(19行目が該当).

イメージの取得とコンテナ作成

docker-composeコマンドでイメージの取得とコンテナの作成を行います

$ docker-compose -f docker-compose.yml up -d

実行完了後、docker psコマンドでコンテナの存在を確認します

$ docker ps

nginx, redash, postgresql, redisのコンテナが立ち上がっていれば成功です!

migrationを行う

ここで起動!...と行きたいところですが、まだ何も無いのでmigrationが必要です.

$ setup/docker/create_database.sh

これでmigrationが走って必要なテーブルなどがセットされます.

起動

ブラウザで、「http://localhost」と打ってあげるとログイン画面が出ます.

redashログイン画面

初期ユーザーはEmail/Password共に「admin」です.

ここでダッシュボードが出てきたら構築完了です(^o^)

home-re-dash

データソース(MySQL)と繋ぐ&可視化!

動作検証として、試しにMySQL Databaseを準備して接続、簡単な可視化を行います.

なお、対応するデータソースは他にもPostgreSQL、Bigquery等多数あります.

詳細は公式ドキュメントSupported Data Sourcesをご覧ください.

テスト用データセットの準備

実際の業務ではプロダクトのDBと繋いで可視化を行いましたが、ブログには記載出来ないためここではOpen Dataを使います.

私は野球が大好きなので、メジャーリーグのオープンデータセットRetrosheet」を使います.

※野球以外がお好きな方は他のオープンデータもしくは業務でお試しの方は任意のデータセットでお試しください.

なお、本エントリーで使用している「Retrosheet」はVagrant + ansibleで構築できるProjectがありますので、真似する方はこちらをご利用下さい(私が個人で作っているモノです).

retrosheet-mysql-server(Github)

MySQLと接続

画面右上の「Settings」(データベースっぽいアイコンもしくは http://localhost/data_sources )から「New Data Source」を選択、データソースの種類、アドレス、ユーザー等を入力します.

data-sources-re-dash

まだ試してはいませんが、SSH接続も出来るようです.

リモートで繋ぐ時に便利そうです.

SQLを書く!実行する!!可視化する!!!

メニューの「Queries」から「New Query」を選択(もしくは http://localhost/queries/new )、クエリーを書きます.

ichiro_hits_01

ちゃんと動いています!

完成版

Dashboardを作成、グラフをポチポチ貼ることによりDashboardができました!

イチロー選手の2014年シーズンのヒットの傾向・本数を見ています)

ichiro_suzuki_dashboard

まとめ&次回予告

検証の結果ですが、

2〜3時間で構築&検証、翌日にはRe:dashを社内サービスとして立ち上げました!

Dockerというテクノロジーに助けられた事、決まったことは即実行できる速度感を大切にしている文化だからこそ出来たと思っています.

良かった

  • Re:dashのドキュメントや作法がわからずにハマった箇所もありましたが、それでも2時間程度で動作検証.
  • Dockerを知ってる&使えたらその場で検証その場で判断が出来るので良い.
  • 公式のリポジトリや先行してやってくださっている方の事例も多く、調べ物にも困らなかった.
  • Python製(Flaskその他で出来ている)なので、なにかトラブったりpatchを当てるのも大丈夫そう.

次に頑張る

  • SQLを書き続ける作業がやっぱり大変(≒ビジネス側メンバーへの展開はSQLの習得がカギとなる)
  • BigQuery/KVS等、SQL以外のデータをまだ試せていない.
  • 日次でSlackに流すとか出来たらいいね!
  • 検証と導入までは大変な速度感(2時間+本導入で半日)で終わったが、このエントリーを書くのに半日かかった.

次回予告

  • GCE(Google Compute Engine)へのRe:dash導入ノウハウ
  • BigQueryとの接続と利用例
  • Re:dashのしくみ(Python製なのでコード読んで何かやりたい)

このどれかをやりたいと思います!

最後までお付き合いいただきありがとうございました!

※ビザスクではデータドリブンでPythonにチャレンジできるエンジニアを募集中です!