Pythonプログラムを簡単にWeb化できるWeb UIフレームワークとは?

こんにちは、Pythonエンジニア育成推進協会 顧問理事の寺田学です。私は試験の問題策定とコミュニティ連携を行う立場です。

Pythonで簡単なアプリやデータ分析、機械学習、AIを作った後に、Webで公開したり、入力フォームを通して結果を表示させたりといった、Webで公開したいと思う事があると思います。

そこで今回は、Webで公開するときに使える、とても便利なWeb UIフレームワークを紹介したいと思います。

■最近のトレンドは【Web UIフレームワーク×Python】

Pythonで出来たものをWebで表現できるフレームワークを、私はWeb UIフレームワークと呼んでいます。この呼び方が正式名称として世間一般的に定義されているというわけではないと思いますが、最近とても話題になっている技術です。この技術は、Webに詳しくなくても、Webで表現できるので、作ったものをWebで公開したいという方にはぜひ使ってほしいものです。

どうできているのか説明は難しいのですが、Web UIフレームワークは、チェックボックスやサブミットボタンを配置する命令をPythonで書いておくだけで、Web化することができます。HTMLやJSONなどの裏側にあたる部分はすべて隠ぺい化されています。ボタンを押されたときの挙動はWeb UIフレームワークごとに決められた関数などの機能があり、実行されたときにその関数が実行され、結果が表示されるようになります。

そのため、裏側を意識する必要がなく、新たにWeb関係の知識を覚える必要がありません。

これを使うと、例えば、計算のモジュールを1つ書くだけで、Web画面が作られ、結果の表示までできます。

Web UIフレームワークには10種類以上ありますが、代表格としては、Streamlit、Gradio、Panel、Plotly Dashがよく挙げられると思います。

それぞれ特徴と用途が少しずつ異なっていますが、最初はそれぞれのフレームワークの特徴を学ぶより、Web UIフレームワークという技術をどのように使うかを考えることの方が重要だとは思います。

■Webフレームワークとの違いは?

ところで、これまでPythonのWebフレームワークとして活躍してきたDjangoやFlask、FastAPIとの違いは何でしょうか?

Webフレームワークは、データベースとの接続を前提としていることが多く、表現するにはHTMLをテンプレート言語で書くか、JSONのAPIだけを返してフロントをReactやVue.jsなどの別のフロント技術を使って構築する必要があります。

つまり、データベースなどの外部と連携するなら、簡単につなげられる仕組みを持つWebフレームワークを使った方が、自由度が高くて便利ですが、フロント側は自分で作る必要があるということです。

例えば、DjangoなどのWebフレームワークを使って、Web UIフレームワークと同じようなことをしようとした場合、データベースを使わなかったとしても、サーバーサイドではURLの定義や、ブラウザで動くフロント側とどのような内容のデータ(HTMLを返すか、JSONで返すか)をやり取りするかと言ったことも含めて、すべてを決めていく必要があります。

ですが、Web UIフレームワークなら、そういったことはすべて任せることができますので、Web化する方法を気にする必要がなく、Pythonを書く事に集中することができます。

■Web UIフレームワーク、各種の特徴は?

今回は先ほど挙げた4つのWeb UIフレームワークの特徴を簡単にご紹介します。

最初のうちはあまり気にしなくても良いとは思いますが、それぞれのツールで得意、不得意な部分はありますので、まずは気になるものをいくつか触ってみるのが良いと思います。

  • Gradio

機械学習やAIをするなら、Gradioが簡単だと思います。これはHugging Face社がメンテナンスしているツールです。Hugging Face社はディープラーニングなどのAIのモデルをホストしてくれている、GitHubのような存在です。Web UIフレームワークの中では後発のもので、それなりに使い勝手がいい仕上がりになっています。

Hugging Face 社が提供する機能にHugging Face Spacesというものがありますが、これは、利用できるCPUの上限はあるものの、簡単なアプリなら無料でホストし、動かせます。

GradioはHugging Face社が作っていますので、Hugging Faceに保存されている、とても良質なサンプルを使うことができます。例えば、 Hugging Faceにある自然言語のモデルをダウンロードして、AI的に文章をサマライズしてもらうといような感じです。それ以外に画像のアップロード機能を使えば、AIを使って、物体検出するといったこともできます。

Gradioは自分なりに何かを表現したいと思った時に、文字が入力できる、ファイルがアップロードできるというようなユーザーインターフェースを、Gradioの中に用意された部品を使ってはめていくことができますので、AIを使う人で、何かを表現したいと考えている人にはぜひ使ってみてほしいと思います。

  • Streamilit

