Webフレームワークを選定する
Webアプリケーションを開発するときには、フレームワークを使う方が圧倒的に生産性と保守性が向上します。では、その使用するフレームワークを決定するためにはどうしたらよいのでしょうか?
まず、プロジェクトの規模と複雑さを確認しましょう。開発しようとしているアプリケーションが、多数の機能と要件から構成される大規模なシステムであるときは、フルスタックフレームワークを選ぶ方がよいでしょう。逆に、アプリケーションが小さくシンプルな場合は、おそらくマイクロフレームワークの使用を検討する方がよいかもしれません。
次に、検討しているフレームワークが垂直および水平にスケーリングできるかどうかを確認しましょう。これは、複数のサーバーで実行し、膨大な量のトラフィックを処理し、サービスを強化するための新しい機能を追加する必要があるプロジェクトにはとても重要です。
フルスタック・フレームワーク
Django:PythonでWebアプリケーションを開発するのであれば、まずコレを検討!
web2py:面白く特徴的な機能がある。個人プロジェクトでは検討の余地あり。
開発者のMassimo Di Pierro 氏はもともと物理屋で科学領域のWebアプリケーションを簡単に作れることを意図して開発されている
彼とは一緒に飲んだこともある (^^)v
マイクロフレームワーク
Flask:Djangoを採用するほどでもないのであれば、これが最有力です
Pyramid:FlaskやDjangoについで利用者が’多い。
Bottle:小規模プロジェクトやプロトタイピング、Webフレームワーク学習用
ローコードフレームワーク
ToolJet
ToolJetは、データベース( PostgreSQL, MongoDB, MySQL, Elasticsearch, Firestore, DynamoDB, Redis など )、APIエンドポイント( ToolJetはOAuth2認可をサポートしています )、外部サービス( Stripe, Slack, Google Sheets, Airtableなど )など、あなたのデータソースに接続することが可能です。データソースが接続されると、ToolJetはこれらのデータソースに対してクエリを実行し、データを取得・更新することができます。データソースから取得したデータは、テーブル、チャート、フォームなどのUIウィジェットを使用して、視覚化および変更することができます。
Appsmith
Appsmithは、ローコードで社内アプリケーションを構築できるオープンソースのローコードフレームワークです。
JavaScriptベースのビジュアル開発プラットフォームで、CRUDアプリ、ダッシュボード、管理パネルなどを迅速に構築できます。あらかじめ用意されたUIウィジェットを使用して、APIやデータベースに接続し、動的な>アプリケーションや複雑なワークフローを構築することができます。
Lowdefy
Lowdefy はオープンソース (Apache-2.0) のローコードフレームワークで、YAML やJSON の設定ファイルを使って Web アプリを構築することができます。管理画面、BIダッシュボード、ワークフロー、CRUDアプリの構築に最適です。
Bundibase
非同期フレームワーク
Tornado: 2009年から開発が続く非同期フレームワークの古株
多くのアプリケーションの裏側で動作している
aiohttp:非常に魅力的で高速な非同期Pythonフレームワーク。
FastAPI:WSGIに対応し非常に高速な非同期フレームワーク
高速性、書きやすさ、本番運用を強く意識した設計、モダンな機能などが特徴
Sanic:マルチスレッドFlaskといえるもの
Python 3.6以上が必要
Pythonでは一般的でシンプルでな async/awaitをそのまま使用でき学習コストが低い
Quart:Sanicと同様にFlaskを意識したフレームワーク
Python 3.7 以上が必要
Flaskからの移行がとても簡単
採用プロジェクトを数で比較すると、Django > Flask > Pyramid となるでしょう。
GitHubのスター数で比較すると、Flask(49887) > Django(48535) > Pyramid(3353)、
検索トレンドとしては、Pryamid > Flask > Django となります。
ただし、速度重視をするようなアプリケーションでは非同期フレームワークが使われることが多いことも覚えておくとよいでしょう。
補足説明:
Django 3.1 から非同期処理に対応するようになりました。
MVCとMVT
Ruby On Rails や Laravel では MVC (Model, View, Controler) という概念が使われています。
MVCモデルについて
モデル(Model)
アプリケーションのデータベースへのアクセス、データ管理などを担当します。
ユーザインタフェースの影響を受けにくい部分です。
ビュー (View)
アプリケーションのレイアウトや、ユーザインタフェース表示するコンポーネント、データ入力フォームやグラフ、画像などデザインやレイアウトに関わるアプリケーションのフロントエンドを担当します。
コントローラ (Controler)
Model と View を連携する機能を担当します。View から得られたデータを Model に渡したり、またその逆を行ったりします。
MTVモデルについて
Django や Flask では MTV(Model, Template, View) という概念になっています。
モデル (Model)
MVCモデルでの Model とほぼ同じです。
アプリケーションのデータや、データベースへのアクセスなどを担当します。
クラス定義はここで行います。
ユーザインタフェースの影響を受けにくい部分です。
テンプレート (Template)
MVCモデルでの View に相当し、ユーザインタフェースを担当します。
テンプレートエンジンを通して関数を呼び出したり、変数をレンダリングします。
ビュー (View)
MVCモデルでの Controler に相当します。
URLリクエストの振り分けを担当します。
モデル とテンプレート の連携を行います。
MVCモデルでのViewと同じ名前ですが、担当する領域が違います。