メインコンテンツにスキップ
GitHubでこのページを編集

開発環境のセットアップ

このセクションのドキュメントは、Supersetを実行する多数の方法(`docker compose`、単なる「docker」、 「metal」、Makefileの使用)を表す知識のパッチワークです。

注記

現在、開発のためにSupersetを実行し、健全性を保つための主要な方法として、`docker compose`をより積極的に推奨およびサポートするように進化しています。 **ほとんどの人は、最初のいくつかのセクション(「フォークとクローン」、「docker compose」、「開発ツールのインストール」)に従うべきです**

フォークとクローン

まず、GitHubでリポジトリをフォークし、次にクローンを作成します。

次に、メインリポジトリを直接クローンできますが、プルリクエストを送信することはできません。

git clone git@github.com:your-username/superset.git
cd superset

Supersetの任意の部分に「hello world」を組み込むための設定は、次のように簡単です。

docker compose up

次の点に注意してください。

  • これは、dockerイメージをプル/ビルドし、以下を含むサービスのクラスターを実行します。
    • ローカルのPythonリポジトリ/コードをマウントするSuperset **Flask Webサーバー**
    • ローカルのPythonリポジトリ/コードもマウントするSuperset **Celeryワーカー**
    • JS / TSアセットをマウント、コンパイル、およびバンドルするSuperset **ノードサービス**
    • 非同期バックエンドを強化するためのSuperset **ノードwebsocketサービス**
    • メタデータデータベースとして、また起動時に設定されるサンプルデータセット、チャート、ダッシュボードを格納するための**Postgres**
    • 非同期バックエンドおよびキャッシングバックエンドのメッセージキューとしての**Redis**
  • 最初の起動時にデータベースにサンプルがロードされます
  • その他の詳細とポインターは、docker-compose.ymlにあります。
  • ローカルリポジトリはサービス内にマウントされます。つまり、ホスト上のコードを更新すると、dockerイメージに反映されます。
  • Supersetはlocalhost:8088 /で提供されます。
  • admin / adminでログインできます
注記

`superset-node`内でApache Supersetのノードモジュールをインストールしてビルドするには、かなりの時間がかかる場合があります。これは、依存関係のサイズが原因で正常です。処理が完了するまでお待ちください。待ち時間が長いからといって、セットアップに問題があるわけではありません。遅延が過剰と思われる場合は、インターネット接続またはシステムリソースを確認してください。

注意

`docker compose`は、主に**単一ホスト**上でコンテナのセットを実行するように設計されており、その結果、**高可用性**を確実にサポートできないため、本番タイプのユースケースをサポートするために`docker compose`構造体を使用することはサポートも推奨もしていません。単一ホスト環境の場合は、minikubek8sへのインストールドキュメントを使用することをお勧めします。安全に構成されています。

開発ツールのインストール

注記

`docker compose`はセットアップの多くを簡素化しますが、IDEを強化するためにローカルにセットアップしたいことがたくさんあります。また、**コミットフック**、**リンター**、**テストランナー**などもあります。たとえば、`docker compose exec superset_app bash`などのコマンドを使用してdockerイメージ内でこれらの操作を実行できますが、多くの人はホストからそのツールを実行することを好みます。

Python環境

`pyenv`、`virtualenv`など、Python環境をセットアップする方法がすでにあると仮定すると、必要なのは、開発用の固定Python要件バンドルをインストールすることだけです。

pip install -r requirements/development.txt

Gitフック

Supersetは、pre-commitのおかげでGitプリコミットフックを使用します。インストールするには、以下を実行します。

pre-commit install

これにより、ローカルリポジトリにフックがインストールされます。今後、Gitコミットを行うたびに、一連のチェックが自動的に実行されます。

プリコミットの手動実行

