「できるだけPythonだけでWEBアプリを作る第4弾」として複数のPython ライブラリの比較を行っていきたいと思います。
各ライブラリの使い方はそれぞれまとめている方がいらっしゃるので、比較結果についてのみをまとめます。
第1弾, 第2弾, 第3弾記事は以下の通りです。
できるだけPythonだけでWEBアプリを作る①(Python + AWS + HTML/Java) - まるっとワーク
できるだけPythonだけでWEBアプリを作る②(Python flask/zappa + AWS) - まるっとワーク
できるだけPythonだけでWEBアプリを作る③(Python Streamlit) - まるっとワーク
目次
PythonでWEBアプリが作れるライブラリについて
丁寧にまとめて下さっている方がいらっしゃいました。(感謝です)
まさかこんなにあるなんて・・・最近まで全然知りませんでした。
これらはPyhtonのみでWebアプリが作れるライブラリであり、html, cssを書く必要があるFlask, Djangoは入っていませんね。
zenn.dev
ご参考↓
- FlaskFlaskへようこそ — Flask Documentation (2.2.x)
- DjangoThe web framework for perfectionists with deadlines | Django
今回はまとめて下さっているライブラリの中で、GitHub star数が相対的に多めである4つ(Streamlit, Gradio, Dash, Reflex)の比較を行いました。
ライブラリの比較結果
比較検討のために作成したコードは、以下 Githubで公開をしています。
github.com
結果はかなり所感が入っているので、ご注意下さい。
まとめると、以下の通りの使い分けになると思っています。
とりあえずシンプルなUIでよい!素早くアプリを出したい!:Streamlit, Gradio
UIのカスタマイズをしたい!オリジナリティを出す必要がある!:Dash, Reflex
比較結果を表でまとめています。
観点 | 説明 | Streamlit | Gradio | Dash | Reflex |
用途 | フレームワークの主な利用シナリオ。 | データ分析や機械学習モデルの可視化、プロトタイピング、簡単なWebアプリケーション | 機械学習モデルのデプロイ、モデルの入力と出力の簡単な設定 | データダッシュボード、高度な可視化、企業向けアプリケーション | リアルタイムアプリケーション、コラボレーション、高度な対話型アプリケーション |
インタラクティブ性 | ユーザーとの対話性能力(反応性)。 | 高い | 中程度 | 高い | 高い |
UIカスタマイズ | ユーザーインターフェースの外観と振る舞いを調整する能力。 | 限定的(デフォルトのウィジェットをカスタマイズ可能) | 限定的(デフォルトのウィジェットをカスタマイズ可能 | カスタマイズ可能(HTML / CSS / JavaScriptを使用してUIをカスタマイズ) | カスタマイズ可能(HTML / CSS / JavaScriptを使用してUIをカスタマイズ) |
シンプルさ | 使用の簡便さ。 | 高い(シンプルなコードでアプリケーションを構築できる) | 高い(簡潔なAPIでモデルデプロイが可能) | 中程度(高度なカスタマイズが必要な場合がある) | 中程度(カスタマイズが必要な場合がある) |
コミュニティサポート | オンラインコミュニティのサポートとリソースの利用可能性。 | 高い | 中程度 | 高い | 中程度 |
ドキュメンテーション | フレームワークの公式ドキュメントとチュートリアルの品質と充実度。 | 良い | 良い | 良い | 良い |
それぞれ特徴がありますが、シンプルなUIで良いからとりあえずアプリを出したいということであれば、Streamlit, Gradioという選択になり、後はカスタマイズの希望に応じて、Dash, Reflex, Flask, Django等・・・という感じかなと
GUI比較(ご参考程度ですが)
同じ目的のアプリを作成した時の見た目の差の比較です。
ただし、見た目についての調整はほとんどしておらず、、、最初からある程度デザイン性があるStreamlit, Gradio, Reflexの方が見た目は良いかもですね。
Streamlit
Gradio
Dash
Reflex
まとめ
簡単ですが、以上です。
PythonだけでWEBアプリを作ることができるライブラリがこんなにあるなんて、知りませんでした。
これだけあると、どれを使えば良いのか分からなくなってくるので、特徴などを比較しながら適切に選択していきたいなと思います。