Python は楽しいおもちゃであると同時に、恐ろしい火炎放射器でもあります。 Pythonでできることも同様です。
Python は愛好家、科学者、建築家などに同様に愛されています。
始めるのは非常に簡単で、大規模で複雑なシステムを構築するための高次の抽象化とメタプログラミング機能があり、ほとんど何でもできるライブラリが大量にあります。確かに、同時実行性と強力な型指定に関しては制限がありますが、それらを回避することはできます。
この記事では、大小を問わず Web アプリケーションを構築する際に最適な Python フレームワークをいくつか紹介します。

ジャンゴ
Django フレームワークは、Python コミュニティにとって頼りになる Web フレームワークとして時の試練に耐えてきました。 Python 開発者を睡眠中に襲い、銃を突きつけて Web アプリケーションの構築を強制した場合、Rubyist が Rails に手を伸ばすのと同じように、開発者は自動的に Django に手を伸ばすでしょう。
それには十分な理由があります。 Django は、キャッチフレーズにあるように、「期限のある完璧主義者のための Web フレームワーク」です。これはいわゆる「バッテリー付き」フレームワークであり (Python がバッテリー付き言語であるのとよく似ています)、すべての一般的な機能をすぐに提供します。
これらの機能が組み込まれているため、Django は開発時間を大幅に短縮します。
- 便利で快適な ORM で、移行はフレームワークによって自動的に作成および適用されます。
- モデルに基づいて管理パネルを自動生成するためのスキャフォールディング。
- Cookie、セッション、ミドルウェア、テンプレートなどのサポート。
- XSS 防止、CRSF 防止などのセキュリティ機能が自動的に適用されます。
- 世の中のほぼすべてのデータベースで動作します (公式サポートが存在しないアダプターを見つけるのは簡単です)
- GeoDjango による地理データと空間クエリの最上級のサポート
そしてそれ以上に。 Django は本格的でフレンドリーな Web フレームワークであると言えば十分です。
ジャンゴはあなたにぴったりですか?
はいぜったいに。
Django は、ラピッド プロトタイピングやエンタープライズ アプリケーションの計画など、あらゆるユースケースに非常に適しています。唯一遭遇する荒削りな点は、フレームワークの構造です。
Django は、開発を迅速かつ容易にするために後ろ向きに努力するため、その構造 (「構成よりも規約」と呼ばれる概念) を開発者に押し付けますが、これに同意できない可能性があります。
たとえば、Django ORM を別のもの (SQL Alchemy など) に置き換えたい場合は、予期せぬ事態に備えてください。
Django と Python を使用したフルスタック開発者になることに興味がありますか? – この 素晴らしいオンラインコース をチェックしてください。

