Pythonは、自動化や分析などに威力を発揮する言語で有名ですが実はWEBシステムでも使われています。
日本ではWEB開発にPythonを選択しているケースはまだ少ないみたいですが海外ではWEBシステムにPythonを採用していることが多いみたいです。有名どころだと
- YouTube(動画共有)
- Dropbox(オンラインストレージ)
- Spotify(音楽配信)
- Instagram(写真共有)
どれもほとんどの人が知っているサービスです。
そこで、せっかくpythonを勉強しているので私もWEB開発にも挑戦することを決意!
いろいろ調べてみたところ、FastAPIというPythonのフレームワークに魅力を感しました。チュートリアルと簡単なアプリを作ってみた程度ですが非常に使いやすかったので事前にWEB開発の考え方とFastAPIを選択した理由も含め紹介したいと思います。
フロントエンドとバックエンド
WEB開発は、主にフロントエンドとバックエンドという概念があります。
フロントエンド
ソフトウェアの場合は主に利用者が直接触れる部分を提供するプログラムやモジュール(部品)などをフロントエンドという。特に、文字による表示・操作機能(CUI/CLI)しか用意されていないプログラムや、利用者が直接操作することがないライブラリなどのプログラムに、グラフィック表示やマウス操作・タッチ操作で使用できるようにするGUI(グラフィカルユーザーインターフェース)を提供するソフトウェアをフロントエンドと呼ぶことが多い。
https://e-words.jp/w/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89.html
フロントエンドは利用者側が操作する画面そのもののこと。pythonは、サーバサイドの言語でバックエンドに該当する。なのでWEB開発ではフロントエンドは、pythonではなくhtml+CSS+Javascriptで構築されている場合がほとんど。なお、CSSやJavaScriptにもフレームワークがある。また、サーバ側で処理した結果をHTMLに埋め込むテンプレートエンジンというものもある。
CSSフレームワーク
- BootStrap
- Tailwind CSS
- Foundation
など
JavaScriptフレームワーク
- Vue.js
- React
- Angular
- jQuery
など
テンプレートエンジン
- pythonでは、ほぼjinja2(ジンジャ2)が使われている
フロントエンドもpythonを使いたい、またはjavascriptを使いたくない場合などはBrythonというフレームワークもあるようだが主流ではない。また、分析に特化したWEBシステムならpythonだけで書けるStreamlitというフレームワークも存在する。(個人的にStreamlitは使っていて本当にPythonだけでサクッと作れるので便利だが大規模システムには向いてない。)
バックエンド
Pythonはこのバックグラウンドという領域で動く言語。よく使われる言葉でいうとサーバサイド言語。
ソフトウェアの場合は主に利用者が直接触れない機能や処理を担当するプログラムやモジュール(部品)などをバックエンドという。
https://e-words.jp/w/%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%89.html
フロントエンドにフレームワークが存在するようにバックエンドもフレームワークが存在する。
Pythonに限定してもかなりの数がある。(選定が大変)
有名どころを羅列すると
フレームワーク名称 | 簡易説明 |
---|---|
Django | pythonフームワークでは多分一番有名 大規模開発に向いている Web開発に必要な機能が一通り揃っている |
Flask | 軽量フームワークで2番目に有名 小規模から中規模開発に向いている |
FastAPI | WebAPIに特化したフレームワーク Pythonフレームワークで一番高速らしい ドキュメント自動生成機能 非同期処理に強い |
Bottole | 最軽量フレームワーク 単一ファイルで構成されている |
Tornado | マルチタスクが可能 高速 |
Responder | 非同期処理に強い 高速 |
PythonのWebフレームワークの選定
バックエンドに使うフレームワークの選定に悩みました。そこでGithubのスター数と誕生年を調べてみました。※スター数は2022年5月末時点です。
フレームワーク | スター数 | 初版リリース年 |
---|---|---|
Django | 65.1k | 2005年 |
Flask | 59.8k | 2010年 |
FastAPI | 47.1k | 2018年 |
Tornado | 20.6k | 2009年 |
Bottole | 7.6k | 2009年 |
Responder | 3.8k | 2018年 |
star-history.comで取得したGit-Hubのstar数
DjangoとFlaskが人気ですが、気になるのはFastAPIです。この中ではResponderと同じく一番後発のフレームワークなのに、スター数が多いです。同じ時期にリリースされたResponderの10倍以上のスター数でFlaskに追いつく勢い!
ちょっと調べてみるとかなり、イケてるフレームワークみたいで、
- PythonでWEBAPIを構築する場合は、第1の選択肢になる。
- Swagger UIという機能でドキュメントの自動生成機能がかなり便利。
- WSGI仕様の後継といわれている、非同期処理に対応しているASGIをサポートしているため高速
以下のサイトでWebフレームワークの速度を比較されている記事があり非常に参考になりました。
このサイトを見ると、FastAPIが非常にパフォーマンスも良く、魅力を感じずにはいられないです。
(結論)FastAPIが良さそう
調べた結果、FastAPIが良さそうと思いました。個人的な理由は以下の通りです。
本来は、Djangoが一番良い選択だと思うのですが、学習コストが高く、パフォーマンスもFastAPIに比べると多少劣るところが気になりました。
WEBAPIを作りたい場合は、Django Rest Frameworkもあるみたいですがパフォーマンスも含めてFastAPIの方が良いかなと。また、新規案件などでは、Flaskはあまり使用せず、FastAPIを採用する企業が増えているのも決め手となりました。バックエンドにPythonを使う場合に限りますが、バックエンドをFastAPIで構築してフロントエンドは、VueやReactなどで構築するのが王道になってくるのかなと思います。
コメント