#Pythonのフレームワーク
pythonにも他のプログラミング言語と同様に、様々なフレームワークが存在する。
・Bottle
・Django
・Flask
・Tornado
・CherryPY
・Pyramid
・Plone
Pythonには以上のようなフレームワークが存在するが、初心者向けであるBottleと有名なDjangoを比較した。
#Bottleの特徴
公式サイト
PythonのWebフレームワークであり、bottle.pyという1つのファイルで構成されていて、他のライブラリへの依存がないのが特徴。構造が非常にシンプルで初心者にも使いやすいフレームワークとなっている。大規模な開発より、小規模で簡単Webアプリケーション作成に向いているフレームワークである。
#Djangoの特徴
公式サイト
実用性が高いのが特徴で、Webアプリケーション開発でよく使われる「ユーザ認証」「管理画面」「サイトの案内ページ」「RSSフィード」といった機能が標準で含まれている。開発実績もあり、InstagramやPinterstといったWebアプリの開発にもDjangoが使われている。
#2つを評価・比較
評価基準は下記を参照
評価基準
#Bottle
###使用感
Bottleでは、MVCモデルを使用していないため、独自にオブジェクト指向型の設計を行う必要がある。そのため他のフレームワークと比べて独自性が高い。
###拡張性
Bottleはプラグインが約14しか存在しないため拡張性は非常に低い。
###日本語資料数
Bottleの資料数は約80件と少なく、英語資料の方が多いため日本人が開発を行うにはハードルが少し高い。
#Django
###使用感
Djangoでは、MVCモデルではなくMTV(Model, Template, View)モデルを採用している。双方類似している部分はあるが、CakePHPが、独自性が高い使用感となる。
###拡張性
Djangoは約1500 のプラグインが存在し、拡張性が非常に高く幅広い開発を行うことができる。
###日本語資料数
Djangoの資料数は約500件と非常に多く、日本人でも開発が行いやすい。
Bottleでは、SQLインジェクションがリスクレベルhighで検出された。コードの自動生成がないため、バインド機構やエスケープ処理などのセキュリティコードもユーザ自身が記述する必要がある。
Djangoではディレクトリトラバーサルがリスクレベルhighで検出された。使用したバージョンは2.0.1であるが、これよりも古いバージョン(1.4.7や1.5.3)でもディレクトリトラバーサルの脆弱性の報告があった。このことから、フレームワークのバージョンアップだけでは対策としては不十分である可能性がある。対策としては、まず最新のバージョン(バージョン2.0.2 2018年2月現在)へアップデートする。
他にもフレームワークに頼らない一般的な対策として、ユーザ自身が外部からファイル名を指定できないようにファイル名の固定や、ファイル名を番号に変換し間接指定するように仕様を変更する。ファイル名にディレクトリ名を含まないようにする。ファイル名を英数字に限定し、攻撃で使われる記号文字の影響を受けないようにするなどの対策を施す必要がある。
#総合比較
Bottleの導入はDjangoより簡易的に行えるが、拡張性が極端に低い。理由としては、Bottleが提供するプラグイン数は少ないが、独自でプラグインを開発できるため少ないのではないか。またBottleは初心者向けのフレームワークだが、Djangoより有名でないため、プラグインの開発数やプラグインを提供元が少ないと考える。
またプログラム構造ではMVCモデルを使用していないため、大規模プロジェクトには向いていない。ただし、簡易的なアプリケーションを作成する際は、導入が簡易的に行うことができ、処理が速いため言語知識の実践学習に向いていると考える。
Djangoは日本語資料が非常に多く、日本人でもプログラム開発を快調に進めることが出来る。ただし、MVCモデルではなく、MTVモデルを使用するため、既存の知識だけではフレームワークの使用は難しいDjango専用の知識・技術を深める必要がある。Bottleで言語知識を習熟し、Djangoを使用することで、プログラム開発が快調に進むと考える。