Streamlitの直感性に性能を加えたくて始めた、Pure Python Web UI Framework『Violit』
(github.com/violit-dev)こんにちは。
最近は退勤後や週末に、趣味でオープンソースを開発している現役の開発者です。
私は個人的にStreamlitの直感的な文法がとても好きで、周りのAI/Data研究者の友人たちも多く使っていることを知っています。ですが、プロジェクトが大きくなるほど性能面の問題で苦労しているのをよく見かけました。代替としてNiceGUIを勧めていたのですが、文法に慣れるのが少し難しいと感じる人が多かったです。(NiceGUIは最初、ドイツのある会社が自社で使うために作ったもののようですが……本当によくできたFrameworkだと思います。)
また、私はDataを見せるときには「審美性」もとても重要だと考えています。しかし、既存のPythonベースのGUI Frameworkでは、きれいに作り込むのが意外と難しいことが分かりました。特にNiceGUIの大きな欠点は、QuasarのMaterial Designから抜け出しにくいことです。
そこで「Streamlitのように簡単なのに、性能は速く、スタイリングも手軽なツール」を目標に、Violitを自分で作ることになりました。アーキテクチャの土台にはFastAPIとshoelace(Lit)があります。主な特徴は以下のとおりです。
💜 Violitの主な特徴
- Streamlitと90%似た直感性
- 既存のStreamlit利用経験があれば、ほぼ学習コストなしですぐ使えるように、APIを直感的に設計しました。
- O(1) Reactivity & Clean Syntax
- Streamlitのように、ボタンを1回押しただけでスクリプト全体が再実行されることはありません(No Re-run)。
@st.cacheのような最適化デコレータがなくても、単純な変数(state)宣言だけで、高速かつ簡潔な状態管理が可能です。(solid.jsのsignalの概念を参考にしました。)
- Easy Theming System
- 現在およそ30種類のプリセットテーマをサポートしており、すぐに美しいUIを適用できます。
- 近いうちに、ユーザーが直接テーマをCustomizationできる機能も追加する予定です。
- Hybrid Engine & Multi-Platform
- ユーザーの選択に応じて、HTMXを使ったLiteモードとWebSocketモードの両方に対応する柔軟なエンジンを搭載しました。最初は問題なくても、将来的にユーザーが増えたときにWebSocketのせいで遅くなるのではないかと考えたためです。
- コード修正なしで、WebサービスとDesktopアプリ(pywebview)モードを自由に切り替えられます。
このプロジェクトがどこまで拡張できるかは分かりませんが、うまく磨き上げれば、DjangoやRoRで作っていたMVPレベルのサービスを、Pythonだけでもっと素早く構築できるのではないかと少し期待しています。実際の可能性をお見せするために、Violitで作ったBlog構築のサンプルコードも含めてあります。
まだ完全な初期段階のv0.0.4(PoC)ですが、Redditなどではかなり好意的な反応を得ており、公開から2週間でスター200件を超えたので、勇気を出してここでも共有してみます。これまではほとんど常に会社の業務としてだけSW開発をしてきて……こうした完全公開のオープンソースプロジェクトは初めてです。個人的には、純粋なSW開発の楽しさを本当に強く感じています。
PythonでWeb UIなどを作る機会があれば、ぜひ一度のぞいていただけるとうれしいです。 :)
- GitHub Repo. : https://github.com/violit-dev/violit
- 日本語README相当 : https://github.com/violit-dev/violit/blob/main/README_KOR.md
- Blogサンプル : https://github.com/violit-dev/violit/…
16件のコメント
積極的に応援しています
応援を本当にありがとうございます。:) 一生懸命、楽しくアップデートしていきます。とても楽しいです。
最近、PyWebViewを使って業務自動化を試してみたのですが、デスクトップなのでWebをどうするか悩んでいました……。PyWebViewでこれを使えば、Webでも簡単に利用できるのでしょうか?
PyWebViewで開発されたものを、Violitを使ってWebサイトへ簡単に移行できますか?
ご質問がやや具体的ではないように感じたので、改めてお伺いします。
現在、
pywebviewでデスクトップアプリを作って使っています。Violit が web/desktop(
pywebview) のマルチプラットフォームに対応しているとのことで気になっています。pywebviewベースのアプリを Violit の構造にマイグレーションするのは、現実的に見て容易なほうでしょうか?実際のサービス規模でも、構造的に同じコードベースを維持したまま Web サービスへ拡張できる設計なのかが気になります。(
pywebview→ Web デプロイ構成の観点です)こんにちは。移行の難易度は、既存のAppとしてどのような構成で作られているかによって大きく変わります。
もし既存アプリが、別個のWebサーバー(FastAPI など)なしで、pywebview の js api やローカル HTML の読み込み方式だけで実装されていた場合、Web 配布のためには通信レイヤーを最初から組み直す必要があります。したがって、pywebview で手軽に書いたコードをそのまま Web に置き換えるのは難しいかもしれません。
この点は violit とは無関係だと考えていただいて大丈夫です。violit は pywebview で作った既存 App を置き換えるというより、violit で作れば、そもそも Web と pywebview(desktop)の両方を同時にサポートするよう設計されている、と捉えていただければと思います。
ありがとうございます。
以下からすぐにお試しいただけるデモWebページとDocumentationをご用意しています。
一度ご確認いただければと思います。 :)
ちなみに、2つのWebsiteはいずれもViolitで作られています。
ありがとうございます。会社の業務をこれでやってみようか検討中です!!
はい、ありがとうございます。ぜひお使いいただいて、不便な点がありましたらお知らせください。
テストコードとドキュメントの補強がもう少し必要そうです。
以下ですぐお試しいただけるデモWebページとDocumentationをご用意してあります。
一度ご確認いただければと思います。 :)
なお、2つのWebsiteはどちらもViolitで作られています。
はい、良いフィードバックをありがとうございます。現在の実装はPOCレベルで、public interfaceやdesignレベルでbreaking changesが多い状況のため、0.5からテストコードを入れるのが現在の計画です。
おっしゃる通り、まずはホームページの公開とdocumentation作業を進めており、まもなく公開できそうです。やはり最初のターゲットが既存のStreamlitユーザーなので、文法がほぼ同じであることから、文書化の必要性をやや低く感じていた面はありました。
もう少しだけお待ちください〜
すぐに試せるように、デモWebページがあるといいですね
以下ですぐお試しいただけるデモWebページとDocumentationをご用意しています。
一度ご確認いただければと思います。 :)
参考までに、2つのWebsiteはいずれもViolitで作られています。
はい、ご意見ありがとうございます。まだ初期バージョンのためホームページはありませんが、ホームページを作ることになれば、おそらくWeb上でさまざまなウィジェットを試していただけるようになると思います。何よりも今は、他の代替手段よりも美しく作れることを強調するために、設計を少しずつ変更しています。 :)