プリコミットチェックは、さまざまな方法で手動で実行することもできます。

  • すべてのファイルでプリコミットを実行する(CIと同じ)

    リポジトリ内のすべてのファイルに対してプリコミットチェックを実行するには、次のコマンドを使用します。

    pre-commit run --all-files

    これは、CI中に実行されるのと同じチェックセットであり、変更がプロジェクトの基準を満たしていることを確認します。

  • 特定のファイルでプリコミットを実行する

    特定のファイルをチェックまたは修正する場合は、ファイルパスを指定することで実行できます。

    pre-commit run --files path/to/your/file.py

    これは、指定したファイルに対してのみチェックを実行します。

  • 特定のプリコミットチェックを実行する

    すべてのファイルまたは特定のファイルに対して特定のチェック(フック)を実行するには、次のコマンドを使用します。

    pre-commit run <hook_id> --all-files

    または、特定のファイルの場合:

    pre-commit run <hook_id> --files path/to/your/file.py

    `<hook_id>`を実行する特定のフックのIDに置き換えます。使用可能なフックのリストは、`.pre-commit-config.yaml`ファイルにあります。

`docker compose`の代替

注意

ドキュメントのこの部分は、`docker compose`なしで開発環境をセットアップすることに関する情報のパッチワークであり、さまざまな程度で文書化/サポートされています。この幅広い方法を維持し、環境全体で機能することを保証することは困難でした。

Flaskサーバー

OSの依存関係

これらの手順に従う前に、マシンがOSの依存関係を満たしていることを確認してください。また、MySQLをインストールする必要があります。

Pythonバージョン3.9、3.10、または3.11を使用していることを確認してから、次のように続行します。

# Create a virtual environment and activate it (recommended)
python3 -m venv venv # setup a python3 virtualenv
source venv/bin/activate

# Install external dependencies
pip install -r requirements/development.txt

# Install Superset in editable (development) mode
pip install -e .

# Initialize the database
superset db upgrade

# Create an admin user in your metadata database (use `admin` as username to be able to load the examples)
superset fab create-admin

# Create default roles and permissions
superset init

# Load some data to play with.
# Note: you MUST have previously created an admin user with the username `admin` for this command to work.
superset load-examples

# Start the Flask dev web server from inside your virtualenv.
# Note that your page may not have CSS at this point.
# See instructions below on how to build the front-end assets.
superset run -p 8088 --with-threads --reload --debugger --debug

または、Makefileを介してインストールできます。

# Create a virtual environment and activate it (recommended)
$ python3 -m venv venv # setup a python3 virtualenv
$ source venv/bin/activate

# install pip packages + pre-commit
$ make install

# Install superset pip packages and setup env only
$ make superset

# Setup pre-commit only
$ make pre-commit

注:FLASK_APP env varは、現在`.flaskenv`を介して制御されているため、設定する必要はありませんが、必要な場合は`superset.app:create_app()`に設定する必要があります。

新しいReactを搭載したフロントエンドアセットと同じ方法で構築されていないFAB管理テンプレートに変更を加えた場合は、`--with-threads`引数なしでアプリを起動する必要があります。`superset run -p 8088 --reload --debugger --debug`のようにします。

依存関係

新しい要件を追加したり、既存の要件を更新したりする場合(`setup.py`の`install_requires`セクションに従って)、CI、テストなどに対してビルドが決定論的であることを保証するために、Pythonの依存関係を再コンパイル(フリーズ)する必要があります。これは、以下によって実現できます。

$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install -r requirements/development.txt
$ pip-compile-multi --no-upgrade

単一のパッケージのバージョン番号をアップグレードする場合は、`-P`フラグを付けて`pip-compile-multi`を実行する必要があります。

$ pip-compile-multi -P my-package

`setup.py`および`requirements/*.in`で定義されている制限に従ってすべての依存関係を最新の状態にするには、フラグなしで`pip-compile-multi`を実行します。

$ pip-compile-multi

これは定期的に行う必要がありますが、ユニットテストと統合テストでは検出されない重大な変更が導入されていないことを確認するために、アプリケーションの徹底的な手動テストを行うことをお勧めします。

ブラウザコンソールへのロギング

この機能は Python 3 でのみ利用可能です。アプリケーションをデバッグする際、ConsoleLog パッケージを使用して、サーバーログをブラウザコンソールに直接送信できます。config.py または superset_config.py に以下を追加して、アプリを変更する必要があります。

from console_log import ConsoleLog

def FLASK_APP_MUTATOR(app):
app.wsgi_app = ConsoleLog(app.wsgi_app, app.logger)

