PythonのWeb開発フレームワークでFastAPIが気になる

スポンサーリンク

Pythonは、自動化や分析などに威力を発揮する言語で有名ですが実はWEBシステムでも使われています。

日本ではWEB開発にPythonを選択しているケースはまだ少ないみたいですが海外ではWEBシステムにPythonを採用していることが多いみたいです。有名どころだと

  • YouTube(動画共有)
  • Dropbox(オンラインストレージ)
  • Spotify(音楽配信)
  • Instagram(写真共有)

どれもほとんどの人が知っているサービスです。

そこで、せっかくpythonを勉強しているので私もWEB開発にも挑戦することを決意!

いろいろ調べてみたところ、FastAPIというPythonのフレームワークに魅力を感しました。チュートリアルと簡単なアプリを作ってみた程度ですが非常に使いやすかったので事前にWEB開発の考え方とFastAPIを選択した理由も含め紹介したいと思います。

FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production

フロントエンドとバックエンド

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に限定してもかなりの数がある。(選定が大変)

有名どころを羅列すると

フレームワーク名称簡易説明
Djangopythonフームワークでは多分一番有名
大規模開発に向いている
Web開発に必要な機能が一通り揃っている
Flask軽量フームワークで2番目に有名
小規模から中規模開発に向いている
FastAPIWebAPIに特化したフレームワーク
Pythonフレームワークで一番高速らしい
ドキュメント自動生成機能
非同期処理に強い
Bottole最軽量フレームワーク
単一ファイルで構成されている
Tornadoマルチタスクが可能
高速
Responder非同期処理に強い
高速
Pythonのフレームワーク

PythonのWebフレームワークの選定

バックエンドに使うフレームワークの選定に悩みました。そこでGithubのスター数と誕生年を調べてみました。※スター数は2022年5月末時点です。

フレームワークスター数初版リリース年
Django65.1k2005年
Flask59.8k2010年
FastAPI47.1k2018年
Tornado20.6k2009年
Bottole7.6k2009年
Responder3.8k2018年

star-history.comで取得したGit-Hubのstar数

DjangoとFlaskが人気ですが、気になるのはFastAPIです。この中ではResponderと同じく一番後発のフレームワークなのに、スター数が多いです。同じ時期にリリースされたResponderの10倍以上のスター数でFlaskに追いつく勢い!

ちょっと調べてみるとかなり、イケてるフレームワークみたいで、

  • PythonでWEBAPIを構築する場合は、第1の選択肢になる。
  • Swagger UIという機能でドキュメントの自動生成機能がかなり便利。
  • WSGI仕様の後継といわれている、非同期処理に対応しているASGIをサポートしているため高速

以下のサイトでWebフレームワークの速度を比較されている記事があり非常に参考になりました。
このサイトを見ると、FastAPIが非常にパフォーマンスも良く、魅力を感じずにはいられないです。

(参考にしたサイト)

(結論)FastAPIが良さそう

調べた結果、FastAPIが良さそうと思いました。個人的な理由は以下の通りです。

  • 学習コストは、できるだけ少なくしたかった。
  • WEBAPIが作りたかった。
  • ドキュメントが自動生成される。
  • フロントエンドとバックエンドを別々にしたい。
  • できる限り流行りのフレームワークを使いたい。

本来は、Djangoが一番良い選択だと思うのですが、学習コストが高く、パフォーマンスもFastAPIに比べると多少劣るところが気になりました。

WEBAPIを作りたい場合は、Django Rest Frameworkもあるみたいですがパフォーマンスも含めてFastAPIの方が良いかなと。また、新規案件などでは、Flaskはあまり使用せず、FastAPIを採用する企業が増えているのも決め手となりました。バックエンドにPythonを使う場合に限りますが、バックエンドをFastAPIで構築してフロントエンドは、VueやReactなどで構築するのが王道になってくるのかなと思います。

コメント

タイトルとURLをコピーしました