KitchHike Tech Blog

KitchHike Product, Design and Engineering Teams

キッチハイクがデータ可視化ツールとしてMetabaseを選んだ理由

データ可視化ツール、どれがいいんだろう?

BI / データ可視化ツールは商用やOSS問わず、近年とても選択肢が増えています。どのツールも非常に魅力的で逆にどれを選ぼうか迷ってしまう方も多いのではないでしょうか。 本記事ではキッチハイクがその中からMetabaseを選択した理由を書いていきます。

はじめに

こんにちは!キッチハイク インターンエンジニアの薬師寺です。

キッチハイクでは、データ可視化 / BIツールとしてMetabaseを導入しています。チーム全員が可視化されたデータにアクセスでき、同時にデータを分析できる環境を整えています。

Metabaseとは

Metabaseは、OSSのデータ可視化 / BIツールのひとつです。

https://github.com/metabase/metabase

フロントエンドはReact, サーバーサイドはClojureで書かれています。

Metabaseの歴史

まずはMetabaseを歴史からひもといてみましょう。

そもそもMetabaseは、Uberの共同創業者Garrett Campが2013年に設立したスタートアップスタジオ、Expaが開発した内製ツールでした。

一般的にデータ可視化 / BIツールは、専門知識がないとツールが使えなかったり、手厚いサポートがつくものの費用が高額だったりと、少々ハードルが高いものでした。その解決のため、簡単に使えるBIツールを自分たちでつくろうと考えたのがMetabaseのスタートのきっかけだったそうです。

Metabaseの原型はすでに2014年の初頭には出来ており、当初はフロントエンドがAngular, サーバーサイドはDjangoで書かれていたそうです。(ここでは触れませんがAngular / Djangoから React / Clojureへと移行した経緯はWhy we picked Clojureという記事をご覧ください)

その後、MetabaseはExpa内部のいくつものスタートアップで使用を経てブラッシュアップされていき、2015年10月にOSSとして公開されました。

Metabaseの開発メンバーはExpa内部で同名の会社を起業し、現在はわずか6人のチームでMetabaseをフルタイム開発しているようです。

キッチハイクはなぜMetabaseを選んだのか

端的にいえば、以下3点の要件を満たしていたのが導入のポイントでした。

  • MongoDBに対応している
  • 導入 / 運用がしやすい
  • 非エンジニアでも扱いやすい

要件1: MongoDBに対応している

キッチハイクではMongoDBを使っているので、ここは外せないポイントでした。この時点でツールはかなり絞られてきます。

もちろんデータをBIツール用にRDBなりに入れれば選択肢は広がるのですが、そうするとデータ分析に至るまでの構えがかなり大きくなってきてしまいます。

運用コストは極力減らしたかったので、MongoDBをそのまま扱えるのは大きなメリットでした。

要件2: 導入 / 運用がしやすい

キッチハイクはまだ小規模な組織です。なので、腰を据えて大規模な分析基盤をつくるのではなく、省コストでお手軽に分析をスタートさせたいと考えていました。

その点、Metabaseならjarファイルひとつで動きます。

SpringBootをお使いの方なら馴染みがあるかもしません。Webサーバごとjarに固めてあるので、jarを起動すればそのまま動くというお手軽さです。

