見出し画像

PythonだけでWebアプリが作れるライブラリが増えている

※本記事で言及しているReflexのdiscordサーバー内に日本語チャンネルをつくってもらいました。もし、興味をもった人がいたら参加してみてください。


1.PythonだけでWebアプリをつくるライブラリが増えている

最近(2024.05)、Python界隈ではPythonだけでWebアプリが作れるライブラリが増えています。詳しくは他の記事を参照してもらえればと思います。
以下の記事がとても参考になりました。ありがとうございます。


2.ライブラリの分類

こうしたライブラリも大きくわけて2つの種類があるように思います。
①データ解析の結果を表示するダッシュボードライブラリ
②汎用的な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は、PythonをつかってReactライクなコーディングで画面を作成することができます。ある程度コンポーネントも作ってくれているので、呼び出すだけでコンポーネントを表示できます。
Reactの良さは、JavaScriptやTypeScriptのコンテキストですべてをかけることによる、認知や作業の負担軽減だと思います。
ReflexはそれをPythonで実現していると思います。

もう一つはFlet。こちらはReflexとは趣が違っていて、Webアプリだけでなく、スマホアプリも作れます。というか、PythonでコーディングしてFlutterのコードを生成しているようです。
Flutterも最近は様々なプロダクションに使われていますが、それをPythonだけで作れるのはかなり魅力的だと思います。私はまだ触っていないですが、そのうち触ってみたいと思います。

これらのライブラリは、ダッシュボードライブラリとは違っていて、汎用的なWebアプリがつくれるような設計になっています。
たとえば、ログイン画面の実装、メニューの配置とか、Webアプリをつくっていると実装しないといけないものを独自のカスタマイズではなく、ライブラリの想定する設計に即してコーディングできます。
ダッシュボードライブラリではなく、Webアプリが作りたいならReflexやFletのような汎用的なWebアプリ用のローコードライブラリを使うのがよいと思います。

何故、一言語だけでアプリが作れるライブラリが増えているのか?

最近は、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,
)


ref


この記事が気に入ったらサポートをしてみませんか?