【Python入門】フレームワークとは一体どのようなものなのか?



【Python入門】フレームワークとは一体どのようなものなのか?

プログラミングスクールを検討されている方やRubyに興味をお持ちの方なら一度は「フレームワーク」聞いたことがあるでしょう。
フレームワーク、日本語に訳すと「骨組み」ですがプログラミングにおける「骨組み」ちょっとイメージ湧きませんよね。
今回は、直感的に「フレームワーク」をイメージできるようくだいて解説させて頂きます。

目次
  1. 【Python入門】フレームワークとは一体どのようなものなのか?
  2. フレームワークとは
  3. 有名なフレームワークの年表
  4. フレームワーク事例
  5. フレームワークのメリット・デメリット
  6. 「フレームワーク」と「モジュール、ライブラリ」との関係
  7. 代表的なPythonのフレームワーク
  8. Pythonフレームワークの求人状況
  9. まとめ

【Python入門】フレームワークとは一体どのようなものなのか?

フレームワークとは

image

いきなりですが、「フレームワーク」ちょっと身近なものに例えてみますと、

  • ケーキに例えると・・・ホールケーキのスポンジ部分だけ。デコレーションや中身は自分次第
  • マンションに例えると・・・スケルトン状態。電源や給排水はあるが、間取りや内装は自分次第
  • スーツに例えると・・・オーダースーツ。「スーツ」というデザインはあるが素材や装飾、サイズは自分次第

という具合に、『目的達成のために必要な基本的な部分だけ』を用意されている状態をイメージすると「フレームワーク」分かりやすいと思います。 ただし、ケーキやスーツと違ってプログラミングにおけるフレームワークは「拡張可能」という非常に夢のあるツール。

「フレームワーク」といえば Ruby on Rails などの Webアプリ開発 を目的としたものが有名。

【プログラミングスクールでも取り扱いのある有名なフレームワーク例】

  • Ruby on Rails
  • CakePHP
  • Django
  • Spring など

フレームワークは、Web以外にも「機械学習」や「ゲーム」「デスクトップアプリ」「ブロックチェーン」「科学計算」など目的別に存在。 Pythonに限ってはWebアプリ以外に「機械学習」や「ゲーム」、「デスクトップアプリ」用のフレームワークが用意されていますね。

そのフレームワークの中身ですが、まずファイル群を見てみるとイメージ湧きやすいかもしれません。

【Webアプリ用フレームワークのDjangoの中身(一部)】

image

PythonのWebアプリ開発用フレームワークで有名な Django、なんと 2404のフォルダと 4107のファイルを有します。つまりフレームワークの全容および全機能を理解することは、ちょっと難しそうですね。これは Djangoに限ったことではなく Ruby on Rails や Cakephp などほかのフレームワークでも同じです。

【代表的なフレームワークの構成】

フレームワーク名 フォルダ数 ファイル数 容量
Django 2404 4107 47.6 MB
CakePHP 443 1416 12.6 MB
Ruby on Rails 783 3653 24.8 MB

ちょっと Djangoは大規模なフレームワークで全容がつかみにくいですが、逆に最小のフレームワークを見てみるとイメージできるかもしれませんね。Pythonにおける最小規模のフレームワークに「Bottle」があります。基幹プログラムの bottle.py では、Webサーバーとして機能し、Pythonプログラムとブラウザの橋渡しをしてくれます。つまりPythonのフレームワークの多くはWebサーバーの機能を有しているんですね。

その他には、MVCモデルを採用していたり、テンプレートが用意されていたり、デバッグ機能があったりなど。 1からWebアプリを作成するよりもフレームワークを使う方が、早く開発できる、というわけです。 ちなみにフレームワーク無しでWebアプリを作成した記事も紹介されていますが、その開発ステップは長いです。

有名なフレームワークの年表

image

すこしフレームワークについて分かってきたところで、フレームワークの歴史を確認してみます。

フレームワーク名 リリース 言語 用途
Ruby on Rails 2005年 Ruby Web
CakePHP 2005年 PHP Web
Django 2005年 Python Web
TensorFlow 2015年 Python 機械学習
Spring 2002年 Java いろいろ
WordPress 2003年 PHP CMSです

これほどまでにフレームワークが普及したキッカケは、Ruby on Rails と言われていますね。比較的学習難易度の低いRubyに、MVCモデルという開発及びメンテナンス性に優れたデザイン、そしてフロントエンドからバックエンドまで一貫して作成できる点が評価され、Ruby on Rails、そしてフレームワークが有名になりましたね。 以下にフレームワークを使ったプロジェクト例をご紹介します。

フレームワーク事例

image

言語 フレームワーク プロジェクト
Ruby Ruby on Rails Airbnb(宿泊系)
Bloomberg(New系)
クックパッド(料理系)
Python Django YouTube(動画系)
DropBox(データ系)
Instagram(画像系)

上記で紹介した例は世界規模のWebアプリケーションになりますが、もっと小規模のブログやショッピングサイトなどもあります。ここで抑えておきたいこととしては、フレームワークで開発した場合「プロジェクトをスケールアップできる」ということでしょう。

将来どうなるかわからないプロジェクトをコンパクトにリリースでき、その後、ユーザーが増えサービスが拡張しても、機能や処理能力を適度に対応していけるということ。これはリリース前の設計負担を減らし、安心して開発に専念できるということですね。 次にフレームワークのメリットデメリットをまとめてみます。

