📖

PythonでWebアプリ作れるやつのまとめ(12選)

2023/01/26に公開

概要

最近、pythonでUI部分も含めたWebアプリ作成ツールがいろいろ出てきているので、知っている限りでまとめてみようと思います。

各ツールの紹介

Mesop

https://github.com/google/mesop

  • Google製
  • ページ毎に関数を作ってデコレートするような感じで書く
  • LLM関係のデモがいくつか用意されており、LLMアプリ作るのに良さそう
  • Cloud RunとかHugging Face spacesにデプロイできる

FastUI

https://github.com/pydantic/FastUI

  • FastAPIのエンドポイントを定義する関数内にUIを定義する感じで書く

fastui

Taipy

https://github.com/Avaiga/taipy

  • 書き方としてはマークダウンっぽいテンプレート用いてUIを作成する感じ
  • DAGツールを簡単に作れるScenarioという機能がある

taipy

ReactPy

https://github.com/reactive-python/reactpy

  • その名の通りReactをPythonに移植したような感じのフレームワーク
  • サーバー側のバックエンドを色々選べる(FastAPI, Flask, Tornado, Jupyter, ...)
  • JSのReactコンポーネントを使い回せるようになってる(https://github.com/reactive-python/reactpy-js-component-template)
  • Reactっぽさを重視してる感じなので、グラフ周りのサポートは弱い

Solara

https://github.com/widgetti/solara

  • Reactライクに書ける大規模なアプリケーションへの適応も可能なフレームワーク
  • ipywidgetを使っており、jupyterやGoogle colab上への組み込みが容易
  • VegaLite/Echarts/Matplotlib/plotlyなどでのグラフ描画が可能
  • HooksやRoutingを扱うAPIが用意されていて確かにReactっぽい(https://solara.dev/api)
  • 一方でStreamlitに似せたAPIもあるため、Streamlitからの移行が容易
  • 専用のHosting serviceにデプロイできる

サンプル

solara

Reflex(旧Pynecone)

https://github.com/reflex-dev/reflex

  • Pyneconeっていう名前から変わったっぽい
  • 先発のStreamlitやDashと異なり、汎用的なアプリが作れることを目指している
  • UIの作り方がReactっぽい、コンポーネント指向、propsやstateという概念がある
  • CSSでスタイルを指定できる
  • Reactでライブラリ化されているコンポーネントをラップできる
  • O/Rマッパーが用意されて、データベースとのやりとりも記述できる
  • ReflexのHosting serviceにデプロイできる

DALL-Eを使った画像生成アプリのサンプル

dalle

Flet

https://github.com/flet-dev/flet

  • FlutterをUIに使用しているツール
  • Flutterを使用しているのでWebアプリだけでなくモバイルアプリやデスクトップアプリも作れる
  • GithubやGoogleを使った認証機能がビルドインされている
  • Fly.ioにホストできる

Fletで作られたTrelloクローン

trelli

Streamlit

https://github.com/streamlit/streamlit

Streamlitデモ動画

stremlit_overview

Dash

https://github.com/plotly/dash

  • データビジュアライゼーションに特化したツール
  • Plotly.js、React、Flaskを使用
  • 法人向けにDashエンタープライズというクラウドサービスでアプリの作成や管理が簡単にできる

データビジュアライゼーションのデモ

data_visualization1

Panel

https://github.com/holoviz/panel

  • データビジュアライゼーションに特化したツール
  • ベースとなるWebフレームワークを切り替えられる(Tornade/Flask/Django/FastAPI)
  • スタンドアロンアプリも作成可能
  • Jupyterに組み込める

データビジュアライゼーションのデモ

data_visualization2

NiceGUI

https://github.com/zauberzeug/nicegui

  • メッシュなどの3Dデータを扱うことができる
  • JSのコードを埋め込める
  • 既存のFastAPIにNiceGUIでUIを表示するエンドポイントを組み込める
  • カスタムのVueコンポーネントを組み込むことができる

NiceGUIのUIイメージ

gui

Gradio

https://github.com/gradio-app/gradio

  • 機械学習やデータサイエンスのデモ構築を目的としたUI作成ツール
  • 最近流行りのstable-diffution-webuiがこれを使用している
  • HuggingFaceにデプロイできる
  • UIにはSvelteを使用
  • JSのコードを組み込める
  • CSSでスタイルを設定できる

画像を使ったデモ

image_demo

まとめ

いろいろ調べてみて、以下のような感じで分類できるかなと思いました。

  • 汎用アプリ系
    • ReactPy(ほぼReact)
    • solara(大規模アプリ、Reactっぽい)
    • Reflex(コンポーネント指向、Reactっぽい)
    • Flet(モバイルもいける)
  • 機械学習/データサイエンスのデモ作る系
    • Stremlit(長く使われている、クラウドサービスもある)
    • Gradio(機械学習のタスク毎のデモが用意されていて分かりやすい、SD-Webuiのプラグイン作るならこれ)
    • NiceGUI(3Dとか、既存のFastAPIやVueコンポーネントを組み込める)
  • データビジュアライゼーション系
    • Dash
    • Panel

Discussion