フラスコ
Python Web 開発では Django がほぼすべてのマインドシェアを占めていますが、 Flask も強力な競争相手です。
Django とは対照的に、Flask は「マイクロフレームワーク」です。これは、いくつかの最低限のことを正しく行うことに重点を置き、残りはユーザーに任せることを意味します。この「あとはあなた次第」という言葉は、あなたの目標に応じて、イライラの原因にもなりますし、喜びの原因にもなります。
自分が何をしているのかを理解しており、好みのコンポーネントを選択して愛情を込めて Web アプリケーションを作成したい人にとって、Flask は天の恵みです。
Flask は次の機能を提供します。
- ルーティング、テンプレート、セッション管理、その他の便利な機能。
- 単体テストの完全サポート
- 最小限のプラグイン可能なアーキテクチャ
- ファーストクラスのRESTサポート
- ブループリントのサポート、小さな Web アプリケーション向けのアーキテクチャに対する Flask の独自の解釈
- ORM、移行などのパッケージを選択します。
- 柔軟なアプリケーション構造 — ファイルを最も意味のある場所に配置します
- 静的ファイルの提供
- WGSI準拠
フラスコはあなたにぴったりですか?
すでに述べたように、Flask は最小限の Web フレームワークであり、すべてが交換可能な個別のコンポーネントに分割されています。プロトタイプの構築を急いでいる場合、データベース、フォルダー構造、ルーティングなどについての些細な決定に多くの時間を費やすことになり、逆効果になる可能性があります。 Flask は、中規模から大規模の安定した本格的なプロジェクト、特に REST API に取り組んでいる場合に最適に機能します。
ボトル
Flask のアプローチは最小限では不十分で、さらに制御が必要だと思われる場合は、 Bottle に挨拶してください。
Bottle では、依存関係が Python 標準ライブラリのみになるまで、さらに多くの要素が取り除かれています。これは、pip install this や pip install that を実行しないことを意味しますが、やがて必要になる可能性が高くなります。 Bottle が一部の人々にとって目立つ理由は次のとおりです。
- 単一ファイルの展開。はい、アプリケーション全体が 1 つの「.py」ファイル内に存在します。
- 外部依存関係はありません。適切な Python バージョンがインストールされている場合は、そのまま使用できます。
- Jinja2、Mako、または Cheetah と交換できるテンプレート エンジンを提供します。
- フォーム、ヘッダー、Cookie、ファイルのアップロードのサポート。
- Webサーバーを内蔵しており、簡単に交換できます。
ボトルはあなたにぴったりですか?
特別な要件がない非常に小さなアプリ (たとえば、コードが 500 行未満) を作成している場合、Bottle は非常に理にかなっているかもしれません。これは Web アプリを作成するための完全に現実的なアプローチですが、実際には、Bottle によって助けられるというよりも、妨げられることのほうが多いことがわかります。
その理由は、現実の世界は常に変化しており、いつのまにか変化しているからです。新しい要件があなたの頭に降りかかるでしょう。その時点で、すべてを 1 つのファイルに入れるのは面倒になります。
また、Bottle と Flask はほとんど似ていると思うなら、それは正しいです。この 2 つを 統合する という提案は 2012 年に遡り、Flask の作成者である Armin もそれに同意しています。しかし、Bottle の作成者である Marcel は、一列縦隊のアプローチのため厳密なイデオロギー上の区別を維持しており、この 2 つは分離されたままであると主張しています。
ゾーペ
Zope について説明するのは複雑ですが、試してみます。はい、これは大小を問わずアプリケーションの構築に使用できる Web フレームワークですが、それだけではありません。 Zope は、Zope の哲学に基づいて作成され、Zope Corporation によって保守されているツール (Web フレームワークを含む) で構成されるプラットフォームです。
Zope には、エンタープライズ アプリケーション開発に適した興味深いコンポーネントと機能がいくつかあります。
- 大規模なアプリを構成するためのコンポーネントの登録および検出アーキテクチャ。
- ZODB — オブジェクトをネイティブに保存するための Python 用の (唯一の) オブジェクト データベース。
- コンテンツ管理システムの本格的なフレームワークと標準
- Web アプリケーション フレームワークのセット — 正規のものは依然として Zope と呼ばれていますが、その上にいくつかの新しいフレームワーク (Grok など) が構築されています。
- ソフトウェア開発、リリース、メンテナンスに対する強力な標準。
Zopeはあなたにぴったりですか?
本当に大規模なアプリを構築するための高度に構造化された環境を求めている場合は、Zope が適しています。とはいえ、それなりの問題にも遭遇することになるでしょう。 Zope は進化し続けていますが、コミュニティは非常に小さく、多くの Python 開発者は Zope について聞いたことさえないほどです。
チュートリアルや広範なドキュメントを見つけるのは難しいため、かなりの量を調べる準備をしてください (ただし、コミュニティは本当に役に立ちます!)。また、あなたが出会う Python 開発者は、Zope を学習して自分のスキルセットを「薄める」ことを望んでいないかもしれません。
ターボギア
TurboGears は 、真に構成可能なアーキテクチャを備えた柔軟性の高いフレームワークです。これはニーズに応じて拡張できるフレームワークであり、これを使用して単一ファイル アプリケーションやマルチテナンシーの巨大アプリケーションを構築できます。
TurboGears にはエレガントな機能がいくつかありますが、その一部は一般的なフレームワーク (Django など) に存在しないか、構築するのが困難です。
- 複数のデータベースに対する最上級のサポート
- マルチデータベーストランザクション
- 高度にモジュール化されている — 単一のファイルから始めて、必要なだけスケールアウトできます
- 強力な ORM (SQLAlchemy、Django の ORM よりも成熟しており、機能が優れています)
- WSGI仕様に基づいたプラグイン可能なアーキテクチャ
- データベースシャーディングの組み込みサポート
- 深く厳格なオブジェクト指向階層とは対照的な、関数主導型のインターフェイス。
TurboGears はあなたにぴったりですか?
楽しく開発したい、「素晴らしい、次世代」などのメディアのノイズから離れて、テスト済みで成熟した堅牢なフレームワークが必要な場合は、TurboGears が最適です。コミュニティで高く評価されており、完全かつ広範なドキュメントが用意されています。
確かに、TurboGears は独自の意見を持っているわけではないため、初期セットアップと構成に時間がかかる可能性がありますが、エンタープライズ アプリケーション開発には理想的なフレームワークです。
Web2py
Web2py は 趣味のプロジェクトとして始まり、2007 年にリリースされました。その目標は、Web 開発を簡単にし、誰でもアクセスできるようにすることです。
その結果、Web2py は極限まで依存性ゼロのアプローチを採用しています。要件やインストールするものは何もなく、開発、データベース管理、展開のためのフル機能の Web ベースのエディターが含まれています。
これは、単なるフレームワークではなく、完全な環境である Android Studio とほぼ考えることができます。 Web2py には次のような優れた機能があります。
- 実質的に学習曲線はありません。
- 最小限のコア (わずか 12 オブジェクト)、暗記することもできます。
- 純粋な Python テンプレート
- XSS、CSRF、その他の攻撃に対する保護
- 快適で一貫した API
Web2py はあなたにぴったりですか?
Web2py は安定していて楽しいフレームワークですが、Django や Flask などの他のオプションと比較して推奨するのは困難です。仕事はほとんどなく、単体テストの話はあまり良くありません。とはいえ、特に REST API を構築している場合は、コード API とフレームワークが提供する全体的なエクスペリエンスを楽しむかもしれません。
チェリーパイ
CherryPy は 、基本的なフレームワーク機能を提供し、すぐに邪魔にならないようにすることを目的としたもう 1 つのマイクロフレームワークです。
CherryPy は Flask などの他のマイクロフレームワークに匹敵しますが、いくつかの点で優れています。
- 組み込みのマルチスレッドサーバーが含まれています (Flask のウィッシュリストに残っているもの)
- (単一の) Web サーバーは複数のアプリケーションをホストできます。
- アプリケーションを WSGI アプリ (他の WSGI アプリと連携するため) またはプレーン HTTP サーバー (パフォーマンスが高い) として提供します。
- プロファイリングと単体テストの最上級のサポート
- PyPy (真のパフォーマンスマニア向け)、Jython、さらには Android 上でも実行可能
CherryPy はこれらすべてを実行し、その後、Web フレームワークに期待される通常の処理を実行します。
CherryPyはあなたにぴったりですか?
主に RESTful サービスを構築している場合、CherryPy は Flask よりもはるかに深刻な候補です。これは 10 年前からあるフレームワークで、順調に成熟しており、小規模なアプリケーションにも大規模なアプリケーションにも同様に適しています。
サニック
Node とその非同期プログラミング モデルの台頭により、Python を含む多くのコミュニティが取り残されたと感じています。これに応じて、数多くの非同期 Web フレームワークが注目を集めています 。Sanic もその 1 つです。
Sanic は、ルート デコレーター、ブループリント、その他の基本的なフック ラインとシンカーを借用するほど、Flask から多大な影響を受けています。そして彼らはそれを認めることを恥ずかしがりません。 Flask ファンであれば、Sanic が提供するのは、Node アプリケーションのパフォーマンス レベルを満たす真のノンブロッキング I/O です。言い換えれば、Sanic は
async
/
await
をサポートする Flask です。
CherryPy と比較すると、Sanic には信じられないほどのパフォーマンス上の利点があります (Flask に対してどうなるか考えてみてください!)。 DataWeave によってテストされた次の結果を確認してください。
ご覧のとおり、同時実行数が 1 秒あたり 50 を超え始めると、CherryPy は実質的に停止し、高い失敗率が発生します。
サニックはあなたのためですか?
Sanic のパフォーマンス特性は他のすべてを圧倒しますが、次のプロジェクトにとっては最良の選択ではない可能性があります。主な理由は、非同期ライブラリが不足していることです。
既存の Python ツールとライブラリの大部分は、シングルスレッドの CPython バージョン用に書かれており、高度な同時実行性や非同期操作については考慮されていません。たとえば、お気に入りの ORM が非同期操作をサポートしていない場合、Sanic を使用する意味がまったくなくなります。
こうした成熟度と可用性の理由から、Python の非同期フレームワークについてはこれ以上検討しません。
メソナイト
私は少し前にこのフレームワークに出会い、これは正しい方向への一歩だと思いました。それ以来、バージョン 2.0 がリリースされ、ついに Masonite に 愛情を注ぐ時が来たと感じています。
簡単に言うと、Masonite は Laravel (ご存知ない方のために言っておきますが、有名な PHP フレームワーク) の Python バージョンです。なぜそれが重要なのでしょうか? Laravel は Ruby on Rails の原則に基づいて構築されており、これら 2 つのフレームワークを併用することで、Ruby 以外の開発者でも「Rails Way」の作業を体験できるため、これが重要です。
Laravel (およびある程度は Rails) 開発者は、すぐに使い始めることができ、文字通りすぐに使い始めることができます。私が Masonite を試したとき (バグも含めて 1 つか 2 つの問題を提出しました!)、Laravel の記憶力がすべてを行っていたため、全く考えずに REST API を構築することができました。
Masonite はバッテリーを含むフルスタック フレームワークとして、いくつかの興味深い機能を提供します。
- アクティブレコード形式のORM
- データベースの移行 (Django とは異なり、開発者が作成する必要があります)
- 依存関係注入のための強力な IoC コンテナ
- タスクの足場と実行のための独自の CLI (「クラフト」と呼ばれる)
- 単体テストのファーストクラスのサポート
Masonite にとって最大の「ライバル」は Django です。コミュニティはこのフレームワークを簡単で楽しい、そして次の大きなものとして宣伝するために最善を尽くしています。それが Django を超えるかどうかは時間が経てば分かることです (私に言わせれば、それはまともなショットを持っています) が、2 つを比較する議論については、 ここを 参照してください。
メソナイトはあなたにぴったりですか?
Masonite は Django と比較するとまだ幼児なので、Django よりも推奨できるわけがありません。とはいえ、Rails のやり方 (または Laravel のやり方) に興味があるのであれば、Masonite が提供するものを理解していただけるでしょう。すべてを事前に構成し、簡単に切り替える必要があるプロトタイプを迅速に構築するのに最適です。
ファルコン
Falcon は 、大規模なマイクロサービス向けに設計された Python Web フレームワークです。
ライブラリには、プロジェクトで使用できるテンプレート、無料のパッケージ、アドオンを備えた完全なシステムがあります。 Falcon は、必要なリソースをすべて入手するための素晴らしい出発点です。