次に、適切なワーカータイプを使用して WSGI サーバーを実行していることを確認してください。

gunicorn "superset.app:create_app()" -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -b 127.0.0.1:8088 --reload

オブジェクトを含む、あらゆるものをブラウザコンソールに記録できます。

from superset import app
app.logger.error('An exception occurred!')
app.logger.info(form_data)

フロントエンド

Web UI を正しく表示するには、フロントエンドアセット(TypeScript、JavaScript、CSS、および画像)をコンパイルする必要があります。superset-frontend ディレクトリには、NPM で管理されるすべてのフロントエンドアセットが含まれています。一部のレガシーページでは、Flask-Appbuilder にバンドルされた追加のフロントエンドアセット(jQuery や Bootstrap など)があることに注意してください。これらは NPM によって管理されておらず、将来的に段階的に廃止される可能性があります。

前提条件

nvm と node

まず、以下のバージョンの Node.js と npm を使用していることを確認してください。

  • Node.js: バージョン 20
  • npm: バージョン 10

node 環境の管理には、nvm を使用することをお勧めします。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash

in case it shows '-bash: nvm: command not found'
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

cd superset-frontend
nvm install --lts
nvm use --lts

または、Catalina 以降の macOS のデフォルトシェル zsh を使用している場合は、以下を試してください。

sh -c "$(curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh)"

興味のある方は、Superset フロントエンドの実行に必要な node バージョンに自動的に切り替える avn を試してみることもできます。

依存関係のインストール

package.json に記載されているサードパーティの依存関係を、以下を使用してインストールします。

# From the root of the repository
cd superset-frontend

# Install dependencies from `package-lock.json`
npm ci

Superset は、scarf-js npm パッケージと分析ピクセルを含む、インストールされているバージョンに関するテレメトリ/分析をキャプチャするために Scarf を使用していることに注意してください。このドキュメントの他の場所で説明されているように、Scarf はセキュリティ/リリース戦略のために集計統計を収集し、PII をキャプチャ/保持しません。こちらscarf-js パッケージとオプトアウトのさまざまな方法について読むことができますが、SCARF_ANALYTICS 環境変数を false に設定することで npm パッケージ *と* ピクセルの両方をオプトアウトするか、superset-frontent/package.json にこの設定を追加することでピクセルをオプトアウトできます。

// your-package/package.json
{
// ...
"scarfSettings": {
"enabled": false
}
// ...
}

アセットのビルド

ビルドできるアセットには 3 つのタイプがあります。

  1. npm run build: 本番環境アセット、CSS/JSS は縮小化および最適化されています。
  2. npm run dev-server: ローカル開発アセット、ソースマップとホットリロードをサポートしています。
  3. npm run build-instrumented: Cypress テストからコードカバレッジを収集するためのインストゥルメント化されたアプリケーションコード。

上記のコマンドの使用中に、ファイルウォッチャーの制限に関連するエラーが発生した場合

Error: ENOSPC: System limit for number of file watchers reached

このエラーは、システムによって監視されているファイルの数が制限に達したために発生します。inotify ウォッチの数値を増やすことで、このエラーに対処できます。

現在のウォッチの最大値は、以下で確認できます。

cat /proc/sys/fs/inotify/max_user_watches

/etc/sysctl.conf ファイルを編集して、この値を増やします。値は、システムメモリに基づいて決定する必要があります(詳細については、この StackOverflow の回答を参照してください)

エディタでファイルを開き、最後にウォッチの最大値を指定する行を追加します。

fs.inotify.max_user_watches=524288

ファイルを保存してエディタを終了します。変更が成功したことを確認するには、次のコマンドを実行して、sysctl.conf から max_user_watches の更新された値を読み込みます。

sudo sysctl -p

Webpack 開発サーバー

開発サーバーはデフォルトで https://:9000 で起動し、バックエンドリクエストを https://:8088 にプロキシします。

