- 更新日: 2018年08月30日
- 公開日: 2018年08月28日
【Python入門】フレームワークとは一体どのようなものなのか?
プログラミングスクールを検討されている方やRubyに興味をお持ちの方なら一度は「フレームワーク」聞いたことがあるでしょう。
フレームワーク、日本語に訳すと「骨組み」ですがプログラミングにおける「骨組み」ちょっとイメージ湧きませんよね。
今回は、直感的に「フレームワーク」をイメージできるよう噛み砕いて解説させて頂きます。
【Python入門】フレームワークとは一体どのようなものなのか?
フレームワークとは
いきなりですが、「フレームワーク」ちょっと身近なものに例えてみますと、
- ケーキに例えると・・・ホールケーキのスポンジ部分だけ。デコレーションや中身は自分次第
- マンションに例えると・・・スケルトン状態。電源や給排水はあるが、間取りや内装は自分次第
- スーツに例えると・・・オーダースーツ。「スーツ」というデザインはあるが素材や装飾、サイズは自分次第
という具合に、『目的達成のために必要な基本的な部分だけ』を用意されている状態をイメージすると「フレームワーク」分かりやすいと思います。 ただし、ケーキやスーツと違ってプログラミングにおけるフレームワークは「拡張可能」という非常に夢のあるツール。
「フレームワーク」といえば Ruby on Rails などの Webアプリ開発 を目的としたものが有名。
【プログラミングスクールでも取り扱いのある有名なフレームワーク例】
- Ruby on Rails
- CakePHP
- Django
- Spring など
フレームワークは、Web以外にも「機械学習」や「ゲーム」「デスクトップアプリ」「ブロックチェーン」「科学計算」など目的別に存在。 Pythonに限ってはWebアプリ以外に「機械学習」や「ゲーム」、「デスクトップアプリ」用のフレームワークが用意されていますね。
そのフレームワークの中身ですが、まずファイル群を見てみるとイメージ湧きやすいかもしれません。
【Webアプリ用フレームワークのDjangoの中身(一部)】
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アプリを作成した記事も紹介されていますが、その開発ステップは長いです。
有名なフレームワークの年表
すこしフレームワークについて分かってきたところで、フレームワークの歴史を確認してみます。
フレームワーク名 | リリース | 言語 | 用途 |
---|---|---|---|
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、そしてフレームワークが有名になりましたね。 以下にフレームワークを使ったプロジェクト例をご紹介します。
フレームワーク事例
言語 | フレームワーク | プロジェクト |
---|---|---|
Ruby | Ruby on Rails | Airbnb(宿泊系) Bloomberg(New系) クックパッド(料理系) |
Python | Django | YouTube(動画系) DropBox(データ系) Instagram(画像系) |
上記で紹介した例は世界規模のWebアプリケーションになりますが、もっと小規模のブログやショッピングサイトなどもあります。ここで抑えておきたいこととしては、フレームワークで開発した場合「プロジェクトをスケールアップできる」ということでしょう。
将来どうなるかわからないプロジェクトをコンパクトにリリースでき、その後、ユーザーが増えサービスが拡張しても、機能や処理能力を適度に対応していけるということ。これはリリース前の設計負担を減らし、安心して開発に専念できるということですね。 次にフレームワークのメリットデメリットをまとめてみます。
フレームワークのメリット・デメリット
【メリット】
- 比較的少ステップで拡張可能なプロジェクトを作成できる
- 「プログラミングをやってる感」が強い
- CMSに比べて軽量
- サーバーやネットワークなどの通信についてのスキルも身につく
- URLのポート指定でテスト環境、本番環境を簡単に切り替えられる
- 自分でフレームワークを作成・公開することも可能
- 無料で使える
- ゆるめのライセンスが多い
【デメリット】
- 学習コストがかかる
- 独学での習得は難しい
- コマンドラインを使う
- 実装する場合は、VPSサーバーなどが必要
- 一貫した情報(チュートリアル)を入手しにくい
- フレームワークによっては情報が少ない
- フレームワークの構成理解に加えて、モジュールやライブラリの理解も必要。混乱しやすい。
実際に Cakephp や Django などをインストールしてみると分かるのですが、フレームワーク以外のソフトが必要だったり、独特のコマンド処理をしたりで、プログラミング初心者にとっては難易度が高いと思います。
ただConohaなど一部のVPSサーバーでは、サーバー設定時にDjango や Ruby on Rails を設定するとインストール済みの状態から開発を進めたりできますね。ただし、フレームワークの基本構成を理解しておかないと、成果物までのプロセスをまったくイメージできません。
「フレームワーク」と「モジュール、ライブラリ」との関係
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のフレームワーク
以下に代表的なPythonのフレームワークをご紹介。Pythonのフレームワークが使えると「いろいろできる」ということをイメージ下さい。
【Web App】
- Django
- Flask
- Tornado
- Bottle
【機械学習】
- TensorFlow
- Keras
- Caffe
- PyTorch
【デスクトップアプリ】
- Kivy
- Pyforms
- PyQt
- PyGUI
Pythonフレームワークの求人状況
以下に各フレームワークの求人状況をご紹介。
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フレームワークで高望みできることが確認できます。
\AIエンジニアに必要なスキルが身に付く/
まとめ
フレームワークを使えるようになると、なんだかカッコいいですよね。実際にいくつかのフレームワークを使ってみましたが、初期の基本的な操作はどのフレームワークも似ています。一旦フレームワークの使い方をマスターしておくと、Python以外のフレームワークも馴染んでいけそうですね。
フレームワークとかモジュール以前にPythonの基本操作が分からない、という方は学習効率のいいプログラミングスクール CodeCamp いかがでしょう? オンライン×マンツーマンでPythonの基礎学習を手伝ってくれますよ。
- この記事を書いた人
- オシママサラ