- フレームワークとは
- Pythonで使える3種類のフレームワークとは
- Pythonの分野別おすすめフレームワーク一覧
- Pythonのフレームワークを選ぶ際のポイント
- Pythonでフレームワークを使用するメリット
- Pythonでフレームワークを使うデメリット
- Pythonのフレームワークに関するよくある質問
- まとめ
フレームワークとは
フレームワークとは、システム開発に必要な機能を搭載した枠組みです。システム固有の処理を記述するだけでシステム開発が可能となり、1から構築すると工数のかかるWebアプリケーション開発や人工知能開発の分野で広く使用されています。
フレームワークとライブラリの違い
フレームワークとよく似た単語で「ライブラリ」があります。どちらも汎用的な機能を簡単に実装するための枠組みです。2つの違いを確認していきましょう。それぞれは以下のような違いがあります。
-
フレームワーク:アプリケーション開発に必要な機能を全て備えた枠組み
ライブラリ:汎用的に使用される機能を”機能単位”で提供する枠組み。
フレームワークがアプリ全体の機能を提供するのに対して、ライブラリは機能単位で提供しています。アプリケーション全体へ仕組みを提供しているのか、機能を提供しているのかと考えれば分かりやすいでしょう。
Pythonで使える3種類のフレームワークとは
PythonのWebフレームワークは次の3つの種類に分類できます。
-
・フルスタックフレームワーク
・マイクロフレームワーク
・非同期フレームワーク
フルスタックフレームワーク
フルスタックフレームワークとは、開発に必要な機能が網羅的に搭載されているフレームワークです。万能型のフレームワークであり、UI・データベース・セキュリティなどに関する機能がまとめられています。
そのため、環境構築が非常に簡単であり、コーディングに集中できるというメリットがあります。ただし、動作が重くなりがちというデメリットもあります。
マイクロフレームワーク
軽量フレームワークとも呼ばれ、特定分野の開発に必要な機能がコンパクトにまとめられたフレームワークです。
小規模でシンプルな機能を開発する際に使用されることが多いでしょう。また、機能のシンプルさゆえに学習コストも低く、初心者でも扱いやすいことも特徴です。
非同期フレームワーク
非同期フレームワークとは「非同期通信」を実装できるフレームワークです。非同期通信とは送受信者双方が、お互いにタイミングを合わせることなく、通信を行う様子を指します。
一般的に通信はリクエスト⇒レスポンスという具合に、送信者からの要求に対して受信者側がタイミングよく応答することで成立します。しかし、非同期通信では、「スタートを表すデータ」と「ストップを表すデータ」で通信の開始と終了を制御するため、タイミングを合わせる必要がありません。
このことを利用して、「Webサイトの一部だけを更新する」「画面遷移を経ずに動的な処理を行う」といった実装が行われます。
Pythonの分野別おすすめフレームワーク一覧
フレームワークの種類を確認したところで、ここからは各分野別おすすめフレームワークをご紹介します。Pythonは人気な言語ですので各分野に多数のフレームワークが開発されています。それぞれのフレームワークに特徴がありますので、開発内容に応じて使いこなせるように特徴をおさえましょう。
用途 | 名称 | 種別 |
---|---|---|
Webアプリ開発 | Django | フルスタックフレームワーク |
〃 | Flask | マイクロフレームワーク |
〃 | Tornado | 非同期フレームワーク |
〃 | FastAPI | マイクロフレームワーク 非同期フレームワーク |
〃 | Bottle | マイクロフレームワーク |
〃 | web2py | フルスタックフレームワーク |
データサイエンス・機械学習 | Tensorflow | 機械学習フレームワーク |
〃 | Keras | ニューラルネットワークライブラリ |
〃 | Pytorch | 機械学習向けライブラリ |
ビッグデータ処理 | ApacheHadoop | 分散ビッグデータ処理用フレームワーク (またはミドルウェア) |
〃 | ApacheSpark | 機械学習とビッグデータ処理に特化した 分散処理フレームワーク |
関連記事:Pythonとは?特徴やできること・活用事例などを解説!
Webアプリ開発
まずはWebアプリ開発分野で使用されるフレームワークをご紹介します。ご紹介するのは以下の6つです。
-
・Django
・Flask
・Tornado
・FastAPI
・Bottle
・web2py
それぞれについて詳しく見ていきましょう。
Django
Djangoは、PythonのWeb開発に特化したフルスタックフレームワークです。2005年7月にオープンソース化されたDjangoは、Webサイト・アプリケーションの開発・保守運用に必要な機能を全て網羅しています。
一般的なフレームワークに搭載されている機能(URLディスパッチャー、O/Rマッパー、テンプレートエンジン)に加え、管理画面からのデータベースの操作や独自のテンプレートエンジンなど、豊富な便利機能を含みます。特に管理画面の自動生成機能は、他のフレームワークにはない特長です。
Djangoでは、管理者ユーザーを作成したあとにサーバーを起動し「localhost:◯◯/admin/」にアクセスすると、「Django管理サイト」にログインできます。この管理画面から、データベースの閲覧・データ投入・検証作業などを行うことができ、管理画面自体のカスタマイズも可能です。また、機能追加やコンポーネントの再利用性の面でも優れています。
Flask
Flaskは非常に軽量でシンプルなマイクロフレームワークです。どちらかといえば中小規模の開発に向いていると言えるでしょう。「MVTモデル」を採用したフレームワークで、「Model(データ管理)」「View(呼び出し制御)」「Template(ユーザーインターフェース)」という3つの構造に従って実装を進めることが基本です。学習コストが低く、拡張機能が豊富という強みがあります。
主な拡張機能としては「Flask WTF(レンダリングと検証機能)」「Flask Mail(SMTPインターフェース機能)」などが挙げられるでしょう。Djangoに比べて機能はシンプルですが、軽快に動作するため、スモールサービスを開発したい場合などに適しています。
Tornado
Tornadoは、シンプルで処理速度に優れた非同期フレームワークです。FriendFeed社によって開発され、同社がFacebook社に吸収された後にオープンソースへと移行しました。日本では知名度があまり高くないようですが、非同期通信によるSPA(シングルページアプリケーション)の構築などに使用されているようです。また、Webサーバーとしての機能も持っており、静的コンテンツの配信を高速に行うことが出来ます。
Tornadoはマイクロフレームワークでもあり、非常にシンプルかつ軽量なことも強みのひとつです。非同期通信のほか、同時接続処理にも強みをもち、リアルタイムなWebサービスの開発に対応しやすいことで有名です。特にPythonで記述されたコードに対しては光速に動作し、毎分2000リクエストを処理できるとされています。ただし、UIはTornado独自のものを使用するため、手に馴染むまでに時間を要するかもしれません。
FastAPI
Tornadoと同じくマイクロフレームワークであり、非同期フレームワークでもあります。主にREST APIの作成に使用され、非常に高速に動作することで知られています。また、記述性の高さや本番運用を意識した設計などが評価され、近年ではPython用フレームワークの中でも徐々に地位が向上しているようです。
Fast APIはドキュメントが丁寧で、なおかつドキュメントの自動生成機能も付与されているため、開発者同士の意思疎通がしやすいという強みがあります。また、本番運用を想定した仮想環境(Docker image)も用意されているため、本番運用に合わせた開発が進められるでしょう。
Bottle
Bottleは、Webフレームワークの中では最も軽量かつシンプルなマイクロフレームワークです。2009年に誕生し、主に個人向け/小規模開発向けのフレームワークとして活用されています。他のフレームワークに比べると機能面では見劣りしますが、Pythonフレームワークの知識を身に着けつつWeb開発を進めたい場合には、有用なフレームワークです。
Bottleは単一のファイルで構成されており、導入の手間が非常に小さく、レンダリングが高速です。また、学習コストも非常に低いです。実際に学習用ドキュメントを比較してみると、BottleはFlaskの3分の1ほど程度のボリュームです。Flaskも決して学習コストが高いフレームワークではないため、Bottleのシンプルさが垣間見えますね。
web2py
web2pyは、アジャイル開発を想定して作られたフルスタックフレームワークです。Windows・Mac・Linuxなど複数のプラットフォームで動作することから、クロスプラットフォーム対応に強みを持っています。また、web2pyはデータベース駆動型のWebアプリケーションをセキュアに構築できるため、セキュリティの強固さも魅力のひとつです。
ただし、有名なサービスに採用されていないこともあり知名度はいまひとつで、案件の数もそれほど多くありません。「アジャイル」「セキュリティ」と、現在のアプリケーション開発のトレンドを抑えているため、スキルアップを目的とした習得がおすすめです。
データサイエンス・機械学習
Webアプリ開発に使用されるフレームワークを確認したところで、ここからはデータサイエンス・機械学習に使用されるフレームワークを3つご紹介します。ご紹介するのは以下の3つです。
-
・Tensorflow
・Keras
・Pytorch
それぞれについて詳しく見ていきましょう。
Tensorflow
TensorflowはPythonの機械学習フレームワークとしては最も知名度が高く、世界中で使用されています。当初はGoogleの研究プロジェクトでしたが、現在はオープンソースとして公開されています。
TensorFlowは、データの読み込みや前処理、計算処理、出力などあらゆる処理でテンソル(多次元配列)を扱います。また、iOSやAndroidなど、複数のメジャーなプラットフォームに対応できることも見逃せません。
これら複数のプラットフォームにおいて、分散学習と並列処理が可能なことから、ビッグデータ解析やディープラーニングに活用されるようになりました。
TensorFlowはPythonのフレームワークの中でも特に知名度が高いため、ぜひ理解しておきたいところです。
しかし、習得のハードルはやや高いと言えるでしょう。TensorFlowが扱うのは非常に大きいデータで、そのデータを処理するためには大規模な計算リソースが必要です。この計算リソースは、個人所有のPCでは賄いきれない規模になるため、どこかの企業/プロジェクトに所属しながらTensorFlowを学ぶことになります。
Keras
Kerasは2015年に誕生したニューラルネットワークライブラリです。現在は前述のTensorFlowに吸収され、TensorFlowの中のライブラリとして動作しています。
ディープラーニングの基礎である数学的理論をシンプルなコードで実装できるため、機械学習関連の開発で多用されているようです。特にニューラルネットワークを容易に構築できる点は、ディープラーニングの知識を持たない人間にとって非常にありがたいですね。「ニューラルネットワークとはそもそも何か?」を学びながら、手を動かしつつ知識を習得できるというメリットがあります。
Pytorch
Pytorchは、2016年に誕生した機械学習向けライブラリです。Facebookの研究グループによって作成され、Python用のフレームワークとして人気を集めています。Pytorchは直感的なコーディングが行えるように工夫されており、なおかつその構造が「Numpy」によく似ています。したがって、Numpyを使ったことがあればスムーズに習得できるはずです。
PytorchはFacebookで誕生しただけあり、開発コミュニティが活発で、最新の手法に関する情報も入手しやすいというメリットがあります。また、動的なニューラルネットワーク構築(define by run)にも対応しており、データを流しながらネットワーク構築を行うことができます。
ビッグデータ処理
3つ目の分野はビッグデータ処理です。ビッグデータ処理用フレームワークとしては、下記2つを紹介します。
ApacheHadoop
「Apache Hadoop」は、Pythonの分散ビッグデータ処理用フレームワークとしては最も有名です。単に「Hadoop」とも呼ばれます。Javaで作られているHadoopは、フレームワークというよりもミドルウェアと称すべき存在かもしれません。
複数のクラスタにまたがる大規模なデータ処理基盤を、シンプルなコーディングで構築できることから、急速に広まりました。近年は処理速度の面で後述のSparkに劣るものの、Pythonの主要なフレームワークとして認識されています。国内でも大企業での採用事例が多いことから、Pythonのビッグデータ処理ならば、まずはHadoopを学ぶことをおすすめします。
ApacheSpark
Apache Sparkは、機械学習とビッグデータ処理に特化した分散処理フレームワークです。カリフォルニア大学バークレー校で開発され、2014年にApache Software Foundationに移管されました。SparkはJavaの派生言語「Scala」で作られています。非常に高速かつ、大規模な分散データ処理を高速に行うことに強みがあり、その速度はHadoopの100倍に達することもあるそうです。(※)そのことから「速度重視のビッグデータ処理ならばSpark」と言えるでしょう。
Sparkの高速処理を支えているのは「インメモリ処理」です。インメモリ処理とは、データをストレージ(HDDやSSD)に移動せず、メインメモリ内で扱うことで入出力の時間を省き、処理を高速化する手法です。ほかにもSparkには、データ格納場所の選択肢が多かったり、SQLをサポートしていたりと、使いやすさを向上させる機能が搭載されています。ちなみに、前述のHadoopとSparkは競合関係になく、同一システム内に共存することが可能です。
Pythonのフレームワークを選ぶ際のポイント
Pythonのフレームワークを選択する際のポイントを説明します。フレームワーク選択の前に確認しておきましょう。
開発規模にマッチしているか
まず着目すべきは「開発規模」です。これまでの内容からもわかるように、Pythonのフレームワークは「大規模向け」「小規模向け」が入り乱れています。一般的にフルスタックフレームワークは大規模開発向け、マイクロフレームワークは小規模開発向けですが、近年は小規模向けの軽量なフレームワークを採用しつつ、徐々に規模を拡大する方法もあります。もし、参画予定のプロジェクトが決まっているならば、その規模やロードマップに合ったフレームワークを選ぶようにしてみてください。
動作が軽量か
独学時には特に「動作の軽さ」が重要です。フルスタックフレームワークは多機能である一方、開発を進めるごとにデータ量が増え、徐々に動作が重くなる傾向にあります。そのため、まずは学習コストが低く動作が軽いフレームワークを選び、少しずつ知識の幅を拡げていく方法がおすすめです。
人気度
フレームワークの人気度は、毎年変化するため、常にトレンドを注視しておきましょう。Pythonは人気言語で開発が盛んなため、常にトレンドが変化します。人気の高いフレームワークでは、新たな機能の追加、バージョンアップが活発であったり、開発のための情報が充実しており、継続的なサポートが見込めます。
Pythonでフレームワークを使用するメリット
フレームワークの選び方を確認したところで、ここからはPythonフレームワークを使用するメリットを4つご紹介します。
-
・開発生産性の向上
・セキュリティの向上
・コードの統一化によるメンテナンス工数削減
・バグの削減
開発生産性の向上
フレームワークを使用するとシステム開発に必要な機能が一通り完成した状態から開発できるため、生産性を向上させられます。特に実装の面倒なWebアプリ開発のログイン周りや人工知能開発のモデル作成などでは非常に重宝です。
セキュリティの向上
フレームワークは長い年月をかけて多くの有識者が改善してきたため、非常に高品質な機能が多いです。そのため、0から記述したコードよりもセキュリティに配慮した安全なアプリケーション開発が可能となります。
新たに作成したコードではセキュリティの不備を検知しにくいですが、フレームワークならその心配が低いです。情報の送受信やログインを必要とするアプリケーション開発にはフレームワークを活用するメリットが大きいでしょう。
コードの統一化によるメンテナンス工数削減
フレームワークを使用するとプロジェクトで新たに記述する範囲を限定できるため、コードを統一化しやすいです。また、コードの統一化はメンテナンス工数の削減や属人性を下げるなどおおきなメリットがあります。
バグの削減
フレームワークで提供される機能は多くの時間によって改善されてきているため、バグを保有している可能性が低いです。一方、プロジェクトで新たに記述したソースコードは技術不足や時間不足、テスト不足など様々な要因でバグ発生の可能性があります。フレームワークを採用することにより、多くのコードを提供されたものと差し替えられるためバグが削減可能です。ソフトウェアの品質にとって大きなメリットですので、ぜひ積極的に活用していきましょう。
Pythonでフレームワークを使うデメリット
Pythonフレームワークを確認したところで、ここからは使用するデメリットをご紹介します。前述の通りフレームワークを使用するメリットは非常に多いですが、デメリットも存在します。メリットだけでなくデメリットもおさえておきましょう。ご紹介するのは以下の3つです。
-
・独自カスタマイズが制限される
・習得に時間が必要
・有料のものがある
それぞれについて詳しく見ていきましょう。
独自カスタマイズが制限される
フレームワークには記述ルールが設けられているため、自由に記述やカスタマイズが出来ない場合があります。フレームワークに沿った画面設計、ひいては業務設計が必要となります。
習得に時間が必要
フレームワークは多機能なものが多いため、Pythonの基本文法だけでは使いこなせず、別途フレームワークの学習が必要になります。しかし、一度学習してしまえば、その後は何度でも使用できるため学習コストのパフォーマンスは高いと言えるでしょう。
有料のものがある
Pythonのフレームワークにはごく稀に有料のフレームワークがあります。メジャーなフレームワークのほとんどは無料ですが、初めて使用するフレームワークは無料で使用可能か確認しましょう。
Pythonのフレームワークに関するよくある質問
Pythonのフレームワークに関するよくある質問と回答をまとめました。習得するフレームワーク検討の参考にご利用ください。
Q1.Pythonフレームワークとは何ですか?
フレームワークとは、各種のアプリケーション作成の際の枠組み、骨組みにあたります。よく作成されるアプリケーション種別において、共通する部分をまとめて作成して提供してくれるものです。このため、フレームワークを利用したアプリケーション開発は、効率的かつ高品質にしやすいメリットを持ちます。
Q2.Pythonのフレームワークは何種類ありますか?
個別のフレームワークの数は把握できませんが、用途別で分けると下記の3種類が存在します。
-
・Webアプリケーション
・データサイエンス・機械学習
・ビッグデータ処理
また、Webアプリケーションフレームワークの中では、さらに3つの種類に分けられます。
-
・フルスタックフレームワーク
・マイクロフレームワーク
・非同期フレームワーク
Q3. Pythonのフレームワークはどんなときに使いますか?
開発するアプリケーションの種別や実現したい業務が定まっており、その実現に利用できるのであれば積極的にフレームワークの利用が検討されます。アプリケーション開発の効率向上と品質向上が主な目的です。例えば、Webbアプリケーションの開発をする場合には、業務用件を実現するために利用できるフレームワークがどれなのかを検討して、適したものがあれば採用することが一般的です。
まとめ
フレームワークはシステムやサービス、アプリケーションを作成する際に一般的に共通する部分をまとめた枠組みです。Web用のフレームワークであれば、画面遷移やデータベースへのアクセス、画面表示のテンプレートエンジンなどが提供されます。これらの機能を提供してくれるため、Webアプリケーション開発者は効率的かつ高品質な開発が可能となるメリットがあります。
Pythonは汎用的なプログラミング言語で、幅広い用途で活用されています。このため、大きくは下記の用途向けのフレームワークが提供されています。
-
・Webアプリケーション・データサイエンス・機械学習
・ビッグデータ処理
また、Webアプリケーション向けのフレームワークでは、特徴によって3種類に分類されています。
フレームワークはすでに開発されたコードを多くの範囲で利用できるため、開発効率と品質の向上に加え、セキュリティの向上やコードが統一化されるメリットもあります。一方で、独自のカスタマイズに制限が出る場合や、利用に向けて学習コストがかかるデメリットも存在します。
Pythonのフレームワークを選択する場合には、用途と規模、Webならば実現したい内容を考慮して選択しましょう。
関連記事:
Pythonエンジニアの仕事内容とは?必要なスキル・学習方法も解説
Pythonエンジニアの年収が高い理由は?需要と将来性も解説
Pythonエンジニアの将来性は?JavaやRubyとも比較
Pythonエンジニアの転職事情を解説!求人数や年収も紹介
ITエンジニアの転職ならレバテックキャリア
レバテックキャリアはIT・Web業界のエンジニア職を専門とする転職エージェントです。最新の技術情報や業界動向に精通しており、現状は転職のご意思がない場合でも、ご相談いただければ客観的な市場価値や市場動向をお伝えし、あなたの「選択肢」を広げるお手伝いをいたします。
「将来に向けた漠然とした不安がある」「特定のエンジニア職に興味がある」など、ご自身のキャリアに何らかの悩みを抱えている方は、ぜひ無料のオンライン個別相談会にお申し込みください。業界知識が豊富なキャリアアドバイザーが、一対一でさまざまなご質問に対応させていただきます。
「個別相談会」に申し込む
転職支援サービスに申し込む
※転職活動を強制することはございません。
レバテックキャリアのサービスについて