公式のREADMEでも5 minute setup (We're not kidding)と言われているくらいで、動かすだけなら本当に5分くらいで出来てしまいました。

他ツールでもDockerイメージが提供されていたりはよくあるのですが、実態はミドルウェアがいろいろ動いていたりで、どうしても運用するにあたって気を配るポイントが増えてきます。その点、jarファイルひとつで済むシンプルさは導入だけでなく、運用の観点からも非常に魅力的でした。

もっと大きな規模になってくると課題は出てくるのかもしれませんが、今のところ運用で大きな問題は発生していません。

要件3: 非エンジニアでも扱いやすい

エンジニアだけでなく、非エンジニアでもさわれるようにしたいというのが要件でした。

とはいうものの、非エンジニアがクエリを書く、ましてやMongoDBのクエリとなるとハードルが高すぎます。

その点、Metabaseはクエリビルダーが充実しており、かつMongoDBにも対応しています。 クエリが書けなくてもかんたんな分析なら、クエリビルダーだけで作ってしまうことができます。

f:id:narukami894:20180831230535p:plain f:id:narukami894:20180831230630p:plain

以上これらの3点が他のツールと比較してひとつ抜けていたのが、Metabase採用の理由です。

選定したツール

参考までに導入を検討した他のツールをについてもご紹介します

Redash

無償利用できるデータ可視化ツールの中では一番有名ではないでしょうか。日本語のドキュメントや記事もインターネット上に多くあります。

豊富な種類のDBをカバーしていて、MongoDBにも対応しています。

Superset

もともとAirBnB社内のツールだったOSSデータ可視化ツールです。現在は Apache Foundation 管理で開発がすすめられています。

どう選んだのか

Redash ここがいい!

無償で使えるBIツールの中ではデファクト的な立ち位置です。そのため、情報が多いところがよいと思いました。 また、Dockerイメージが用意されていて導入が容易です。

Redash ここが合わなかった

Redashは、基本的にクエリを自前で書かなければなりません。 そのため、非エンジニアにはハードルが高いです。

Superset ここがいい!

Supersetの特徴は、Metabaseと同じくクエリビルダーが実装されていることです。 また、データビジュアルがとても豊富でおしゃれなのも欠かせないポイントです。 f:id:narukami894:20180831230442p:plain

Superset ここが合わなかった

残念ながら、SupersetはRDB専用のツールで、MongoDBは非対応でした。

ツール選定のポイント

重要なのは Metabaseがキッチハイクのニーズと合っていた ということです。

キッチハイクはいわゆる少人数のスタートアップのため、人員やインフラに大きなリソースは割けません。 まずは小さくすばやくデータ分析をはじめたい!というのが要望でした。その点、Metabaseは本当にぴったりでした。

ですので、けっしてMetabase最高、他はダメ!ということがいいたいのではありません。今の所は快適に運用できていますが、データセットが大きくなってきたりすると、今後問題が出てくるかもしれません。

いっぽうで、私たちが可視化 / BIツールに求めた要件は、MongoDB対応以外は、小規模なチームには一般的なものではないでしょうか。同じような状況のチームには、ぜひおすすめしたいツールです。

Metabase導入後の運用

基本的にメンバーが自由にデータの編集・閲覧ができるようにしています。 クエリビルダーで対応できない複雑な条件のクエリが必要な場合、エンジニアがMongoDBのクエリを書いています。

よかったこと

非エンジニアのメンバーでも、データに気軽に接することができるようになったことはとても大きいです。 今までは月次のKPIなどはスプレッドシートで運用しており、月末にエンジニアがデータを抽出してスプレッドシートに取り込んでいました。今は非エンジニアが気軽にデータを見ることができ、そこからの分析がとてもしやすくなりました。

また、データ可視化によってコミュニケーションが円滑になりました。以前まではスプレッドシートからグラフを手間をかけて作っていたのですが、とても簡単にグラフが生成できるようになりました。それを見ながらメンバー間でデータに関するコミュニケーションとてもしやすくなったし、イメージも伝わりやすくなりました。

おまけ: Metabase 導入ではまったこと

Metabase導入当時は、いくつかつまづいたことがありましたので、後世のために共有したいと思います。

NoSQLのDBには補完機能がない

Metabaseの機能のひとつに、SQL補完機能があります。 MySQLなどのRDBMSをDBとして使用している場合、自分でSQLを書いてクエリを作成するときにはSQL補完機能が使えるのですが、NoSQLには補完機能はありませんでした。

とはいうもののクエリビルダーがあるので、なんとかなっています。 RDBユーザーにとってはとても便利な機能なので、ぜひ使ってみてください。

Metabaseのメモリ・CPU使用量

MetabaseはJava、それもWebサーバまですべて同梱したアプリケーションなので、それなりにメモリ・CPUは食います。

Metabase運用の最初期は、別用途のサーバに間借りしていたのですが、いろいろ支障が出て、結局Metabase専用でインスタンスを立てることになりました。

EC2でいうと、microインスタンスとかでのケチケチ運用は厳しいと思います。それなりにいいインスタンスを使いましょう。

Hashを格納しているフィールドが、ネストだと認識されて全て表示されてしまった

フィールドにHashを格納している箇所が、Metabase内でネストしているフィールドと判断されてしまい、中身をすべてフィールド扱いで表示してしまいます。

この問題については、Metabaseのissueでも複数のissueが立っており、長く議論がされています。今の所、解決の目処は立っていません・・・。

https://github.com/metabase/metabase/issues/1328 https://github.com/metabase/metabase/issues/4098

幸いにして、DBでHashを格納しているフィールドの母数がそこまで多くなかったので、問題なく運用できています。

f:id:narukami894:20180831230401p:plain

おわりに

というわけで、キッチハイク でのMetabase導入についてご紹介しました。

Metabaseは現在活発に開発されており、2018年8月に 0.30.0 にバージョンアップしました。

0.30.0へのバージョンアップは「過去最大規模のアップグレード」らしく、アプリケーション内のクエリの横断検索機能や権限周りの見直しなど、大規模チームのMetabase使用も視野に入れられている模様です。 スタートアップだけではなくさまざまな組織へと、ユースケースが広がっていく予感がします。

これからMetabaseがどうなっていくのか、とても楽しみですね。

We’re Hiring!

キッチハイクでは、フロントエンドエンジニア・React Nativeエンジニア・Railsエンジニア・インターンエンジニアを募集中です!

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

参考資料

今回のブログ記事を作成するにあたり、参考にした資料を以下に記載します。

https://expa.com/news/metabase/

https://medium.com/@metabase/why-we-picked-clojure-448bf759dc83

https://metabase.com/blog/0.30/index.html