「Python」でWebサービスを開発したい人は、Webフレームワークを活用して開発する事が多いと思います。
この記事では、PythonのWebフレームワークとして有名な「Django」、「Flask」等を取り上げ、特徴について比較していきます。
- 「Django」と「Flask」が人気
- 大規模の開発は「Django」
- シンプルな開発は「Flask」
【Django】と【Flask】の比較
まずは、「Django」と「Flask」の比較をまとめてみましょう。
項目 | Django | Flask |
読み方 | ジャンゴ | フラスク |
発表 | 2005年 | 2010年 |
開発者 | Adrian Holovaty Simon Willison | Armin Ronacher |
ライセンス | BSD | BSD |
求人数 | ★★★★☆ | ★★★☆☆ |
チュートリアル | 投票アプリ | ブログ |
特徴 | ・フル機能 ・データ投入が楽 | ・最低限の機能 ・軽量 |
使用例 | Instagram Udemy | Netflix Lyft MIT |
テンプレート エンジン | Django独自 | Jinja2 |
管理画面 | 自動生成 (Django admin) | 無し |
GitHubスター数 (2019/11) | 約45,000 | 約47,000 |
StackOverflow タグ数(2019/11) | 約211,000 | 約31,000 |
「Django」と「Flask」の使用例は、stackshare(Django)とstackshare(Flask)から見れます
Web Frameworkとは?
Webフレームワークとは、Webアプリケーションの開発を効率化するための機能が詰まったツールの事です。
フレームワークとは、「枠組み」や「骨組み」という意味です。フレームワークの決められたルールに沿ったプログラミングすることで、書くコードの量を少なくし、作業する速度を上げる事が可能となります
Webフレームワークが提供する機能の具体例
例えば、Webアプリケーションは、「ユーザー管理機能」、「ログイン機能」といった、よく使われる機能があります。これを、毎回1からコードを書くのは大変です。
フレームワークを使用する事で、大変な作業をスキップする事が出来ます。
フレームワーク=炊飯器
例えば、「起承転結」や「5−7−5」などは、フレームワークの一種です。文章の流れを決めてしまう事で、内容やリズムといった他の事に集中出来ます。
ちょっと乱暴ですが、フレームワーク=「炊飯器」と考えてみても良いです。
高機能な炊飯器(Ruby on RailsやDjango)もあれば、ただ炊けるだけで良い最低限の機種(FlaskやExpress)があります。
炊飯器に頼りすぎると、
「ちょっとお焦げが食べたいんだけど」
と言われた際に、どうカスタマイズしていいか分からず右往左往する人も多いので、慣れるに従って、作動原理を理解していきましょう。
「フレームワーク」と「ライブラリ」の違いって?
ちなみに、「フレームワーク」と似た様なものとして、「ライブラリ」がありますが、大きな違いはコントロールの「主導権」(Inversion of Control)です。
「ハリウッドの原則」って面白い例えもありますが、もう少し詳しく知りたいぞ!って人は、以下の記事も覗いていって下さい。
【Django】大規模な開発に最適
PythonのWebフレームワークの中でもっとも人気なのが「Django」。「ジャンゴ」と読みます。
米国のLawrence Journal-World社のWeb開発部門である「World Online」が開発したWebフレームワークで、基本的なWebの機能である、「ユーザー認証」、「サイトマップ」、「RSSフィード」などの機能を備えています。
大規模な開発を行うのであれば、「Django」を使うのがおすすめです。
「Django」の特徴
○必要な機能が一通り揃っている
○管理サイトでデータ投入可能
○セキュリティに配慮
必要な機能が一通り揃っている
「Django」は、Web開発に必要な機能が一通り揃っており、基本はDjangoだけで完結します。これを、「フルスタック・フレームワーク」と呼びます。
例えば、Webフレームワークでよく使用される「URLディスパッチャー」「O/Rマッパー」「テンプレートエンジン」などの機能が備わっています。
ちなみに、Djangoは、「MTV(Model – Template – View)」という考え方をとっています。
本質的には同じなのですが、「MVC(Model – View- Controller)」と何が違うの?と思った方は公式サイトFAQや以下の記事を参考にして下さい。
管理サイトでデータ投入・検証が可能
管理サイトだけで、データ投入、データ検証が出来ます。
「Ruby on Rails」で開発した事がある人は、この便利さに驚くと思います。特に、プロトタイプの作成で、生産コストが劇的に下がります。
セキュリティー面に配慮
「SQLインジェクション」や「クロスサイトスクリプティング」などの基本的な脆弱性について考慮されており、セキュリティー面も配慮されています。
「Django」公式チュートリアル
Django公式サイトのチュートリアルでは、簡単な「投票 (poll) アプリケーション」を作成します。
「Django Girls」
「Django Girls」とありますが、女性に限らず、アプリケーションを初めて作る全ての人におすすめのチュートリアルです。
ステップバイステップで学べる様に、Djangoは元より、インターネットの仕組み等から丁寧に解説されています。
有志の方によって日本語に翻訳されているので、英語が苦手な人も安心です。
ちなみに、Ruby on Railsにも「Rails Girls」というコミュニティーがあります。
Rails Tutorialを始める前にサクッと全体像を掴むに最適なので、Ruby on Railsを始めたばかりの初心者の方にはこちらもオススメです。
プログラミング初心者でも安心、Python/Django入門講座
プログラミング初心者でも安心、Python/Django入門講座 は、「Python」初心者に最もオススメなUdemyの講座です。
動画の時間は約15時間程度で、文字列やリスト、辞書の操作といった「Python」の基本から、「Django」の開発まで段階的にステップアップしていきます
自分は、この講座でDjangoを最初に学びました。
Webフレームワークって何?って状態からでしたが、「ブログ」や、「動画投稿サイト」、機械学習と組み合わせた「手書き数字の認識アプリ」等の結構本格的なサイトが出来た時は、感動しますよ!!
プログラミング初心者でも安心、Python/Django入門講座
講師の滝澤さんは最初の言語は「Python」と「Ruby」の2択で迷ったそうですが、Pythonの方が構文が美しいと感じたのが最終的な決定打になったそうです。
BlogにはDjango絡みの役に立つ情報が書かれているので、Udemyの講座が終わった後に併せて読む事をオススメします。
【Flask】シンプル・軽量で初心者にオススメ
「Flask」はマイクロフレームワークと呼ばれており、必要最低限の機能を備え、それ以外は拡張機能で補う事で開発するフレームワークです。
小規模・中規模なWebアプリケーションの構築に向いています。
2010年に生まれた「Django」より新しいフレームワークで、「Flask」(フラスコ)という名前は、「Bottle」(ボトル)に対する言葉遊びで命名されました。
「Flask」の特徴
○軽量
○初心者に分かりやすい
×求人数は少なめ
必要最低限のコア機能
必要最低限のコア機能に、拡張機能を組み合わせて作成していくのが「Flask」の設計思想です。
コア機能は、ルーティング、リクエスト処理、blueprint モジュール程度であり、初心者にも分かりやすいです。
拡張機能が豊富
ORM (Object Relational Mapping)、キャッシュ、認証などは後から機能を「追加」する必要があります。
例えば、ログイン処理を入れたい場合は、Flask-Loginを入れるといった具合です。
Flaskの拡張機能は こちらから 確認ができます。
「Flask」公式サイト
ちなみに、「Django Girls」はありますが、「Flask Girls」はありません。
FlaskでWebアプリを作る方法を学ぶ
「Python and Flask Bootcamp: Create Websites using Flask! 」では、「Flask」を活用してWebサイトを作成していきます。
最終的には、「Company Blog」が出来上がります。
Webアプリ作成に必要な知識が全部盛り
「Flask」だけでなく、「HTML/CSS」、「Bootstrap4」、「Jinjaテンプレート」、「SQL」との連携など、全126レクチャー、約20時間の大ボリュームの講座です。
HTML/CSSの基礎を「Progate」で学んだ次にやるのがオススメです。
DjangoとFlaskをWebサービスで学習したい人
DjangoとFlaskをPythonの基礎からプロレベルまで学びたい人は、「PyQ™(パイキュー)」もオススメです。
PyQはProgateと同じく、ブラウザ上でコードを実行して学習する事が出来、Progateより格段ハイレベルな内容まで扱っています。
自分もPython初心者の頃は、業務に1日も早く必要だったため、なりふり構わず、プログラミングスクールにPyQ、Courseraのスタンフォード大学講座を同時受講して集中学習した事があります。
PyQは実際に手を動かす事前提のサービスなので、あやふやな理解を定着させるのに非常に助けになりました。(やっぱり理解を深めるには、コードを書いてエラーと格闘するのが一番です)
ライトプランで月2,980円のサブスクリプション型の課金なので、極力集中して短期間で一気に学習を進めましょう。
独学でWebエンジニアを目指したい人
独学でWebエンジニアを目指したい人は、以下の記事を参考にして下さい。(かなりの長文になってますが、今後も加筆していきます)
【独学】未経験からWebエンジニアになるプログラミング勉強法【2019完全版】
プログラミングスクールで学びたい人
実は、DjangoやFlaskを学ぶ事が出来るプログラミングスクールは多くありません。
超実践型プログラミングスクール【.pro】は渋谷に教室を持つ、少数精鋭型のプログラミングスクールです。
面白いのが、毎週土曜日に4時間の「プログラミング特訓」を行うという珍しい受講形態。
基本的にプログラミングは独学でも全然OKです。
ただ、自分で学習を習慣化しにくい人は挫折してしまうという所がどうしてもネックです。
ですので、こういった強制的にアウトプットをさせる仕組みを作る形でプログラミングスクールを受講するのは全然有りだと思います。(ただ、コスパは悪いですよ)
6ヶ月間エンジニアからフィードバックを貰いながらアウトプットを続ける事が出来れば間違いなく実力がつきます。(この記事を読んでいる人はリテラシーが高い人だと思うので大丈夫だと思いますが、数週間でプロになれるとか絶対にダメですからね!)
他にも、自分で直接メンターを付けるMENTAというサービスもあります。(圧倒的に安くはありますが、しっかりと自分で見分ける必要はあります)
Python学習のオススメサイト
その他、Pythonを独学する上でのレベル別オススメ 学習サイトについては、こちらを参考にして下さい。
【Python独学】初心者から上級者までレベル別のオススメ学習サイト
英語が苦手なら「Django」がオススメ
「Flask」の方がシンプルで簡単ですが、日本語でのドキュメントや解説は圧倒的に「Django」の方が豊富です。
なので、日本語でまず学びたい人は、「Django」を選択するという選択肢もあります。
「Django」を日本語で学ぶなら、以下の書籍がオススメです。
タイミングとしては、チュートリアルをやりながら「現場で使えるDjangoの教科書(基礎編)」を読み、チュートリアルが終わった段階で「現場で使えるDjangoの教科書(実践編)」に進むのが良いです。
プロフェッショナルプログラミングは、Django特化というよりは、Pythonのパッケージ作成、バージョン管理システム、ドキュメントの書き方、テスト、CI、デプロイと実務をする上で必要な幅広い話題を扱っている本です。
既にそんなの当たり前という人は特段読む必要はありません。
「Django」と「Flask」が人気
エンジニア向けのQ&Aサイトの「Stackoverflow」の質問数の推移を見てみましょう。
PythonのWebフレームワークでは「Django」の質問数が一番多く、次に「Flask」が続きます
「Django」と「Flask」の求人は?
PythonでWeb開発の仕事を考えるのであれば、「Django」をオススメします。
例えば、WANTEDLYの求人を見てみましょう。「Django」が250件に対して「Flask」は98件と、求人数は「Django」が多いです。(2019年1月現在)
とはいえ、「Ruby on Rails」に比較すると求人数は1桁違うので、いかに「Ruby on Rails」が人気か良く分かりますね。。。
Webサービス開発のトレンドを知っておく事も大切
ここまで読んでも、「Django」か「Flask」か悩んでいるあなた。
こういう場合は、Webサービス開発のトレンドから考えるのも一つの手です。
例えば、現在は、フロントエンドはSPA、バックエンドはマイクロサービスを中心に据えた開発が主流です。
このトレンドが続くとすると、全盛りの「Django」より、「Flask」の様な軽量なフレームワークの需要が増えてきそうだなという風に予想出来ます。
ただ、「Flask」であるべき絶対的な理由は無いです。技術トレンドやビジネス戦略も含めて総合的に考える事が大切です。
その他のWebフレームワーク
PythonのWebフレームワークではDjangoとFlaskを押さえておけば基本的にOKですが、その他のWebフレームワークについても簡単に紹介しておきます。
【Bottle】最もシンプルで軽量
「Bottle」は、PythonのWebフレームワークの中で最もシンプルで軽量なフレームワークです。残念ながら、「Bottle」を使用した仕事、求人案件は見かけないので、勉強用としての使用になります。
「Bottle」の特徴
シンプルで軽量
「Bottle.py」という1ファイルだけで動作します。サーバへのデプロイも簡単で、ソースコードも見やすいという特徴があります。
WSGI(Web Server Gateway Interface)
Webサーバーへのリクエストを複数のWebアプリケーションを利用して処理するシステムを実装することができます。
「Bottle」公式チュートリアル
【Dash】データ可視化に最適
「Dash」は、Flask, Plotly, React.jsをベースに開発されたPythonのWebフレームワークで、特にデータ可視化をする上で威力を発揮します。
Dashの特徴
データ可視化に優れる
Pythonのデータ可視化ライブラリである「Plotly」をベースに開発されているだけあって、簡単に美しいグラフ等を出力する事が出来ます。
「Dash」公式チュートリアル
Dashを学ぶのにおすすめ
Interactive Python Dashboards with Plotly and Dash は、「Plotly」や「Dash」といったPythonのデータ可視化について特化した講座です。
自分も、株価をAPIで取得し、表示する先ほど上で紹介したグラフをたった1時間程度で作る事が出来ました。何気に凄くないですか?
基礎的なHTML/CSSとPythonの知識は必要ですが、Pythonのデータ可視化について集中的に取り上げた講座は少ないので非常に貴重です。
Interactive Python Dashboards with Plotly and Dash
仕事でデータ可視化は重要
仕事では、データ分析はもちろん、分析結果を経営者層に分かりやすく伝え、意思決定をして貰うかが最重要です。
言葉で長々と説明するよりも、視覚的に表現されたグラフを示す方が、何倍も早く納得してもらえるので、仕事に活用したい人にはオススメです。
【Tornade】
Tornadoは、Friend Feedによって開発され、Facebookに吸収されたのちにオープンソース化されたWebフレームワークです。
Webフレームワークとしても充分な機能がありますが、Webサーバとしての側面もあります。
リアルタイム通信
リアルタイムでの通信を行う「WebSocket」がサポートされています。「node.js」のPythonでの代替手段としても人気です