コンテンツにスキップ

Dashアプリ

Dashアプリを使うと、インタラクティブな Plotly Dash アプリケーション(コールバック、チャート、データグリッド(dash-ag-grid、dash-mantine-components))を PlaidCloud から直接公開できます。Dashアプリは、Panel アプリと並んでマイPanelアプリ画面で管理します。各行には、ランタイム、ビルドステータス、URL が表示されます。

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 レイヤーはありません。

Dashアプリのエントリファイルの名前は app.py にし、server を公開する必要があります。規約はこれだけです。

from dash import Dash
app = Dash(__name__) # picks up DASH_URL_BASE_PATHNAME from the platform automatically
server = 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アプリ
フレームワーク HoloViz Panel Plotly Dash
ランタイム WASM(ブラウザー内)またはサーバー サーバーのみ
ID モデル ユーザーごとの SSO(サーバーアプリ) ユーザーごとの SSO
ゼロへのスケールダウン サーバーアプリのみ あり
デザイン/テーマの設定 あり(FAST / デフォルト) なし。独自のコンポーネントでスタイルを設定
アプリごとのアクセスリスト なし。ワークスペースの SSO ゲート なし。ワークスペースの SSO ゲート