このプロジェクトには、ユーザーがこのフレームワークの設計と開発について話し合う強力な コミュニティ もあります。
Falcon は次の機能を提供します。
- デバッグ可能: どの入力がどの出力につながるかを示すため、Falcon アプリを簡単にデバッグできます。幸いなことに、Falcon 上の未処理の例外はすべて、カプセル化されたりマスクされたりすることはありません。
- 柔軟性: Falcon を使用すると、実装の詳細を制御できるため、アプリを必要に応じてカスタマイズできます。最小限のアプローチにより、必要に応じてアプリのデバッグと調整が容易になります。
- 高速: Falcon は、他のフレームワークよりも速くリクエストを処理することが証明されています。このフレームワークは PyPy と完全に連携します。
- ASGI および WSGI のサポート: Asynchronous Server Gateway Interface (ASGI) または Web Server Gateway Interface (WSGI) のどちらのファンであるかに関係なく、Falcon を使用できます。 WGSI は同期的です。つまり、リクエストを次々に (順次に) 処理します。 ASGI は非同期であり、リクエストは同時に処理されます。
ファルコンはあなたにぴったりですか?
Falcon は、マイクロサービスやミッションクリティカルな REST API を構築する場合に適しています。このフレームワークは高速になるように設計されているため、複数のトランザクションを同時に処理するアプリにとっては優れた選択肢となります。
ピラミッド
Pyramid は、 「小さく開始し、大きく終了し、終了したままにするフレームワーク」として提示されます。あなたが学習者であれば、Pyramid は簡単に始めることができるでしょう。