そのため、典型的な開発ワークフローは次のとおりです。

  1. Superset をローカルで実行 Flask を使用してポート 8088 で実行しますが、直接アクセスしないでください。

    # Install Superset and dependencies, plus load your virtual environment first, as detailed above.
    superset run -p 8088 --with-threads --reload --debugger --debug
  2. 並行して、Webpack 開発サーバーをポート 9000 でローカルに実行します。

    npm run dev-server
  3. Web ブラウザで https://:9000 (Flask *ではなく* Webpack サーバー) にアクセスします。これにより、Webpack 開発サーバーからのホットリロードフロントエンドアセットが使用され、バックエンドクエリが Flask/Superset にリダイレクトされます。Superset コードベース (フロントエンドまたはバックエンド) に加えられた変更は、ブラウザにライブで反映されます。

Webpack サーバーの設定を変更することができます。

# Start the dev server at https://:9000
npm run dev-server

# Run the dev server on a non-default port
npm run dev-server -- --port=9001

# Proxy backend requests to a Flask server running on a non-default port
npm run dev-server -- --env=--supersetPort=8081

# Proxy to a remote backend but serve local assets
npm run dev-server -- --env=--superset=https://superset-dev.example.com

--superset= オプションは、本番環境の問題をデバッグする場合や、ファイアウォールの背後に Superset をセットアップする必要がある場合に役立ちます。Flask サーバーを別の環境で実行しながら、アセットをローカルでビルドし続けることができ、最高の開発エクスペリエンスを実現できます。

その他の npm コマンド

または、役立つ他の NPM コマンドがあります。

  1. npm run build-dev: 開発モードでアセットをビルドします。
  2. npm run dev: ウォッチモードで開発アセットをビルドし、ファイルが変更されると自動的に再ビルドします。

Docker (docker compose)

ドキュメントはこちらをご覧ください。

NPM パッケージの更新

規定の方法で npm を使用し、npm で規定されているベストプラクティスに従って superset-frontend/package-lock.json が更新されていることを確認してください。

機能フラグ

Superset は、サーバー全体の機能フラグシステムをサポートしており、機能の段階的な開発を容易にします。新しい機能フラグを追加するには、次のように superset_config.py を変更します。

FEATURE_FLAGS = {
'SCOPED_FILTER': True,
}

クライアントコードで同じフラグを使用する場合は、@superset-ui/core の FeatureFlag TypeScript 列挙型にも追加します。例えば、

export enum FeatureFlag {
SCOPED_FILTER = "SCOPED_FILTER",
}

superset/config.py には DEFAULT_FEATURE_FLAGS が含まれており、これは superset_config.py の FEATURE_FLAGS で指定されたものによって上書きされます。例えば、superset/config.pyDEFAULT_FEATURE_FLAGS = { 'FOO': True, 'BAR': False }superset_config.pyFEATURE_FLAGS = { 'BAR': True, 'BAZ': True } は、{ 'FOO': True, 'BAR': True, 'BAZ': True } の組み合わせ機能フラグになります。

各フラグの使いやすさの現在の状態 (安定版とテスト版など) は、RESOURCES/FEATURE_FLAGS.md にあります。

Git Hooks

Supersetは、pre-commitのおかげでGitプリコミットフックを使用します。インストールするには、以下を実行します。

pip3 install -r requirements/development.txt
pre-commit install

git commit を実行すると、一連のチェックが実行されるようになりました。

または、tox 経由で pre-commit を実行することもできます。

tox -e pre-commit

または、pre-commit を手動で実行することによって

pre-commit run --all-files

リンティング

Python

リンティングには Pylint を使用しており、これは以下を介して呼び出すことができます。

# for python
tox -e pylint

ベストプラクティスに関しては、いくつかの例外はありますが、グローバルに (.pylintrc 経由で) またはファイルヘッダー内のトップレベルで Pylint メッセージを無差別に無効にすることは避けてください。無効化はインラインで行う必要があります。これは、問題のマスキングを防ぎ、メッセージが無効化された理由のコンテキストを提供するためです。

さらに、Python コードは Black を使用して自動フォーマットされ、これは pre-commit フックとして構成されています。多数のエディタ統合もあります。

TypeScript

cd superset-frontend
npm ci
# run eslint checks
npm run eslint -- .
# run tsc (typescript) checks
npm run type

vscode で eslint 拡張機能を使用する場合は、ワークスペースの settings.json ファイルに以下を配置します。

"eslint.workingDirectories": [
"superset-frontend"
]

