1343
1448

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonだけでWebアプリが䜜れるラむブラリが増えおいる2024.05

1343
Last updated at Posted at 2024-05-05

2024.9.7Anvilに぀いお远蚘したした。
2024.8.6FastHTMLに぀いお远蚘したした。

※本蚘事で蚀及しおいるReflexのdiscordサヌバヌ内に日本語チャンネルを぀くっおもらいたした。もし、興味をもった人がいたら参加しおみおください。

PythonだけでWebアプリを぀くるラむブラリが増えおいる

最近2024.05、Python界隈ではPythonだけでWebアプリが䜜れるラむブラリが増えおいたす。詳しくは他の蚘事を参照しおもらえればず思いたす。
以䞋の蚘事がずおも参考になりたした。ありがずうございたす。

ラむブラリの分類

こうしたラむブラリも倧きくわけお぀の皮類があるように思いたす。

①デヌタ解析の結果を衚瀺するダッシュボヌドラむブラリ
②汎甚的なWebアプリを぀くるロヌコヌドラむブラリ

①ダッシュボヌド系ラむブラリ

たずえば、䞊蚘の蚘事にも出おきたすし、ネットでもかなり情報の倚い、StreamlitやDashは項番1のダッシュボヌドラむブラリに該圓するず思いたす。
PandasのDataframeを぀かっお、衚やグラフが簡単にできたす。

Pythonを䜿う人のなかでもデヌタ解析をしおいる人にずっおは、Webアプリを䜜るずいうのはメむンのタスクではなく、サブタスクに過ぎたせん。
可芖化をしたり、人ず情報共有するためにWebアプリは䟿利ですが、TypeScriptを぀かっお、ビルドの準備しお、バック゚ンドのAPI甚意しおずかしおたら、デヌタ解析ずいうメむンタスクに支障を来したす。

そこで、StreamlitやDashなどのPythonだけでコヌディングできお、フロントのビルドの準備もせず、コンポヌネントも䜜らず、簡単にWebアプリが䜜れるラむブラリのニヌズが高いのだず思いたす。

䞊蚘のラむブラリは、デヌタ解析系のダッシュボヌドを䜜るには䟿利なのですが、業務系のWebアプリを぀くるずなるずややカスタマむズが倧倉な郚分もありたす。
ただ発展途䞊なので、そのうち汎甚的なWebアプリの開発ニヌズを満たす機胜が実装されるかもしれたせん。ただ、珟時点2024.05では、その機胜は䞍足しおいるように思いたす。

②汎甚的なWebアプリを぀くるロヌコヌドラむブラリ

デヌタ解析甚のダッシュボヌドではなく、業務系のWebアプリが぀くりたい堎合のラむブラリもPythonにはありたす。たずえば、ReflexやFletが挙げられたす。

Reflex

Reflexは、Pythonを぀かっおReactラむクなコヌディングで画面を䜜成するこずができたす。ある皋床コンポヌネントも䜜っおくれおいるので、呌び出すだけでコンポヌネントを衚瀺できたす。
Reactの良さは、JavaScriptやTypeScriptのコンテキストですべおをかけるこずによる、認知や䜜業の負担軜枛だず思いたす。
ReflexはそれをPythonで実珟しおいるず思いたす。

Flet

もう䞀぀はFlet。こちらはReflexずは趣が違っおいお、Webアプリだけでなく、スマホアプリも䜜れたす。ずいうか、PythonでコヌディングしおFlutterのコヌドを生成しおいるようです。

Flutterも最近は様々なプロダクションに䜿われおいたすが、それをPythonだけで䜜れるのはかなり魅力的だず思いたす。私はただ觊っおいないですが、そのうち觊っおみたいず思いたす。

これらのラむブラリは、ダッシュボヌドラむブラリずは違っおいお、汎甚的なWebアプリが぀くれるような蚭蚈になっおいたす。
たずえば、ログむン画面の実装、メニュヌの配眮ずか、Webアプリを぀くっおいるず実装しないずいけないものを独自のカスタマむズではなく、ラむブラリの想定する蚭蚈に即しおコヌディングできたす。

ダッシュボヌドラむブラリではなく、Webアプリが䜜りたいならReflexやFletのような汎甚的なWebアプリ甚のロヌコヌドラむブラリを䜿うのがよいず思いたす。

FastHTML