フレームワークのメリット・デメリット

image

【メリット】

  • 比較的少ステップで拡張可能なプロジェクトを作成できる
  • 「プログラミングをやってる感」が強い
  • CMSに比べて軽量
  • サーバーやネットワークなどの通信についてのスキルも身につく
  • URLのポート指定でテスト環境、本番環境を簡単に切り替えられる
  • 自分でフレームワークを作成・公開することも可能
  • 無料で使える
  • ゆるめのライセンスが多い

【デメリット】

  • 学習コストがかかる
  • 独学での習得は難しい
  • コマンドラインを使う
  • 実装する場合は、VPSサーバーなどが必要
  • 一貫した情報(チュートリアル)を入手しにくい
  • フレームワークによっては情報が少ない
  • フレームワークの構成理解に加えて、モジュールやライブラリの理解も必要。混乱しやすい。

実際に Cakephp や Django などをインストールしてみると分かるのですが、フレームワーク以外のソフトが必要だったり、独特のコマンド処理をしたりで、プログラミング初心者にとっては難易度が高いと思います。

ただConohaなど一部のVPSサーバーでは、サーバー設定時にDjango や Ruby on Rails を設定するとインストール済みの状態から開発を進めたりできますね。ただし、フレームワークの基本構成を理解しておかないと、成果物までのプロセスをまったくイメージできません。

「フレームワーク」と「モジュール、ライブラリ」との関係

image

Pythonの基礎学習を初めておられる方であれば、

「フレームワークも pip でインストールするし、ライブラリも pip でインストール。使い方も両方 import ●●、何が違うの?」

と思う方も多いと思います。 以下に「フレームワーク」と「モジュール、ライブラリ」との違いをご紹介させて頂きます。尚、これらの言葉の厳密な線引きはありませんので参考情報としてご理解願います。

Pythonプログラム
print('hello') など、必要な機能のコードはすべて記述する必要あり。

モジュール
sys() など Python に標準で組み込まれたプログラム。一つのモジュールで複数の機能(関数)を有する。例えば sys.argv() や sys.exit() など。

ライブラリ
pip管理のプログラム群。BeautifulSoup4(スクレイピング)や Matplotlib(グラフ描画)などが有名。モジュールに比べて実用的な機能を搭載し、ライブラリの中身も複数のフォルダとファイルが存在。BeautifulSoup4の場合は、6 つのフォルダと 30 のファイル。

エンジン
ゲーム開発で用いる Pygame が「エンジン」という風に表現されていますね。プロダクトを作成するために必要なライブラリやモジュールを有し、Python以外の C や C++ なども使われています。Pygameについては、フォルダ数 69、ファイル数 565 とボリューム満点です。

フレームワーク
フレームワークをベースに必要な機能を実装し、プロジェクトを作るといった感じ。フレームワーク自体は、複数のモジュールやライブラリ、PythonファイルやHTMLファイル、テキストファイル、データベースファイルで構成。Djangoについては、フォルダ数 2404、ファイル数 4107。

パッケージ
複数のモジュールや複数のライブラリ、そして時々フレームワークも含んでいるファイル郡。ちょっとパッケージの定義は曖昧になりますが、CMSで有名な MEZZANINE がパッケージの一種になります。

代表的なPythonのフレームワーク

image

以下に代表的なPythonのフレームワークをご紹介。Pythonのフレームワークが使えると「いろいろできる」ということをイメージ下さい。

【Web App】

  • Django
  • Flask
  • Tornado
  • Bottle

【機械学習】

  • TensorFlow
  • Keras
  • Caffe
  • PyTorch

【デスクトップアプリ】

  • Kivy
  • Pyforms
  • PyQt
  • PyGUI

Pythonフレームワークの求人状況

image

以下に各フレームワークの求人状況をご紹介。

2018.8.20時点のデータ

フレームワーク名 indeed.jp クラウドワークス indeed.com(US) 平均年収
Django 287 36 2,084 $71,481〜$120,927
(indeed.com)
Flask 99 2 1,224 $46,620〜$120,927
(indeed.com)
TensorFlow 311 0 2,193 \102,500〜$138,801
(indeed.com)
Ruby on Rails 2,198 40 3,314 $123,336
(indeed.com)
CakePHP 782 34 85 $71,481〜$120,927
(indeed.com)
Spring 1,368 2 12,136 $100,748〜$120,927
(indeed.com)
WordPress 2,645 70 6,665 $39,903〜$112,402
(indeed.com)

Pythonのフレームワークは、Ruby on RailsやWordPressなどに比べると求人数は少ないものの、TensorFlowエンジニアの平均年収高いですね。TensorFlowは決して簡単ではありませんが、Pythonフレームワークで高望みできることが確認できます。

まとめ

フレームワークを使えるようになると、なんだかカッコいいですよね。実際にいくつかのフレームワークを使ってみましたが、初期の基本的な操作はどのフレームワークも似ています。一旦フレームワークの使い方をマスターしておくと、Python以外のフレームワークも馴染んでいけそうですね。

フレームワークとかモジュール以前にPythonの基本操作が分からない、という方は学習効率のいいプログラミングスクール CodeCamp いかがでしょう? オンライン×マンツーマンでPythonの基礎学習を手伝ってくれますよ。

関連記事

オシママサラ
この記事を書いた人
オシママサラ
\無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp