結論
個人的には、ただ検証でサクッと作るのであればstreamlitで、検証もしつつ汎用的なアプリを作成したいというのであれば、UIや状態管理の柔軟性もありマルチプラットフォームのFletという印象
あとめちゃくちゃ個人的にですが、Fletはflutterみたいな見た目になるのでなんか作ってて少し楽しいです
これをみてなんか少し気になるなーと思った方ぜひ遊んで見てください
比較項目
特徴/利点 | Streamlit | Flet |
---|---|---|
使いやすさ | 非常に使いやすいが詳細なデザインはできない | 使いやすいが詳細なデザインには時間がかかる |
データサイエンスとの相性 | 高い | 中程度 |
リアルタイム更新 | あり | なし |
デプロイの容易さ | 簡単 | 中程度 |
デザインの自由度 | 限定的 | 高い |
多用途性 | 主にWebアプリ | Webおよびデスクトップ/モバイルアプリ |
コミュニティ | ある程度豊富 | やや限定的(これからに期待) |
初期ロード時間 | 結構長い | 短め |
インタラクション速度 | 一般的に迅速だが、大量データで遅延 | 迅速だが、複雑なロジックで遅延 |
バックエンド処理 | シングルスレッド、重い処理で影響あり | シングルスレッド、非同期処理で改善可能 |
キャッシュ機能 | あり | 限定的 |
パフォーマンス最適化 | st.cache、スクリプト分割 | 非同期処理、効率的レンダリング |
Streamlit
使いやすさ
フロントエンドは基本React.jsで記述されている(Vueでも作成可能)
色々コンポーネントが用意されているためそれらを選ぶだけでそれっぽいアプリを作成できる
webアプリで基本使用するようなもの(ボタン,Inputボックス,サイドバー,タブ)から、グラフやデータ可視化系、チャットなど様々な種類がある
基本データサイエンス系で使えそうなのが揃っているイメージ
データサイエンスとの相性
Pandas,Pyspark,Numpyなどと相性がいい
st.table
やst.dataframe
のコンポーネントでデータの編集/表示が直感的にできる
Matplotlib, Plotly, GraphVizなどと相性がいい
グラフや図の表示が比較的容易にできる
またStreamlitのコミュニティーによってNLUなど使えたり、アノテーションテキストを表示できたりもできる
リアルタイム更新
あらかじめプレースホルダー(st.empty()
)で領域のみ確保し動的に更新することで、グラフのリアルタイム更新などができる
デザインの自由度
コンポーネントがあらかじめ指定できるようにしたものは修正変更できるが、それ以外だと非常に限定的
基本色やサイズを変えたりできるくらいのイメージ
一応st.html
やst.markdown
でアプリにhtmlを埋め込むことはできる
けど、iframe化されていないのでjavascriptの実行はできない
多用途性
主にデータサイエンス系のWebアプリになる
その他の用途でwebアプリを作成するとなると結構苦労するので結局Reactで書いたほうが早くね?とういう状態になる
デプロイ環境
- 公式紹介
- Streamlit Community Cloud
-
Snowflake
- 使ったことないけど、Snowsight(SnowflakeのGUI画面)上でStreamlitのアプリ開発と実行ができるらしい
- 主要クラウドの場合
- AWS
- Elastic Beanstalk または ECS (Fargate)
- GCP
- App Engine または Cloud Run
- Azure
- Azure App Service または Azure Container Instances
- AWS
などなど
パフォーマンス
Streamlitでは何かイベントが発生するたびにスクリプト全体が再実行され、処理によっては結構遅延が発生する
原因は、内部で状態管理とかできないので、最新の状態を保つために毎回再実行が走る
これによってスムーズに動作しない場合があり若干煩わしい。。。
Flet
使いやすさ
UIはFlutterで構築されている
こちらも様々なコンポーネントが用意されているため、マテリアルデザインを採用しているためそれらを使うだけでもよりモダンで本格的なアプリが作成できる
streamlitはデータ扱う系のコンポーネントが多いのに対して、Fletは汎用的なアプリ作成に必要なコンポーネントが多い
コンポーネントのデモ画面(URL)
matplotlib, plotlyなども使える(URL)
streamlitほどではないが、データテーブルの表示も可能(URL)
データサイエンスとの相性
まだまだ発展途上という感じはあるが、現状でもある程度問題なく使えそう
streamlitと比べて、データの編集/表示はやや劣り、グラフや図の表示は同じくらい
リアルタイム更新
なし
もしグラフやテーブルデータの現在のデータを取得したい場合は更新ボタンを作成しイベントで再度データ取得する必要がある。
デザインの自由度
streamlitと同様にコンポーネントがあらかじめ指定できるようにされているものは修正できる
materialUIみたいな感じでsxでスタイル変えたりとかはできないけど、
大体ここ変えたいだろうみたいなものはプロパティで結構用意されている
ただ、streamlitよりデザインに幅がある
(基本的なデザインの修正だけではなく、状態管理やクリックやタップした時のイベントの設定、アニメーションなどもある)
Flet外部パッケージとして既存のflutterパッケージを使用できるらしい
多用途性
データサイエンス系以外にも様々なアプリを作成できる
また、Webだけではなくデスクトップ,IOS,Androidにも対応している
デプロイ環境
- 公式紹介
- 主要クラウドの場合
- AWS
- Elastic Beanstalk または ECS (Fargate)
- GCP
- App Engine または Cloud Run
- Azure
- Azure App Service または Azure Container Instances
- AWS
などなど
パフォーマンス
Fletは、状態管理を記述できるので不要な再レンダリングをなくせる
補足
FletでIOSの動作確認をiphoneで行う手順非常に簡単で新しい!
- app storeでFletのアプリをインストールする
-
flet build ipa
を実行 - QRコードが生成されるのでインストールしたFletのアプリで読み込む
- 自分で作成したアプリの動作確認ができる