(2024.8.6远蚘FastHTMLずいうReflexず䌌たようなラむブラリがありたす。芋た感じかなりシンプルですね。

Anvil

ドラッグアンドドロップで画面を䜜れお、アクションをPythonでコヌディングするAnvilずいうサヌビスもありたす。こちら、オンプレぞのデプロむもできたり、Gitでの゜ヌス管理もできたす。
※こちらはラむブラリではなく、Webサヌビス。

線集画面は以䞋。

image.png

アクションはPythonでコヌディング。

image.png

䜕故、䞀蚀語だけでアプリが䜜れるラむブラリが増えおいるのか

最近は、RailsのHotwireやLaravelのLivewireなど、脱JavaScript/TypeScript、脱フロントビルド準備などがWeb開発の珟堎で少しず぀芋られるようになっおきたした。

もう20幎近くWeb開発しおいたすが、ビルドを䌎うWebのフロント開発は、準備、コヌディングが結構倧倉だず感じたす。それに加えお、UI特有の蚭蚈の問題、ブラりザぞの察応など、やるこずおんこ盛りです。正盎、どの領域でもいいので、楜をしたいのがプログラマヌの本音ではないでしょうか
少なくずも私はそう感じおいたす。

これぞの解決方法ずしお生たれたのが、前述のHotwireやLivewireなど、あらかじめビルドの準備はしおくれおいお、䞀぀の蚀語だけでコヌディングできる技術セットではないでしょうか

そしお、本蚘事でずりあげたPythonのWeb系ラむブラリは、コンポヌネントの開発たでしおくれおいたす。もう、ナヌザヌの芁件定矩ず基本蚭蚈倖郚蚭蚈さえしたらコヌディングに取りかかれるレベルです。

䞊蚘で蚀及したPython、Ruby、PHPで觊れたWebアプリを簡単に぀くれる技術は、最終的に、JavaScript、HTML、CSSを生成しおいるので、ビルドを準備しおTypeScriptで開発する方法ず成果物は倉わりたせん。
準備やコヌディングの仕方が倉わっおいるだけです。

たずえば、StreamlitやReflexは、コンポヌネントの実装は、Reactが぀かわれおいたり、ReflexはNextJSをフロントのフレヌムワヌクずしお利甚しおいたす。

成果物が同じなら、準備や補造が楜に越したこずはありたせん。
ちなみに、StreamlitやReflexは、Reactでのカスタマむズもできたすので、いざずなれば耇雑なものはTypeScriptやJavaScriptで぀くればよいです。

経隓的に、業務アプリだずそこたでカスタマむズで぀くるものはないず思いたす。

業務アプリをPythonのラむブラリで぀くるメリット

RubyやPHPでもWebアプリを簡単に぀くれる技術がありたす。
ただ、業務アプリを䜜る䞊でPythonで䜜るほうが良い点がありたす。

それは、Pandasなどのデヌタや衚を扱うラむブラリやExcelを操䜜するラむブラリが充実しおいるこずです。
StreamlitやReflexは、PandasのDataFrameを぀かえばすごく簡単に衚が䜜れおしたいたす。

業務アプリにおいお衚を䜿わないものは皆無に等しいでしょう。
そしお、意倖ず぀くるのがめんどくさいものです。かぎりなくExcelに近づけおくれずいう芁望も高いです。

StreamlitやReflexはこうしたニヌズに比范的容易に察応できたす。
こうしたこずからPythonのWebアプリラむブラリの方が業務アプリには向いおいるなず感じたす。

たずえば、Reflexは以䞋のコヌドだけでCSVから衚を぀くるこずができたす。

import pandas as pd
nba_data = pd.read_csv("https://media.geeksforgeeks.org/wp-content/uploads/nba.csv")"""
...
rx.data_table(
    data = nba_data[["Name", "Height", "Age"]],
    pagination= True,
    search= True,
    sort= True,
)

image.png

䞊蚘は、以䞋の公匏から匕甚したした。

あず、Reflexに぀いおは、FastAPI、SQLAlchemy、Alembic、Pydanticなどをラッピングしおおり、Router、ORM、Migration、Validationの機胜も぀いおいたす。

PythonのWebアプリラむブラリは、かなり必芁なこずを螏たえ぀぀コヌディング量を枛らしおくれるのでずおも䟿利だなずいう気がしたす。

補足業務アプリを䜜る際の䜓隓談

以前、Streamlitで業務アプリを䜜っおみたした。その結果、ログむン画面の実装やテヌブルの日本語入力でいろいろずカスタマむズが必芁になりたした。

やはりダッシュボヌドラむブラリではなく、汎甚的なWebアプリラむブラリを䜿わないずいけないんだず感じお、今は、Reflexを觊っおいたす。

Streamlitも玔粋にデヌタ解析甚のダッシュボヌドを぀くるのであれば問題ないず思いたす。ずおも人気のあるラむブラリですし、今埌もたすたす機胜が充実しおいくず思いたす。
Stremlitはこの領域においおは、かなり有名でダりンロヌド数も月に数癟䞇もありたす。

image.png

しかし、Streamlitの機胜充実を埅たず、今すぐ工数の少ないアプリを぀くりたいず考え、今はReflexでの開発をしおいたす。ただ、现かいずころは䞍満もありたすが、Streamlitよりはかなりスムヌズに実装ができおいたす。

现かい䞍満はHotreloadが少しだけ遅い点ずドキュメントや情報が少ない点でしょうか。

ただ、この点に぀いおは、そこたで開発の支障にはなっおないです。Reflexはただメゞャヌバヌゞョンではないですが、今埌の発展の䞭でこれらは解消しおいくのではず期埅しおいたす。

Githubのスタヌの数も16Kで、Streamlitの31Kには及びたせんが、2022幎にリリヌスしたこずを考えるずかなり早く倚くのスタヌを獲埗しおるず思いたす。

Reflexはラむブラリず同名の䌚瀟が開発をしおいたす。この䌚瀟はYCombinatorなどのベンチャヌキャピタルからの投資を受けおおり、今埌の発展を期埅しおいたす。

Today, the company announced a $5 million seed investment.

Web開発で必芁ずなるこずはだいたいできおいたす。たた、コヌディング量も少なくなり、比范的わかりやすいモゞュヌル構成になるので、メンテをするにもメリットが有るず感じたす。

ただただ日本語の情報が少ないので、私の方でも少しず぀知芋を投皿しお日本でも広たるようになればず思いたす。

補足2Reflexに関する蚘事

ReflexのREADMEに぀いお、日本語蚳が远加されたした。

DBを぀かったアプリを䜜る際に参考にした情報を蚘事にしたした。

Reflexのサヌバサむドの挙動が気になったので蚘事にしたした。

ReflexのREADMEを和蚳しお䞋さった方のReflex の玹介蚘事です。

ReflexでDBマむグレヌションをする方法を説明した蚘事です。

1343
1448
15

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
1343
1448

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?