何かを始める際に必ずできてくる「どっちが良いのさ?」問題。
例外なく、Python でウェブアプリを作るときにもでてきます。
Python アプリつくりたいけど、ウェブフレームワークは「Django か Flask どっちが良いのさ?」問題。
結局どっちも同じことができます。
開発者の向き・不向きや、好き・嫌いの問題など色々な要素があると思います。
ひとまず調べてみましたので、参考にしてください。
結論
一言で「海賊は Flask を使い、海軍は Django を使う」です!
(このタイトルを参考にしました: Pirates use Flask, the Navy uses Django)
- Django 向きな人
- しっかりとルールに沿った開発がしたい
- がっつりフル装備のアプリを作る予定の場合 (例: 認証や DB を使う)
- ウェブフレームワーク、MVC、正規表現の知識がすでにある
- Flask 向きな人
- シンプルなウェブアプリをちゃちゃっと作りたい
- CRUD 少なめ、シンプルな API サーバー作りたい
- ウェブフレームワークの勉強を始めた初心者
Django をざっくり知る
基本的に、デフォルトで必要な機能を全て持ち合わせたのが Django です。
「どんなアプリでも、作りたいときに作れるようにする」ために、フル装備となっています。
特に、認証や ORM (object-relational mapper)は、デフォルトで付いています。
管理者用のページもあり、各種操作が GUI からできる ようにもなっているます。
DB は、メジャーなものは全て対応しています。
- PostgreSQL
- MariaDB
- MySQL
- Oracle
- SQLite
Django 利用者の中では、DB を PostgreSQL なのか MySQL なのか対決があるようですが、PostgreSQL の方が人気のようです。
また、フルフル装備であるため、セキュリティ対策も万全にとられています。
例:
- クリックジャッキング
- クロスサイトスクリプティング
- SQL インジェクション
とはいっても、良いことばかりではありません。
フル装備なため、初心者にはとっつきにくければ、シンプルなアプリを作るには複雑すぎたりしています。
フォルダ構成
プロジェクトの作成は、django-admin startproject
で簡単に作成できます。
実行後は、下記のような構成でファイルが生成されます。
[Project Top]
│-- db.sqlite3 # デフォルトの DB
│-- manage.py
│
└───
│-- asgi.py
│-- settings.py
│-- urls.py
│-- wsgi.py
└-- __init__.py
そして、機能単位 (ブログ機能、支払い機能、予約機能など) でアプリというものを作るため、python manage.py startapp
でアプリ作成に必要なファイルも作成します。
[App_Top]
│-- admin.py
│-- apps.py
│-- models.py
│-- tests.py
│-- views.py
│-- __init__.py
│
└───migrations
__init__.py
これをベースに、コードを書いていくことになります。
慣れれば使いやすいですが、慣れまでの道のりは Flask に比べると簡単ではないです。。
(初心者は、これらのファイルの内容を理解する必要があるので、まずそこで一気にハードルがあがりますよね。)
Django を利用している企業
そんな Django を使っている企業がこちら。
Stackshare.io からその他の企業が確認できます。
- The Washington Times
- Disqus
- Bitbucket
- Mozilla
Django が得意なこと、苦手なこと
これまでの内容を簡単にまとめると、下記のようになります。
- 得意なこと: 中規模なセキュアなアプリ製作
- 苦手なこと: DB が必要のない小規模なウェブアプリ製作
Udemy で Django 学ぶ
ここまでで、Django についてはなんとなくわかったと思います。
もう少し具体的に知りたい場合は、実際にアプリを作ることをお勧めします。
下記の Udemy コースではアプリを 3 つ作成し、外部サーバーで公開するところまで網羅しています。
【徹底的に解説!】Djangoの基礎をマスターして、3つのアプリを作ろう!
Flask をざっくり知る
Flask は、マイクロフレームワークと呼ばれており、必要最低限の機能しかありません。
コンセプトとしては「必要最低限のコア機能 + 拡張機能でアプリを作成できる」になります。
コア機能は、ルーティング、リクエスト処理程度です。
Django と違い、ORM (Object Relational Mapping)、キャッシュ、認証などは、必要に応じて機能を「追加」する必要があります。
なので「できない」わけではないです。
ありがたいことに、既に先人が必要な機能をライブラリとして提供していますので、「車輪の再発明 (re-invent the wheel)」をしなくて良いのです。
拡張機能は こちらから 確認ができます。(もちろん pip install でインストールできます。)
Flask で最低限必要なこと
下記のファイルを作成して、flask run
とするだけです。
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World.'
Django と違って、フォルダ構成もなく、ものの数行で始められます。
詳しくは下に書いているので、興味があるかたは見てください。
シンプルな分、MVC などわかっている人からすると、フォルダ構成はどうすれば良いの?と疑問になると思いますが、こちらに関しては特に決まりはありません。。
その自由さが好きか嫌いかで Flask なのか Django なのかで分かれそうですね。。
Flask を利用している企業
そんな Flask を使っている企業がこちら
Stackshare.io からその他の企業が確認できます。
- Netflix
- Lyft
- Zillow
- Twillio
Flask が得意なこと、苦手なこと
Flask 開発者の、アーミン・ロンチャー (Armin Ronacher) さんが YouTube (https://youtu.be/1ByQhAM5c1I) で話をしていますが、
- 得意なこと: 静的なコンテンツが主なサイト: wiki やフォーラム
- 苦手なこと: ハイパフォーマンスな非同期 IO が必要なウェブアプリ
になります。
Netflix って動画ストリーミングしてハイパフォーマンスなのでは?思ったのですが、使われている場所が、監査ツールの API サーバーとして利用されているようです。(参考: Python at Netflix )
なっとく。。
Udemy で Flask を学ぶ
下記のコースでは、比較的規模の大きい SNS を作成しています。
シンプルな 1 ファイルから作成できる手軽さがある Flask ですが、この規模の開発も問題なくできることがわかる内容となっています。
Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~
その他のウェブフレームワーク
実は、Python のウェブフレームワークは他にもイロイロあるんです!
- フルスタック系
- マイクロフレームワーク系
- 非同期系
以外にもたくさんあって驚きです。。。