このフレームワークを使用すると、セキュリティ、テンプレート、データベースなどに使用するアプローチを選択できます。足場から始めることもできます。
Pyramid は次の機能を提供します。
- スケーラビリティ: 小規模から始められるからといって、アプリケーションが永久にその状態を維持できるわけではありません。 Pyramid には、アプリの拡張に役立つアドオン、拡張機能、および構成システムがあります。
- 認証と認可 : 組み込みの認可および認証機能を使用して、アプリを不正アクセスから保護できます。
- 拡張可能: Pyramid は、アプリのライフサイクル全体の完全なパッケージとして設計されています。このプラットフォームは、常に信頼できる API を確保できるよう、API の安定性に取り組んでいます。
- 高度なカスタマイズ可能: フォークせずにコア コードをカスタマイズまたはオーバーライドできます。このアプローチにより、ニーズに合ったアプリを作成できます。
ピラミッドはあなたにぴったりですか?
コンテンツ主導型の大規模な Web アプリケーションを構築する場合は、Pyramid を使用する必要があります。モジュール式で柔軟なアーキテクチャにより、アプリの拡張が簡単になります。 Pyramid はデータベースと簡単に統合でき、柔軟なルーティングのサポートが組み込まれているため、ニュース プラットフォームやブログなどのコンテンツ サイトに最適です。
竜巻
Tornado は Python フレームワークであることに加えて、非同期ネットワーク ライブラリでもあります。 WSGI に基づくほとんどの Python フレームワークとは異なり、Tornado はプロセスごとに 1 つのスレッドのみで実行されます。
tornado.wsgi
を通じて WSGI のサポートを引き続き取得できます。ただし、ほとんどの開発は Tornado 独自のインターフェイスである
tornado.web
に基づいています。
Tornado は次の機能を提供します。
- ノンブロッキング ネットワーク I/O: このライブラリは、asyncio ライブラリの上に構築されています。これにより、多くのオーバーヘッドを発生させることなく、一度に数千の接続を処理できるようになります。
- セキュリティと認証: Tornado には、クロスサイト リクエスト フォージェリ保護、HTTPS、Cookie などのセキュリティ機能があります。同じライブラリには認証サポートが組み込まれています。
- スケーラビリティ: Tornado の使用中に、必要に応じて容量を増やしたり、サーバーを追加したりできます。
- WebSocket のサポート: 組み込みの WebSocket 実装を通じて、サーバーとクライアントの間でリアルタイム通信が行われます。
トルネードはあなたにぴったりですか?
Tornado は、高パフォーマンスの Web サービスを構築したい場合に最適なオプションです。この Python フレームワークは拡張性が高く、ノンブロッキング I/O 機能により、大量の同時接続を処理するサービスを構築する場合に最適です。
Tornado は、大きなファイルの処理や外部 API からのデータのフェッチなど、大量の I/O 操作を処理するアプリケーションにも適しています。
キュービックウェブ
CubicWeb は 、開発者がオブジェクト指向設計原則に従ってアプリケーションを構築できるようにするセマンティック Web アプリケーション フレームワークです。