テスト

Python テスト

すべての Python テストは、標準化されたテストフレームワークである tox で実行されます。すべての Python テストは、tox の環境を使用して、以下を介して実行できます。

tox -e <environment>

例えば、

tox -e py38

または、単一ファイル内のすべてのテストを以下を介して実行できます。

tox -e <environment> -- tests/test_file.py

または、特定のテストの場合は、以下を介して実行できます。

tox -e <environment> -- tests/test_file.py::TestClassName::test_method_name

テスト環境では、SQLite データベースを定義するために一時ディレクトリが使用され、テストコマンドのグループが呼び出されるたびにクリアされることに注意してください。

また、Superset コードベースには、Python 統合テストを実行するためのユーティリティスクリプトが含まれています。readme はこちらにあります

例えば、すべての統合テストを実行するには、ルートディレクトリからこのスクリプトを実行します。

scripts/tests/run.sh

pytest を使用して './tests/unit_tests' にあるユニットテストを実行できます。これは、データベースのセットアップを必要としない分離されたテストを実行するための簡単な方法です。

pytest ./link_to_test.py

フロントエンドテスト

TypeScript/JavaScript のテストには、JestEnzyme を使用しています。テストは以下を使用して実行できます。

cd superset-frontend
npm run test

単一のテストファイルを実行するには

npm run test -- path/to/file.js

統合テスト

統合テストには Cypress を使用しています。テストは tox -e cypress で実行できます。Cypress を開き、最初にテストサーバーをセットアップして実行してテストを調べます。

export SUPERSET_CONFIG=tests.integration_tests.superset_test_config
export SUPERSET_TESTENV=true
export CYPRESS_BASE_URL="https://:8081"
superset db upgrade
superset load_test_users
superset load-examples --load-test-data
superset init
superset run --port 8081

Cypress テストを実行します。

cd superset-frontend
npm run build-instrumented

cd cypress-base
npm install

# run tests via headless Chrome browser (requires Chrome 64+)
npm run cypress-run-chrome

# run tests from a specific file
npm run cypress-run-chrome -- --spec cypress/e2e/explore/link.test.ts

# run specific file with video capture
npm run cypress-run-chrome -- --spec cypress/e2e/dashboard/index.test.js --config video=true

# to open the cypress ui
npm run cypress-debug

# to point cypress to a url other than the default (https://:8088) set the environment variable before running the script
# e.g., CYPRESS_BASE_URL="https://:9000"
CYPRESS_BASE_URL=<your url> npm run cypress open

superset-frontend/cypress_build.sh を参照してください。

または、テストに docker compose 環境を使用することもできます。

/etc/hosts ファイルに 127.0.0.1 db という行を追加していることを確認してください。

Docker 環境をすでに起動している場合は、次のコマンドを使用して、新しいデータベースインスタンスを確保してください。docker compose down -v

環境を起動します。

CYPRESS_CONFIG=true docker compose up

バックエンドとフロントエンドがポート 8088 で提供されます。

Cypress テストを実行します。

cd cypress-base
npm install
npm run cypress open

サーバーアプリのデバッグ

ローカル

VSCode を使用してローカルでデバッグするには、.vscode/launch.json などの起動構成ファイルを構成できます。

{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "superset",
"SUPERSET_ENV": "development"
},
"args": ["run", "-p 8088", "--with-threads", "--reload", "--debugger"],
"jinja": true,
"justMyCode": true
}
]
}

Raw Docker (docker composeなし)

dockerコンテナ内で実行されているFlaskアプリをデバッグするには、以下の手順に従ってください。これは、最小限のSuperset Webサーバーを実行することに注意してください。

まず、以下の内容を./docker-compose.yamlファイルに追加します。

superset:
env_file: docker/.env
image: *superset-image
container_name: superset_app
command: ["/app/docker/docker-bootstrap.sh", "app"]
restart: unless-stopped
+ cap_add:
+ - SYS_PTRACE
ports:
- 8088:8088
+ - 5678:5678
user: "root"
depends_on: *superset-depends-on
volumes: *superset-volumes
environment:
CYPRESS_CONFIG: "${CYPRESS_CONFIG}"

通常通りSupersetを起動します。

