この記事ではプログラミング言語の一つである「Python」のWebフレームワークについて紹介、解説していきます。
筆者は下記で紹介しますが、Webフレームワークの中で「Django」と「Flask」を利用して仕事をしていました。
その中での使いやすい所なども紹介できればと思います。
プログラミング言語のPythonについて出来ることなどが気になる方は下記の記事を参考にしてみてください。
Webフレームワークとは
Webフレームワークとは、Webアプリケーションの開発を効率化するための機能がまとまっているツールのことになります。
「フレームワーク」という言葉には「枠組み、骨格」という意味があります。
Webフレームワークとはすなわち、「枠組みを使ってプログラミングができる」ということになります。
Webフレームワークを利用することで、プログラマーが書くコード量が少なくなりバグなども一から作成する時より減り、作業するスピードも上げることが可能になります。
ただ、フレームワークのみで全てのコードを記述することはほとんどありません。
一部をフレームワークで補い、残りはエンジニア自身でコーディングしていきます。
Webフレームワークを使うメリット
Webフレームワークを使用してアプリ開発などを行う際のメリットとしては以下のような点が挙げれます。
開発効率を上げられる
フレームワークに備わった機能を活用することで、開発にかかる作業を効率化させることができます。
Pythonでは「Django」というフルスタックのフレームワークを使えば、必要な機能が一通り揃っているので、大規模な開発でも作業にかかる時間を大幅に短縮できます。
Pythonのフレームワークである「Flask」を利用すれば、小規模~中規模の開発時間を短縮することが可能です。
開発にかける時間や金銭的なコストをできる限り削減したい企業などにとっては、フレームワークの活用は大きく役立つでしょう。
また、個人でアプリ開発などをしていて、複数の作業を同時進行させるために作業効率化が必要なエンジニアにとっても、フレームワークが手助けとなるはずです。
ソースコードの書き方が統一されやすい
複数名のチームで開発を行う場合、チームメンバーにフレームワークのルールを守らせることで、ソースコードの統一化を図りやすくなります。
ソースコードの書き方は、エンジニアによって若干異なります。
自分以外の人が書いたコードを見ると、どんな動作・処理を意味しているのかいまいち理解できないということも珍しくありません。
特に、変数や関数を識別するためにつけた名前に一貫性がないと、コードが読みにくくなってしまうでしょう。
命名規則などを統一化することで、保守・点検、あるいは修正が必要になった時でも対処しやすいというメリットがあります。
コーディング量とエラーを減らすことが望める
フレームワークを使用することで、エンジニアコーディング量を減らすことができます。
これにより単純に作業速度が上がり効率化が図れるのは先ほど説明した通りです。
さらにもう1つ、作業効率化の面でメリットがあります。
エンジニアが手作業でコードを入力すれば、どうしてもミスが発生してしまいます。
フレームワークを使うことで、エンジニアのコーディング量が減り、人的なミスを発生を減らすことにもつながります。
結果、エラーの修正作業が減りますので、作業効率化になるのです。
Webフレームワークを使うデメリット
ソースコードを書く手間を省き、作業を効率化してくれるフレームワーク。
便利なツールではありますが、その一方でデメリットもあるものです。
ここからは、Webフレームワークを使うことのデメリットも紹介します。
フレームワークの使い方を覚えるのに時間がかかる
フレームワークの使い方を覚えるために、時間がかかることが予想されます。
一度使い方を覚えてしまえば便利なフレームワークですが、そのためには時間をかけなければなりません。
プログラミング未経験者の方は、なおさら時間が必要でしょう。
特に、使用者の少ないフレームワークは参考となるサイトや書籍が少ないことがあります。
少ない情報の中で使い方を覚えるとなると、かかる労力も大きくなりがちです。
プログラムの仕組みがわからなくてもコードが書ける
フレームワークは、プログラムの仕組みを理解していなくてもコードが書けてしまう優れもの。
その反面、エンジニアやプログラマーとしてのスキルを身につけたいのであれば、フレームワークに頼りすぎるのは禁物です。
1つのWebサービスやアプリケーションを構築するだけであればフレームワークを駆使して作っても問題ありません。
もし、エンジニアやプログラマーとして様々な開発に関わりたいのであれば、自分の手でプログラムを組めるスキルも必要となります。
また、ソースコードのすべてをフレームワークを使って入力するということはほとんどありません。一部はフレームワークを使い、残りは手作業で入力していきます。
どうしても、フレームワークを使わないプログラミングの技術を身につける必要はあります。
カスタマイズできる範囲が限られる
アプリケーションを作っているうちに、オリジナルのカスタマイズがしたくなることもあるでしょう。
その場合、フレームワークの内部をいじり、自分でコードを書かなければなりません。
結果、フレームワークを使うメリットがなくなってきてしまうこともあるでしょう。
あらかじめカスタマイズをするとわかっているのであれば、フレームワークを使わずにコードを書いた方が効率的かもしれません。
Pythonの主なWebフレームワーク
PythonのWebフレームワークとしては、主に以下のようなものがあります
- Django
- Bottle
- Flask
- Tornado
- CherryPy
- Pyramid
- TurboGears
- Pylons
- Web2py
- Sanic
- Dash
この中でも人気があり、使用されることの多いフレームワークは
- Django
- Bottle
- Flask
- Tornado
の4つです。
おすすめのPythonWebフレームワーク
ここからは、先ほど紹介した人気でシャアの大きいフレームワーク4つの特徴について解説します。
大規模開発におすすめのもの、開発の速度を重視するときにおすすめのものなど、フレームワークごとに使うべきタイミングは変わるのです。
自分がどのような開発を行いたいのかを考えながら、各フレームワークの特徴を比較して、インストールしてください。
Django
Djangoは米国のLawrence Journal-World社のWeb開発部門である「World Online」が開発したWebフレームワークです。
Python Webフレームワークの中でもっとも人気が高いのがDjango。
「Pythonを使った開発をするのであればDjangoをマスターしておくべき」とさえ言われています。
DjangoはWebフレームワークでよく使用される「URLディスパッチャー」「O/Rマッパー」「テンプレートエンジン」などの機能が多数備わっている、「フルスタックフレームワーク」です。プログラミングで使う機能が一通りそろっています。
Djangoのもう1つの特徴として、CRUDフォーム生成が手軽に行えるということがあります。
データベースとの接続を制御するO/Rマッパーの定義にCRUDフォームを制御するための情報を埋め込めば、adminと呼ばれるデータ編集用のフォームが自動で生成できるのです。
自動生成ができる分、カスタマイズの自由度が低いことがネックとして挙げられます。
大規模な開発を行うのであれば、Djangoを使うのがおすすめです。
Bottle
Bottleは、Python Webフレームワークの中で最もシンプルで軽量なフレームワークです。
「Bottle.py」という1ファイルだけで構成されているのもメリットの1つ。サーバへのデプロイも簡単で、ソースコードも見やすいという特徴があります。
フレームワークの勉強用としても、実際の開発にも向いているWebフレームワークです。
ただ、現在の日本では、Bottleを使っての仕事、求人案件は、日本ではほとんど見られません。
仕事に使うというよりも、Pythonのフレームワークを学習したい人におすすめです。
Flask
Flaskは、小〜中規模のWebアプリケーション構築に向いているWebフレームワークです。軽量なフレームワークの中ではもっとも人気があります。
Flaskは、2010年のエイプリルフールをきっかけに生まれた、少し変わったWebフレームワーク。
もともとは冗談のつもりだったのですが、作者であるオーストラリア人のArmin Ronacherが熱狂的な反響に応え、本物のフレームワークにしたという誕生の経緯があります。
動作が軽量なため、比較的簡単に扱えるのがメリットです、小規模なサイトならば短い期間で作れることから人気を集めています。
Tornado
Tornadoは、FriendFeedによって開発され、Facebookに吸収されたのちにオープンソース化されたWebフレームワークです。
リアルタイムでの通信を行う「WebSocket」がサポートされているため、その目的で使用されることや、非同期Webサーバである「node.js」のPythonでの代替手段としても人気があります。またWebサーバとしての側面もあるのも特徴です。
Apacheではなくnginxと一緒に使用されるのが一般的。静的ファイルの配信においては他のWebフレームワークよりも高速で動作します。
その他のPythonWebフレームワークの特徴
上記4つ以外のフレームワークについても特徴を簡単に説明していきます。
CherryPy
CherryPyは軽量なPython Webフレームワークです。
オブジェクト指向のようにコードが書け、url Routingとオブジェクトツリーを対応させるならばCherryPyを使うのがおすすめです。
Pyramid
PyramidはFlaskのように軽量でありながら、Flask以上に機能の多いフレームワークです。
イメージとしてはDjangoとFlaskの中間のようなフレームワークがPyramidと言えるでしょう。
TurboGears
TurboGearsは2005年から開発が始まったフレームワークです。AjaxやWebサービスといったWeb技術を体験できるフレームワークとして知られています。
TurboGearsの主な役割としては、ライブラリ間の結びつきを強めることがあります。
O/Rマッパー、テンプレートエンジンなどの部品は必要に応じて置き換え可能です。
Pylons
Pylonsは2006年に開発された比較的新しいフレームワークです。
TurboGearsと同様ライブラリの結びつきを強める形で開発されたフレームワークですが、TurboGearsの先を行く機能を備えています。
TurboGearsはMVC(「モデル・ビュー・コントローラー」のこと。ユーザーインターフェースを持つアプリケーションソフトウェアを実装するためのデザインパターン)のCをCherryPyに依存しているため、自由度の面で高くありません。
Pylonsではリクエストディスパッチャが置き換えでき、このコントローラーの部分の置き換えも可能です。
また、Pylonsはいち早くWSGI(WebサーバとPython製のアプリケーションの通信方法の標準を定めた仕様)に対応したフレームワークでもあります。
Web2py
Web2pyはオープンソースフレームワークで、データベースを使用するタイプのWebアプリケーションを、アジャイルで開発するなどの目的で使われます。
Web2pyはセキュリティ面に重点を置いたフレームワークです。
デフォルトで入力値の検証を行ったり、出力のエスケープを行う仕組みなどを備えています。
このような機能は、SQLインジェクション、クロスサイトスクリプティング、安全でないオブジェクトの直接参照といった脆弱性に関する問題の防止を目的としています。
Sanic
公式サイトでも「Flask-like」と謳っているように、Sanicは先ほど紹介したFlaskに似ています。インターフェースもFlaskのものとそっくりです。
Flaskから移行する場合は扱いやすいフレームワークとなるでしょう。
Sanicは著名なイベントループライブラリ「uvloop」を利用しており、Node.jsのような非同期I/Oによる高効率なHTTPリクエスト処理が可能なフレームワークです。
Dash
Dashはplotlyを利用して可視化されたデータを組み込むことができるフレームワークです。データを視覚的に処理するアプリケーションの開発などにはDashが向いているでしょう。
PythonのWebフレームワーク勉強方法
実際にPythonのWebフレームワークを使うにはどのようにすればいいのでしょうか。
ここからは、フレームワークの1つDjangoを例に、Webフレームワークの使い方を身につける方法を解説します。
Django公式のチュートリアルを利用する
Djangoには初心者向けに、使い方の公式チュートリアルが用意されています。基本はこの公式チュートリアルを使って、一連の使い方をマスターするのがいいでしょう。
日本語版もあるので、ガイドに従って進めていけば、環境構築とチュートリアルが同時に行えます。
筆者もDjango公式チュートリアルに沿って進めました。
その他Webサービスやチュートリアルサイト
以下のサイトなども参考になります。
Django Girls Tutorial
「プロンプト」「演算子」「関数」といったプログラミング使われる用語の解説をしながらDjangoのチュートリアルを学べる初心者向けのサイト。
PyQ
Pythonの学習サイトであるPyQでも一応勉強する事が可能です。
ただ、メインはPythonの学習となるので学習量が足りません。
Pythonの学習をしていてもし有料会員であればやってみても良いと思います。
書籍で勉強する
Djangoの使い方やに関する入門書なども多数発行されているので、書籍で勉強することもできます。ただ、自分のレベルにあった書籍を見つけるのは難しいかもしれません。
初心者ならば以下の書籍から始めるのがおすすめです。Djangoの入門書として、評価が高いです。
注意点としては、読者の想定が「Pythonを身につけている人」であるということがあります。プログラミング未経験者はまずPythonを習得することから始めたほうがいいでしょう。
筆者も基本は書籍ベースで知識をつけ、実際に作ってみて知識を定着させようとしました。
その際に利用したものやおすすめの書籍を紹介します。
上記は基本的なDjangoの使い方が記載しており、詳しく知りたい方や最初に知識をつけるにはかなりおすすめとなっています。
筆者もこちらを最初に利用しました。
動画教材で勉強する
動画教材で勉強するならばUdemyがおすすめです。
Udemyは世界中の講師が動画を投稿しているサービスです。
教材は買い切りのため、教材ごとに「何ができるようになるのか」が明確に設定されているので目的にあった教材が購入しやすいです。
ただ、通常時は2万円ほどするコースも多く普通に高いと思いますが、基本的にセール中に買うことで1,000~2,000円台で購入することができます。
筆者も買うときはセール中の時しか買いません。
筆者が買っているDjango学習用動画は下記になります。
【3日でできる】Django 入門 ( Python 3 でウェブアプリを作って AWS EC2 で公開!)
こちらは基礎的な勉強ができるのと、アプリのデプロイ方法が学べます。
【徹底的に解説!】Djangoの基礎をマスターして、3つのアプリを作ろう!(Django2版 / 3版を同時公開中です)
こちらも上記と同様に基礎的な部分を学ぶことができます。
また、簡単なアプリケーションを3つほど作り手を動かすことができます。
【画像判定AIアプリ開発パート2】Django・TensorFlow・Python・転移学習による高精度AIアプリ開発
こちらは画像判定のアプリケーション開発が中心となっています。そのためDjangoの基礎よりAIアプリ開発などの発展時に参考になると思います。
まとめ
今回はPythonのWebフレームワークを紹介していきました。
やはり開発では効率を上げるためフレームワークは必須となっています。
Pythonを学ぶ際はWebアプリを作成する際には、Webアプリケーションを勉強して是非開発効率の向上をしていきましょう。