このフレームワークには、開発者が強力なアプリケーションを構築するために使用できる一連のライブラリとツールが含まれています。
CubicWeb には次の機能が満載です。
- 再利用可能なコンポーネント: アプリ全体でコンポーネントを再利用することで、開発時間を節約できます。
- クエリ言語を使用する: CubicWeb はバックグラウンドでクエリ言語である RQL を使用します。
- 複数のデータベースとの互換性: Mercurial、LDAP ディレクトリ、および SQL データベースとの CubicWeb の互換性を活用します。
- カスタマイズ可能: CubicWeb は柔軟でカスタマイズ可能なため、アプリの動作を制御できます。
CubicWeb はあなたに適していますか?
CubicWeb は、柔軟なクエリ機能とデータ モデリング機能を必要とするアプリを構築する場合に適しています。したがって、CubicWeb を使用して、ソーシャル ネットワーキング、知識管理、および科学データ管理アプリケーションを構築できます。
結論
大小を問わず、Python フレームワークが不足することはありません。小規模なプロジェクトではほとんど何でも対応できますが、エンタープライズ アプリケーションには、これらのフレームワークの多くでは満たせない要求があります。私に言わせれば、エンタープライズ開発というと、Django (ある程度)、Zope、TurboGears が思い浮かびます。その中でも私はTurboGearsに傾いています。
そうは言っても、十分な価値のあるアーキテクトであれば、マイクロフレームワークを手に入れてアーキテクチャを展開することができます。そして、これは実際に起こっていることのほとんどであり、これが Flask や同様のアイデアの成功を説明しています。
初心者の場合は、 このオンライン コースが Python の学習に役立ちます。
次に、API を構築するための特殊な Python フレームワークのいくつかを調べます。