docker compose up

必要なライブラリとパッケージをdockerコンテナにインストールします。

superset_appコンテナに入ります。

docker exec -it superset_app /bin/bash
root@39ce8cf9d6ab:/app#

コンテナ内で以下のコマンドを実行します。

apt update
apt install -y gdb
apt install -y net-tools
pip install debugpy

FlaskプロセスのPIDを見つけます。必ず最初のPIDを使用してください。Flaskアプリは、Pythonコードを変更するたびにサブプロセスを再生成します。そのため、最初のPIDを使用することが重要です。

ps -ef

UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:09 ? 00:00:00 bash /app/docker/docker-bootstrap.sh app
root 6 1 4 14:09 ? 00:00:04 /usr/local/bin/python /usr/bin/flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
root 10 6 7 14:09 ? 00:00:07 /usr/local/bin/python /usr/bin/flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0

実行中のFlaskプロセスにdebugpyをインジェクトします。この場合はPID 6です。

python3 -m debugpy --listen 0.0.0.0:5678 --pid 6

debugpyがポート5678でリッスンしていることを確認します。

netstat -tunap

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5678 0.0.0.0:* LISTEN 462/python
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 6/python

これで、デバッガをプロセスにアタッチする準備ができました。VSCodeを使用すると、起動設定ファイル.vscode/launch.jsonを次のように設定できます。

{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Superset App in Docker Container",
"type": "python",
"request": "attach",
"connect": {
"host": "127.0.0.1",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
]
}
]
}

VSCodeは、すぐにブレークポイントで停止しません。PID 6にアタッチしましたが、まだサブプロセスを認識していません。デバッガを「起動」するには、Pythonファイルを修正する必要があります。これにより、Flaskがコードをリロードし、新しいサブプロセスを作成します。この新しいサブプロセスはVSCodeによって検出され、ブレークポイントがアクティブになります。

Kubernetes環境でのサーバーアプリのデバッグ

Kubernetesクラスタ内のPODで実行されているFlaskをデバッグするには、podがrootとして実行され、SYS_TRACE機能が付与されていることを確認する必要があります。これらの設定は、本番環境では使用しないでください。

  securityContext:
capabilities:
add: ["SYS_PTRACE"]

詳細については、(コンテナの機能の設定)[https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container]を参照してください。

podがrootとして実行され、SYS_PTRACE機能を持っている場合、Flaskアプリをデバッグできます。

docker composeと同じ手順に従うことができます。podに入り、必要なライブラリとパッケージ(gdb、netstat、debugpy)をインストールします。

Kubernetes環境では、多くの場合、ノードはクラスタの外部からアドレス指定できません。そのため、VSCodeはKubernetesノードのポート5678にリモート接続できません。これを行うには、ポート5678をローカルマシンに転送するトンネルを作成する必要があります。

kubectl port-forward  pod/superset-<some random id> 5678:5678

これで、上記と同じ設定でVSCodeデバッガを起動できます。VSCodeは、kubectlによってリモートのKubernetes PODに転送される127.0.0.1:5678に接続します。

Storybook

Supersetには、さまざまなSupersetコンポーネントとそのバリエーションのレイアウト/スタイルをプレビューするためのStorybookが含まれています。Storybookを開いて表示するには

cd superset-frontend
npm run storybook

Supersetに新しいReactコンポーネントを提供する場合は、コンポーネントのjsx/tsxファイルと一緒にStoryを追加してみてください。

ヒント

新しいデータソースの追加

  1. データソースのモデルとビューを作成し、supersetフォルダの下に追加します。たとえば、クラスタ、データソース、カラム、メトリックのモデルを含む新しいmy_models.pyと、clustermodelviewとdatasourcemodelviewを含むmy_views.pyなどです。

  2. 新しいモデルのDBマイグレーションファイルを作成します。

  3. config.pyで、データソースモデルとそれがどのモジュールからのものであるかを追加するために、この変数を指定します。

    例えば

    ADDITIONAL_MODULE_DS_MAP = {'superset.my_models': ['MyDatasource', 'MyOtherDatasource']}

    これは、ソースレジストリにsuperset.my_modelsモジュール内のMyDatasourceとMyOtherDatasourceを登録することを意味します。

