こんにちは。
Toggle AdventCalendarの23日目の記事です。
はじめに
社内の検証用にBIツールのApache Supersetを立ち上げてみました。
Apache Supersetは、オープンソースのデータ探索・可視化プラットフォームです。
単なるグラフ作成ツールにとどまらず、有償のBIツールを代替できるほど強力な機能を備えています。
元々はAirbnb でOSSとして開発されていましたが、その後、Apache財団の管理となりました。
きっかけ
自社SaaSの利用がここ1年で急速に伸び、データ可視化のニーズが非常に高まってました。
元々はMetabaseを利用していましたが、ビジネスメンバーから「こんな指標が見てみたい」とか「このデータに列を追加してほしい」みたいなニーズをいただくことが増えました。
また地図ベースのアプリケーションのため、地図でデータを可視化したいシーンもありました。
そんな状況だったので、新しくBIツールを開拓しつつ社内で検証を回してみることにしました。
気軽に検証を回す
弊社では先日、ひとり1台 NVIDIA DGX Sparkが配布されました。
参考: https://www.itmedia.co.jp/aiplus/articles/2509/03/news125.html
ローカルLLMの構築や、ファインチューニング、ディープラーニングなど、様々な利用用途はありましたが、Ubuntuが内蔵されているので、単にサーバーとしても気軽に使えるのでは?と思いました。
そこで、DGX Sparkで環境を立ち上げ、それを社内で展開して見てもらおうと考えました!
なぜSuperset か?
シンプルに使ってみたかったからです。
OSS で高性能なんてワクワクします。
Supersetのメリット
ざっくり下記のような機能を携えています。
-
ノーコード・チャートビルダー
SQLが書けなくても、直感的なUIだけで素早くチャートを作成できる -
強力なSQLエディタ
データサイエンティストやエンジニア向けの、高機能なブラウザベースSQL IDEを搭載。複雑なデータ加工も自由自在 -
軽量なセマンティックレイヤー
メトリクスやカスタム次元を定義し、チーム全体で共通の指標を使い回すことができる -
美しいビジュアライゼーション
シンプルな棒グラフから、高度な地理空間データの可視化まで、Apache EChartsをベースとした多種多様なチャートが用意されている -
エンタープライズ品質のセキュリティ
柔軟な権限管理と、既存の認証システム(OAuth, LDAP等)との連携が可能 -
クラウドネイティブな設計
小規模な検証から、膨大なトラフィックを捌く大規模環境まで、スケールすることを前提に設計されている
また、ほとんどのDBやデータエンジンと接続できる便利BIツールです。
デメリット
デプロイが面倒なことかなと思います。
k8s で構成されているので、知識を要します。
あと、大規模で使うなら良いですが、社内レベルであれば割とオーバーな構成であるとも思います。
さっそく検証してみる
ローカルで検証するのはものすごく簡単です。
公式ドキュメント に従って、リポジトリをクローンして、Docker compose up するだけです。
- リポジトリクローン
git clone https://github.com/apache/superset - 立ち上げる
# Enter the repository you just cloned $ cd superset # Set the repo to the state associated with the latest official version $ git checkout tags/5.0.0 # Fire up Superset using Docker Compose $ docker compose -f docker-compose-image-tag.yml up
が、さすがに問題ある
ただ、立ち上げるだけだとユーザー名 and パスワードログインとなります。
社内で利用するならOauthでのログインがいいですね。
あと、言語も英語になっています。
こちらも日本語のほうがベターです。
このあたりを2点いじっていきます。
1. Oauth ログイン
docker/pythonpath_dev/superset_config.py を編集します。
ユーザー登録するのも面倒なので、ログインをしてみて、ユーザーが存在しなければユーザーを登録するようにします。
# Authentication Configuration
# AUTH_DB: Email/パスワード認証(デフォルト)
# AUTH_OAUTH: OAuth認証(Google OAuthなど)
# AUTH_TYPE = AUTH_OAUTH に変更するとGoogle OAuthが有効になります
AUTH_TYPE = AUTH_OAUTH
# Google OAuth Configuration
# Google OAuthを使用する場合は、上記のAUTH_TYPEをAUTH_OAUTHに変更してください
# Set GOOGLE_KEY and GOOGLE_SECRET environment variables
GOOGLE_KEY = os.getenv("GOOGLE_KEY")
GOOGLE_SECRET = os.getenv("GOOGLE_SECRET")
# Only configure OAuth if AUTH_TYPE is AUTH_OAUTH and credentials are provided
if AUTH_TYPE == AUTH_OAUTH and GOOGLE_KEY and GOOGLE_SECRET:
OAUTH_PROVIDERS = [
{
"name": "google",
"icon": "fa-google",
"token_key": "access_token",
"remote_app": {
"client_id": GOOGLE_KEY,
"client_secret": GOOGLE_SECRET,
"api_base_url": "https://www.googleapis.com/oauth2/v2/",
"client_kwargs": {"scope": "email profile"},
"request_token_url": None,
"access_token_url": "https://accounts.google.com/o/oauth2/token",
"authorize_url": "https://accounts.google.com/o/oauth2/auth",
"authorize_params": {"hd": os.getenv("AUTH_DOMAIN", "")},
},
}
]
# 管理者として認識されたユーザーに割り当てられるSupersetのロール名
AUTH_ROLE_ADMIN = "Admin"
# 未認証/パブリックユーザーに割り当てられるロール名
AUTH_ROLE_PUBLIC = "Public"
# Google OAuthで認証されたユーザーが、Supersetに自動的にユーザー登録される
AUTH_USER_REGISTRATION = True
# The default user self registration role
# Change this to "Admin" if you want new users to have admin role
# Gammaロールを付与することで、新規ユーザーは基本的な権限を持つが、Datasetへのアクセスは個別に付与が必要
AUTH_USER_REGISTRATION_ROLE = "Gamma"
# If running behind a load balancer or reverse proxy, enable this
# リバースプロキシ経由の場合や、リダイレクトURIの問題がある場合は有効化
ENABLE_PROXY_FIX = True
自動ログイン & ユーザー登録をしているのは下記のコードです
# Google OAuthで認証されたユーザーが、Supersetに自動的にユーザー登録される
AUTH_USER_REGISTRATION = True
↑だけだとユーザーがログインしても何も見えないので、ロールを付与します。
AUTH_USER_REGISTRATION_ROLE = "Gamma"
ロールはお好みですが、下記のような分かれ方になっています。
| ロール名 | 説明・主な権限 | データソースの追加・変更 | ユーザー管理 (権限付与等) |
|---|---|---|---|
| Admin | 管理者: 全ての権限を持ちます。他ユーザーへの権限付与や、他人が作成したスライス・ダッシュボードの変更も可能です。 | ◯ 可能 | ◯ 可能 |
| Alpha | 編集者: 全てのデータソースにアクセスでき、データソースの追加・変更も可能です。ただし、他人の権限管理はできません。 | ◯ 可能 | × 不可 |
| Gamma | 閲覧者: 権限が制限されています。個別に付与されたデータソースのみ閲覧・利用可能です。データソースの追加はできません。 | × 不可 | × 不可 |
| sql_lab | SQL Lab利用: SQL Labへのアクセスを許可します。AlphaやGammaユーザーがSQL Labを使う際に組み合わせて付与します。 | - | - |
| Public | 公開用: ログインしていないユーザーに特定の機能(ダッシュボードの閲覧など)を許可するために使用します。 | × 不可 | × 不可 |
Google側の設定
Google Cloud Platform側はこんな感じで設定します
さて、設定が完了したら docker を立ち上げ直してみましょう。
docker を立ち上げ直すと、以下のようにログイン画面がGoogle ログインに変わりました ![]()
2. 日本語化
バージョンが5系だからかはわかりませんが、デフォルトでは言語選択欄が出ません。
なので、こちらも superset_config.py をいじっていきます。
BABEL_DEFAULT_LOCALE = "ja"
LANGUAGES = {
"ja": {"flag": "jp", "name": "Japanese"},
"en": {"flag": "us", "name": "English"},
}
こちらも、Dockerを立ち上げ直してみると、
言語選択ができるようになりました! 🎉🎉
しかし、日本語は、直訳したかのうような不自然な日本語が多数存在します。
そのままではビジネスメンバーには展開できません....
ここでAIに真価を発揮してもらうことにしました。
日本語ファイルをガッツリいじる
日本語ファイルは下記に格納されています。
superset/translations/ja/LC_MESSAGES/messages.po
このファイルをいじれば日本語も自然になるはず...ですが、日本語ファイルは13000行あります。
AIの力を借りつつ少しずつ修正していきます。
どこまでやるかはお任せです。
終わったらこの po ファイルをビルドします。
バックエンド
$ pybabel compile -d superset/translations
フロントエンド
$ cd superset-frontend
$ npm run build-translation
確認してみます
日本語なども問題ないかと思います。
日本向けにさらにいじる
これまでの対応で、下地は完了かと思いきや、まだ問題がありました。
日本では、あるあるのSHIFT-JIS問題です。
データをダウンロードすると文字化けします...
そこで文字化けしないようにソースコードを直接いじります。
- query["data"] = buf.getvalue()
+ csv_data = buf.getvalue()
+ # Excel on Shift-JIS based Windows relies on a UTF-8 BOM to detect UTF-8
+ # encoded CSVs, so we inject it here to avoid mojibake when opening files.
+ if not csv_data.startswith("\ufeff"):
+ csv_data = "\ufeff" + csv_data
これでダウンロードしても文字化けしなくなりました。
Supersetはどうか?
高機能なので、使い方を覚えないとなかなか難しい部分も多いですが、権限管理も細かく出来て、組織が大きくなってもスケーリングしやすいのが良いなと思いました。
SQL Labでデータを作ってしまえば、あとはチャートの入れ替えなどスムーズに行えますし、高機能なダッシュボード画面が気に入っています。
私が特に気に入っているのは、押したデータが連動してクロスフィルターされる点です。


これでユーザー単位の分析なども行いやすくなります。
ここについては社内でも好評です。
まとめ
今回は社内向けにSupersetを立ち上げてみました!
社内では概ね好評です!!!
みなさまも良ければセットアップしてみてください!






