Dashアプリ
Dashアプリを使うと、インタラクティブな Plotly Dash アプリケーション(コールバック、チャート、データグリッド(dash-ag-grid、dash-mantine-components))を PlaidCloud から直接公開できます。Dashアプリは、Panel アプリと並んでマイPanelアプリ画面で管理します。各行には、ランタイム、ビルドステータス、URL が表示されます。
Dashの位置づけ
Section titled “Dashの位置づけ”Dashアプリはサーバー型 Panel アプリとまったく同じ方法でホストされます。Git リポジトリのブランチを PlaidCloud に指定すると、コードがコンテナーにビルドされます。コンテナーはレプリカ数ゼロで待機し、最初のリクエストで起動してリクエストに応答し、アイドル状態になるとゼロにスケールダウンします。Dash 用の別の「WASM」ランタイムはなく、すべての Dash アプリはサーバーアプリです。
アプリを HoloViz Panel ではなく Plotly Dash で作成する場合は、Dashアプリを選択します。たとえば、既存の Dash コードベースがある場合や、チームが Dash のコールバックモデルと dash-ag-grid / dash-mantine-components のエコシステムを好む場合です。新規に始めるときに特にこだわりがなければ、代替としてPanelアプリをご覧ください。
サーバー型 Panel アプリで利用できる機能は、すべて Dash アプリでも利用できます。
- ユーザーごとの ID。 各閲覧者はプラットフォームのシングルサインオンでサインインし、アプリがデータを読み取るすべての呼び出しはその閲覧者として実行されます。これはデータとサインイン中ユーザーの読み取りと同じモデルで、Dash 独自のヘルパー API を使います。詳しくはDashアプリでのデータとサインイン中ユーザーの読み取りをご覧ください。
- ゼロへのスケールダウン。 設定したアイドル時間が経過すると、アプリはレプリカ数ゼロまでスケールダウンし、次のリクエストで起動します。コールドスタート中は PlaidCloud の短い読み込み画面が表示されます。詳しくはDashアプリの使用をご覧ください。
- 自動再ビルド。 接続したブランチにプッシュするたびに、アプリが再ビルドされ再デプロイされます。
- ランタイムログとビルドログ。 どちらも、その行を生成したセッションの閲覧者が記録されます。
Dashアプリには次の2つの機能がありません。どちらも設計上のもので、Panel アプリにもない点は同じです。
- デザイン/テーマの設定がありません。 Panel の公開ダイアログにあるデザインオプション(FAST とデフォルト)は Panel 固有のものです。Dash アプリのスタイルは、選択したコンポーネント(
dash-mantine-components、カスタム CSS など)だけで決まるため、公開フォームに対応するフィールドはありません。 - アプリごとのアクセスリストがありません。 アクセスはワークスペースの SSO ゲートで制御されます。テナントにサインインしている人なら誰でもアプリを開けます(パブリックアクセスを許可を有効にした場合は、誰でも開けます)。どちらの種類のアプリにも、アプリごとの個別の ACL レイヤーはありません。
アプリの規約
Section titled “アプリの規約”Dashアプリのエントリファイルの名前は app.py にし、server を公開する必要があります。規約はこれだけです。
from dash import Dash
app = Dash(__name__) # picks up DASH_URL_BASE_PATHNAME from the platform automaticallyserver = app.server # the platform imports this and wires per-user sign-in for you- ファイル名を
app.pyにします。 PlaidCloud のランチャーは、アプリをappモジュールとしてインポートし、そのserverオブジェクトを読み取ります。そのため、エントリポイントにどのパス(リポジトリのルートまたはサブフォルダー)を設定しても、そのパスにあるファイルの名前はapp.pyである必要があります。 - モジュールレベルで
server = app.serverを公開します。 これがプラットフォームがインポートするオブジェクトです。 - サインインを自分で組み込む必要はありません。 プラットフォームが、すべてのリクエストをユーザーごとのシングルサインオンで自動的に保護します。ID を取得するためだけに
init_authを呼び出したりplaidcloud_dashをインポートしたりする必要はありません。(plaidcloud_dash.init_auth(server, url_base_pathname=os.environ["DASH_URL_BASE_PATHNAME"])を呼び出す従来のアプリも、そのまま動作します。この呼び出しは冪等であるため、プラットフォーム自身の組み込みと共存します。) Dash(__name__)にrequests_pathname_prefixやurl_base_pathnameを設定しないでください。 すべての Dash アプリは、必須の URL プレフィックス(/serve/<slug>/)のもとで提供され、プラットフォームが環境変数DASH_URL_BASE_PATHNAMEを通じて自動的に設定します。これは Dash 自身の標準の設定変数で、コンストラクターの引数より先に読み取られます。プレフィックスを明示的に渡すと Dash 自身の設定と競合し、アプリは起動に失敗します。Entry Pointはサブフォルダーを指定できます。 アプリを起動する前に、ホストはコンテナーの作業ディレクトリをエントリファイルのあるフォルダーに設定します。そのため、同じフォルダー内の兄弟モジュールのインポート(import data)やアプリ内の相対ファイルパスは、そのフォルダーを基準に解決されます。そのフォルダー内からpython app.pyを実行した場合と同じです。- インポート時にデータを読み取らないでください。 PlaidCloud の読み取りは、モジュールスコープではなくコールバックの内部で行ってください。詳しくはDashアプリでのデータとサインイン中ユーザーの読み取りをご覧ください。アプリのモジュールはコンテナーの起動時に、閲覧者がサインインする前に1回だけ実行されます。そこで接続やテーブルの読み取りを行っても、代理となる閲覧者がおらず、アプリは起動時に失敗します。
PlaidCloud は、アプリをスレッド化された gunicorn で実行します。1つのプロセスで同時に複数の閲覧者に対応するため、複数の人が同時にアプリを使うための追加の対応は不要です。
PanelとDashの選択
Section titled “PanelとDashの選択”| Panelアプリ | Dashアプリ | |
|---|---|---|
| フレームワーク | HoloViz Panel | Plotly Dash |
| ランタイム | WASM(ブラウザー内)またはサーバー | サーバーのみ |
| ID モデル | ユーザーごとの SSO(サーバーアプリ) | ユーザーごとの SSO |
| ゼロへのスケールダウン | サーバーアプリのみ | あり |
| デザイン/テーマの設定 | あり(FAST / デフォルト) | なし。独自のコンポーネントでスタイルを設定 |
| アプリごとのアクセスリスト | なし。ワークスペースの SSO ゲート | なし。ワークスペースの SSO ゲート |
次のステップ
Section titled “次のステップ”- PlaidCloud GitからDashアプリをデプロイする: 認証情報不要のマネージド接続を使って、リポジトリからアプリの提供までを行う全手順。
- Dashアプリでのデータとサインイン中ユーザーの読み取り: アプリを閲覧しているユーザーとして PlaidCloud のデータにクエリを実行します。
- Dashアプリの使用: ビルドステータス、アプリを開く、ログ、削除。