Airbnb Supersetを素人が読み解く
Superset !!
airbnbが開発・公開し、先日Apache IncubatorとなったSupersetについて作りを読み解く。Supersetとは、SQLデータベース内の情報をQueryし、結果をリッチな図表で視覚化してくれるWebツールです。背景
このSupersetをベースにSQL文をGUI操作から自動生成するツールを今風のツール使ってオシャレに効率良く作りたい!という背景があり、まずは
- Supersetがどんな部品で構成されているの?
- 目的を果たすにはどのへんを集中して掘り下げていけば良いか?
をクリアにするために読み解き作業を行います。
方針
主にPythonとNode.jsで構成されているらしく、Python部分の作りを自動可視化して様子を見てみる。
開発環境
以下を参考にSuperset開発環境を整える。
incubator-superset/CONTRIBUTING.md at master · apache/incubator-superset以下を実行して仮想環境を作成し、ソースをリポジトリからクローンする。
$ virtualenv superset_dev_venv
$ . ./superset_dev_venv/bin/activate
$ git clone https://github.com/apache/incubator-superset.git incubator-superset-dev
あとは言われたとおりやる。
$ fabmanager create-admin --app superset
ここで admin でユーザ作るとDBへのユーザ追加時にエラーとなるので注意
$ superset db upgrade
$ superset init
$ superset load_examples
$ superset runserver -d -p 9099
この状態でアクセスするとフロントエンドが未完成な感じのまま。このままnpmによるnodejsのセットアップに移ります。
$ cd superset/assets/
$ npm install -g yarn
$ yarn
このインストールはすぐ済みます。
$ npm run sync-backend
$ npm run dev
最後のコマンドが「nodeが古い」とかで失敗しました。なので最新化してあげます。
$ sudo n latest
$ node -v
v8.3.0
これで改めて、npm runとrunserverを両方やればリッチなフロントエンドでsupersetにアクセスできます(fabmanagerで設定したアカウントを使ってアクセス)。
構成の可視化
可視化には以下を利用する
ソースコードはbitbucketで管理されており、個人的には聞きなれないMercurialをリポジトリに使っている。なので単純に最新スナップショットをzipでダウンロードした。
以下の
結局、以下のコマンドで標準ライブラリを除去したりしてみたが、情報量としてはあまり多くなかった気もする。
sql_lab機能周辺が気になるので、sql_lab.pyと依存関係にあるsql_parse.py、dataframe.py、jinja_context.py、db_engine_spec.pyあたりに絞ってみてみる。
snakefood: Python Dependency Graphs
ソースコードはbitbucketで管理されており、個人的には聞きなれないMercurialをリポジトリに使っている。なので単純に最新スナップショットをzipでダウンロードした。
以下の
http://furius.ca/snakefood/doc/snakefood-doc.html「30-seconds Usage Instructions」に従って、エイヤッで作るとこんな風になって、よくわからない。
結局、以下のコマンドで標準ライブラリを除去したりしてみたが、情報量としてはあまり多くなかった気もする。
$ sfood --ignore-unused --internal ./superset | sfood-graph | dot -Tsvg > test3.svg
sql_lab機能周辺が気になるので、sql_lab.pyと依存関係にあるsql_parse.py、dataframe.py、jinja_context.py、db_engine_spec.pyあたりに絞ってみてみる。
ログから読み解く
このアプローチのほうがてっとり早かった。デバッグモードで起動するとコンソールに色々デバッグ情報を吐いてくれる。
- メニューや画面の実装は views/core.py で行っており、flaskのJinjaという軽量テンプレートを利用している。
- fabmanagerの「fab」はFlask-AppBuilderのFABだったのね!
画面にはReactを利用
下のSQL Labの画面などは、jsxファイルの集合体となっている。今流行りのReactで書かれている、ということかな。
クラス図を生成した方が良さそう
メニューを追加したり、Flask AppBuilderを使ったテーブル表示をカスタマイズしてみたりして思ったのが、クラス図が見えると色々見えてきそうだ、ということ。というわけで以下に従ってクラス図を生成してみたのがコチラである。うん、わかりやすい! こういう設計センスがある人って、すごいな。場数踏めばできるもんなのかな。
生成手順は以下の通り。
$ sudo pip install pylint
$ pyreverse -o png -p hoge superset
$ ls -l *hoge.png
-rw-rw-r-- 1 ubuntu ubuntu 3713024 Aug 16 15:58 classes_hoge.png
-rw-rw-r-- 1 ubuntu ubuntu 742609 Aug 16 15:58 packages_hoge.png
コメント
コメントを投稿