ビジュアライゼーションプラグイン

新しいプラグインを作成するというトピックは、それをコントリビュートするかどうかにかかわらず、ドキュメントこのブログ記事で詳しく説明されています。

Supersetにプラグインを提供するには、プラグインが以下の基準を満たしている必要があります。

  • プラグインは、特定の特殊なユースケースではなく、コミュニティ全体に適用できる必要があります。
  • プラグインはTypeScriptで記述する必要があります。
  • プラグインには、十分なユニット/E2Eテストが含まれている必要があります。
  • プラグインは、適切な名前空間を使用する必要があります。たとえば、フォルダ名はplugin-chart-whatever、パッケージ名は@superset-ui/plugin-chart-whateverなどです。
  • プラグインは、ThemeProviderによって渡されるEmotionを介してテーマ変数を使用する必要があります。
  • プラグインは、適切なエラー処理を提供する必要があります(データが返されない、データ形式が正しくない、コントロールが無効など)。
  • プラグインには、入力済みのREADME.mdファイル形式のドキュメントが含まれている必要があります。
  • プラグインには、意味のある一意のアイコンが必要です。
  • とりわけ、プラグインには、元の作成者からの*保守のコミットメント*が伴う必要があります。

提出物は、ケースバイケースで提出(または削除)が検討されます。

DBマイグレーションの追加

  1. 変更するモデルを変更します。この例では、Columnアノテーションモデルを追加します。

    コミット例

  2. マイグレーションファイルを生成します。

    superset db migrate -m 'add_metadata_column_to_annotation_model'

    これにより、migrations/version/{SHA}_this_will_be_in_the_migration_filename.pyにファイルが生成されます。

    コミット例

  3. DBをアップグレードします。

    superset db upgrade

    出力は次のようになります。

    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO [alembic.runtime.migration] Will assume transactional DDL.
    INFO [alembic.runtime.migration] Running upgrade 1a1d627ebd8e -> 40a0a483dd12, add_metadata_column_to_annotation_model.py
  4. ビューにカラムを追加します。

    新しいカラムがあるので、AppBuilder Modelビューに追加する必要があります。

    コミット例

  5. マイグレーションのdownメソッドをテストします。

    superset db downgrade

    出力は次のようになります。

    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO [alembic.runtime.migration] Will assume transactional DDL.
    INFO [alembic.runtime.migration] Running downgrade 40a0a483dd12 -> 1a1d627ebd8e, add_metadata_column_to_annotation_model.py

DBマイグレーションのマージ

2つのDBマイグレーションが衝突すると、次のようなエラーメッセージが表示されます。

alembic.util.exc.CommandError: Multiple head revisions are present for
given argument 'head'; please specify a specific target
revision, '<branchname>@head' to narrow to a specific head,
or 'heads' for all heads`

修正するには

  1. マイグレーションヘッドを取得します。

    superset db heads

    これにより、2つ以上のマイグレーションハッシュがリストされます。例:

    1412ec1e5a7b (head)
    67da9ef1ef9c (head)
  2. それらの1つを親リビジョンとして選択し、他のリビジョンのスクリプトを開き、Revisesdown_revisionを新しい親リビジョンに更新します。例:

    --- a/67da9ef1ef9c_add_hide_left_bar_to_tabstate.py
    +++ b/67da9ef1ef9c_add_hide_left_bar_to_tabstate.py
    @@ -17,14 +17,14 @@
    """add hide_left_bar to tabstate

    Revision ID: 67da9ef1ef9c
    -Revises: c501b7c653a3
    +Revises: 1412ec1e5a7b
    Create Date: 2021-02-22 11:22:10.156942

    """

    # revision identifiers, used by Alembic.
    revision = "67da9ef1ef9c"
    -down_revision = "c501b7c653a3"
    +down_revision = "1412ec1e5a7b"

    import sqlalchemy as sa
    from alembic import op

    または、superset db mergeを実行して、ヘッドをマージするためだけのマイグレーションスクリプトを作成することもできます。

    superset db merge {HASH1} {HASH2}
  3. DBを新しいチェックポイントにアップグレードします。

    superset db upgrade