3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python Web FrameworksAdvent Calendar 2024

Day 11

Streamlit使いがWriter Framework (旧Streamsync)を使ってみる

Posted at

背景

業務でStreamlitを使って簡単なPOC用Webアプリケーション開発、みたいなケースが多かったが、streamlitにはいくつか課題がある。

  • UIのカスタマイズ性
  • 何かイベントが走るたびにスクリプトが頭から走り直しになる

とくに2つ目には、アプリに機能が追加されればされるほど苦しめられるので本当になんとかならないかと常々感じている。

使ってみる

インストール

公式サイトを参考にいろいろやってみる

公式サンプルアプリインストール・実行してブラウザで表示までたどり着いた

image.png

UI編集

既存コンポーネントUI

画面上のサイドバーより右側の任意の場所を触ると、そこに該当するコンポーネントツリー上の場所までサイドバーがスクロールされ、該当箇所の要素編集GUIが出現する。
たとえば一番上の「Hacker Pigeons」をクリックしてみると、下図のようになる。
image.png

そしてCSSを変更してみる。該当の要素のデフォルトのアトリビュートについてはGUIでそのまま変更できる。

image.png

より詳しく変更するにはCustom CSS classesに、コード側で定義したcssクラスを入力するらしい。以下参考。

新規コンポーネント編集

サイドバーからColumn, Chatbotを検索して、component tree上の挿入したい箇所にドラッグアンドドロップ

image.png

また、コンポーネントを自分で作ることも可能な様子。

セッション管理

セッションの内容は画面上部の「State Explorer」から閲覧できる。

image.png

参考:コード上での定義記述

# STATE INIT

initial_state = wf.init_state({
    "main_df": _get_main_df(),
    "editable_df": _get_editable_df(),
    "editable_df_open_text": "<none>",
    "highlighted_members": _get_highlighted_members(),
    "random_df": _generate_random_df(),
    "hue_rotation": 180,
    "paginated_members": _get_paginated_members(0, 2),
    "paginated_members_page": 1,
    "paginated_members_total_items": len(_get_main_df()),
    "paginated_members_page_size": 2,
    "story": {
        "text": _get_story_text(),  # For display
    },
    "filter": {
        "min_length": 25,
        "min_weight": 300,
    },
    "metrics": {}
})

update(initial_state, None)

UI上でコンポーネントを動かしていても、裏でスクリプトが走り直し、みたいなことにはならない様子。
イベントハンドラがコンポーネントごとに細かく定義されているのもあり、Streamlitでのようにわざわざスクラッチで定義しなくて済むのは本当にありがたい限り。

参考:Chatbotのイベントハンドラ
fxのロゴがついているのは裏(pythonファイル側)で定義済み関数。
隠れてはいるが、他にあと2つほどイベントハンドラがある。
image.png

終わりに

こんな場合に刺さりそう

  • streamlitほどコンポーネントのバリエーションが多くなくていい
  • streamlitより見た目にこだわりたい
  • streamlitよりコーディング数を削減したい
  • 他のクラウドベンダーなどのサービスとしてのローコードツールは使用不可能な環境にいるけどローコード開発したい

課題、今後やりたいこと

  • コンポーネントが少なく、本格活用の場合はコンポーネントを自作しなければならない場合がありそう
  • cssの自由度がだいぶ高いので、できることが多い分使いこなそうとするとフロントエンドの知識もstreamlitよりは必要そう
  • (やりたいこと)実際にFunctionやコンポーネント自作して配置
  • (やりたいこと)複数ユーザーでアプリに接続するとどんな挙動になるのか
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?