2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

結論

個人的には、ただ検証でサクッと作るのであればstreamlitで、検証もしつつ汎用的なアプリを作成したいというのであれば、UIや状態管理の柔軟性もありマルチプラットフォームのFletという印象

あとめちゃくちゃ個人的にですが、Fletはflutterみたいな見た目になるのでなんか作ってて少し楽しいです
これをみてなんか少し気になるなーと思った方ぜひ遊んで見てください

比較項目

特徴/利点 Streamlit Flet
使いやすさ 非常に使いやすいが詳細なデザインはできない 使いやすいが詳細なデザインには時間がかかる
データサイエンスとの相性 高い 中程度
リアルタイム更新 あり なし
デプロイの容易さ 簡単 中程度
デザインの自由度 限定的 高い
多用途性 主にWebアプリ Webおよびデスクトップ/モバイルアプリ
コミュニティ ある程度豊富 やや限定的(これからに期待)
初期ロード時間 結構長い 短め
インタラクション速度 一般的に迅速だが、大量データで遅延 迅速だが、複雑なロジックで遅延
バックエンド処理 シングルスレッド、重い処理で影響あり シングルスレッド、非同期処理で改善可能
キャッシュ機能 あり 限定的
パフォーマンス最適化 st.cache、スクリプト分割 非同期処理、効率的レンダリング

Streamlit

Github

使いやすさ

フロントエンドは基本React.jsで記述されている(Vueでも作成可能)
色々コンポーネントが用意されているためそれらを選ぶだけでそれっぽいアプリを作成できる
webアプリで基本使用するようなもの(ボタン,Inputボックス,サイドバー,タブ)から、グラフやデータ可視化系、チャットなど様々な種類がある
基本データサイエンス系で使えそうなのが揃っているイメージ

データサイエンスとの相性

Pandas,Pyspark,Numpyなどと相性がいい
st.tablest.dataframeのコンポーネントでデータの編集/表示が直感的にできる

Matplotlib, Plotly, GraphVizなどと相性がいい
グラフや図の表示が比較的容易にできる

またStreamlitのコミュニティーによってNLUなど使えたり、アノテーションテキストを表示できたりもできる

リアルタイム更新

あらかじめプレースホルダー(st.empty())で領域のみ確保し動的に更新することで、グラフのリアルタイム更新などができる

デザインの自由度

コンポーネントがあらかじめ指定できるようにしたものは修正変更できるが、それ以外だと非常に限定的
基本色やサイズを変えたりできるくらいのイメージ

一応st.htmlst.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

などなど

パフォーマンス

Streamlitでは何かイベントが発生するたびにスクリプト全体が再実行され、処理によっては結構遅延が発生する
原因は、内部で状態管理とかできないので、最新の状態を保つために毎回再実行が走る
これによってスムーズに動作しない場合があり若干煩わしい。。。

参考

Flet

Github

使いやすさ

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

などなど

パフォーマンス

Fletは、状態管理を記述できるので不要な再レンダリングをなくせる

補足

FletでIOSの動作確認をiphoneで行う手順非常に簡単で新しい!

  1. app storeでFletのアプリをインストールする
  2. flet build ipaを実行
  3. QRコードが生成されるのでインストールしたFletのアプリで読み込む
  4. 自分で作成したアプリの動作確認ができる
2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?