Gradioと並んで人気なのが、Streamlitです。デフォルトでHugging Face Spacesで使えるようになっていますので、Gradioでやりにくいと感じている人や、Gradioを理解して、さらにその一歩先に踏み出したところをやりたいと感じたら、こちらに移行するのが良いと思います。

私自身はGradioからスタートして、今はStreamlitがお気に入りです。ただ、これは人によりますので、Gradioの方が簡単にできてやり易いという人もいます。

GradioもStreamilitも、Hugging Face Spacesを使わずとも動作させることは可能ですし、Hugging Face Spaces自体はいずれかを使わずとも使用することはできます。Hugging Face Spacesはインフラ側のお話なので、ここでこれ以上は掘り下げませんが、興味がある方は学習してみてください。

  • Panel、Plotly Dash

こちらは私自身、あまり触れたことがありませんので詳細は語れませんが、比較的、グラフ表現やデータの可視化が得意だと感じています。

特にPlotly DashはPlotly Expressという、インタラクティブなグラフとして可視化できる仕組みを持っていますので、Webでグラフを表現するには最適なツールだと思います。

ほとんどのWeb UIフレームワークの公式ドキュメントは英語しかないため、情報を得るのは大変かもしれませんが、日本語ブログを探してみたり、ChatGPTを上手く使ってみたりと情報を集めてみてください。

ChatGPTは上手く聞ければ、サンプルとなるソースコードを得られることもあります。

■Web UIフレームワーク、どう使う?

データ分析や機械学習をする際、JupyterLabsやGoogle Colaboratoryを使って共有し、データ編集やインプット用の入力枠を作って関係者に検証してもらうことはよくあると思いますが、そこからさらに一歩外に出たときにWeb UIフレームワークは非常に便利です。

社内限定なら社内あるサーバ上に置いておけば、誰でも簡単に使えます。PythonのWeb UIフレームワークを使って、実現したいものをぜひ作ってみてください。

また、今回、データ分析AIの話が随分出ていると思いますが、結局のところ、自動化や自分で簡単に何かをやりたい時に、 コマンドラインインターフェースで作っていたものをWebに置き換えることが容易です。

Webにするということは、つまりGUIに置き換えるという発想になるわけです。

例えば、2つのエクセルファイルを渡して、その中を計算させたり、上手く組み立てを変えて、自分の要望に沿った新しいExcelファイルを出力したりと言ったことですが、これ自体は自動化の1つと言えます。

これまで私はこういった時にはコマンドラインのツールから作ったらどうかと提案してきました。

ディレクトリのどこかに、新しいファイルを作るというよくある自動化パターンです。ただ、この場合はPythonの環境を用意し、コマンドプロンプトを起動して、実行しなくてはなりませんので、実行できる人がどうしても限られます。そんな時に、Web UIフレームワークを使えば、サブミットボタンなどのインターフェースを整えるだけで、ファイルのダウンロードや計算ができます。

まずは、コマンドラインインターフェースのツールを作り上げて、Web UIフレームワークにうまくその関数を載せてあげるだけで、 Webで自動化UIができてしまうということになるかなと思います。

■さいごに

Pythonを初めてやる人にとっては、いろんな用語が新しく増えて、難しく感じるかもしれませんが、今回お話したことを一言で言えば、PythonのWeb UIフレームワークを使って、今までコマンドラインでやっていたことをWebで表現できるということのみです。

いろいろなことができますので、すべての機能を使いこなす必要はなく、2,3個使うような簡単なパターンから試してみてください。

また、これまでのコラムでは、Pythonの環境を自分で作る話など様々なお話をしてきました。

昨今は、ブラウザで動く世界が広がっており、WebAssemblyを使ったブラウザ上でPythonコードがそのままブラウザで動く世界になっています。

実はGradioにもブラウザで動かせるGradio Liteという機能があり、これのWasm版を使えば、Pythonの環境がなくても、どこかにアプリケーションがHTML的にダウンロード可能な形でおいてあれば、サーバがなくとも、自身のブラウザから動作させることができます。

こういったサービスはいくつかありますが、用意した環境に比べてロードする時間が長く掛かりますし、クライアント側のマシンにそれなりの余裕がない状態では大きめのAIモデルを動かすには難しいのですが、簡単な自動化程度のものであれば手軽に試すことができます。

サーバを用意して、必要な環境設定の手間やコストを必要とせず、ちょっとした設定だけで気軽に使うことができますので、上手く活用してもらえればと思います。

私自身、これらのサービスを使ってさまざまなことに挑戦していますがとてもやり易いと感じています。

最近ではブラウザだけでデスクトップアプリケーションを作ってみるなど、Pythonのコードと組み合わせることで実現できることの幅が広がりました。

ぜひ皆さんも試してみてください。そして、いろんなものを組み合わせて実現できる世界がやってきていることを感じて頂ければと思います。

PAGE TOP