東北大学大学院工学研究科修士課程修了。
銀行勤務を経て、現在はWebメディア制作や運営に携わる。
プログラミング学習の中やシステム開発に携わる中で、当たり前のように使われている「フレームワーク」や「ライブラリ」。
「そもそもフレームワークとライブラリの違いは?」
「それらがどんな役割なのか?」
「Pythonの場合、どんな使い方ができるのか?」
このような疑問を持っていませんか?
Pythonは近年特に人気集めるプログラミング言語のひとつです。
Pythonは汎用的で様々なことへの応用ができる点が人気です。
しかし、適切な知識がないと、何に手を付けていいものか、何から始めればよいかわからなくなってしまいます。
この記事では、Pythonをはじめとしたプログラミングの中に登場する「フレームワーク」や「ライブラリ」の全体像や関係について解説します。
また、その関係を理解したうえで、Pythonでよく使われるフレームワークについて紹介します。
便利なゆえに複雑さが増しているPythonにおいて、まずは基本的な用語の概念から理解を深めましょう。
目次
フレームワークとライブラリの共通点
まずは、フレームワークとライブラリに共通している考え方から解説します。
フレームワークとライブラリに共通している役割は、プログラムコードにおいてよく使うコードや繰り返し出てくるコードをパッケージ化して、スムーズに使えるようにすることです。
フレームワークやライブラリを使わず、コードを0からすべて書き、システムを構築することもできます。
しかし、これだけ体系化されたパッケージである「フレームワーク」と「ライブラリ」が充実している現在において、それらを活用しないのはコストの面からあまり現実的ではありません。
コードを0から作り始めると、膨大な量のソースコードになり、その中の一部でも間違いがあれば、システムは稼働せず、その個所を特定するのも大変な作業になります。
フレームワークとライブラリの選び方や使い方がわかれば、プログラムコードや計算過程の詳細を完璧に把握しなくてもシステムができてしまうこともあります。
詳細を理解せずにシステムが作れるということに関していえば賛否両論あります。
中身の詳細な計算過程はわからないが、最適な答えを返してくれるシステムというのはリスクを伴うこともあります。
しかし、技術や専門性が深まる現在において、すべてを把握してシステムを開発するのは非常にコストがかかることなので、開発スピードやコストの折り合いになるでしょう。
Pythonはこのようなフレームワークやライブラリが充実していることが人気の一つの要因であり、学習コストや開発コストが他のプログラミング言語に比べて低いことが特徴です。
車輪の再開発
「車輪の再開発」とは、広く知られているものを再び0から開発することを示す慣用句です。
「すでにあるものを作り出そうとすることで時間の無駄をする」というニュアンスで使われることが多くあります。
プログラミングではしばしばこのような事態が起こると言われています。
リサーチ不足によりフレームワークなどの使い勝手の良いものを知らず、苦労して作ったものがただの既存のフレームワークであるような事態です。
すでにあるフレームワークやライブラリを有効に活用できないのはコストが無駄にかかってしまうことに繋がります。
※一部、意図的に行うこともあるようなので、すべての場合に当てはまるわけではありません。
プログラムコードを理解して開発することも重要ですが、フレームワークやライブラリを把握することも重要です。
フレームワークとライブラリの違い
上記の通り、フレームワークとライブラリはプログラムコードの簡略化するためのツールとしての概念は同じです。
しかし、実際にプロジェクトを管理する立場やプログラムを実装するコーダーの立場から見ると、全く違うものです。
フレームワークは、言葉の定義としては「枠組み」「土台」です。
システム全体の型を決めるものになっています。対して、ライブラリは、コードをまとめた便利な道具や部品のようなものです。
コーダーはフレームワークの枠組みの上に、ライブラリという便利な道具や部品を組み合わせながらシステムを作っていくことになります。
イメージとすると以下の図のようになります。
家とその内装に例えると、フレームワークは家の骨格や作り自体であり、ライブラリはその中に配置される家具です。
フレームワークによって家の外形は決まっているため、コーダーは中の空間に合わせて、ライブラリを活用しながら内装を作っていくイメージです。
次章からはフレームワークとライブラリに関して、より具体的な例とイメージを示しながら理解を深めていきます。
フレームワークとは
フレームワークとは、開発するシステムの「枠組み」になるもので、フレームワークによってシステムの大枠が決まることになります。
したがって、実現したいシステムに対して、どのフレームワークが適切なのかを考えて適応する必要があります。
イメージとすると、フレームワークは穴あきの文章とそこを埋めるための選択肢がたくさん用意されているようなものであり、開発者はその中身埋めるだけで済むというようなものになります。
フレームワークの活用には、以下の特徴があります。
・開発の効率化
・開発コードの統一化
・エラーの減少
・フレームワークについての学習が必要
・自由度が制限される
開発の効率化
フレームワークは、テンプレートや利用するライブラリ、APIなど、いわゆる開発に必要な枠組みと道具が揃っているものなので、プログラムコードの量は大きく削減できます。
したがって、プログラマーにかかる負担は削減でき、開発を低コストかつスピーディーに行うことができます。
開発コードの統一化
一般的にプログラムのソースコードは人によって異なります。
優秀なプログラマーほどシンプルで、誰が見てもわかりやすいコードを書くと言われていますが、フレームワークの共通ルールでコードを書けば、このような差も生じにくくなります。
そもそもPythonは文法がシンプルであり、誰が見ても読み易いコードになるという特徴がありますが、フレームワークを活用することでさらに統一性のあるコードになります。
エラーの減少
単純に、人が書くコードの量が減るため、人為的なミスによるエラーを減らすことができます。
また、フレームワークによって枠組み(ルール)が決まっており、コードとして書くことがわかりやすいという点でもエラーが減らすことができます。
フレームワークについての学習が必要
プログラミング言語について知識を習得している人であっても、使用するフレームワークについての知識も少なからず必要になります。
例えば、Pythonを理解している人であっても、特定のフレームワークを使うとなったら、そのフレームワークについて学ぶコストがかかるということです。
もちろん、開発工程全体で考えれば、フレームワークを使わないほうがコストがかかる場合が多いです。
しかし、フレームワークを使わない場合と比較して、どのフレームワークを活用することが本当に最適なのか、どういった活用方法ができるのかという知見が新たに必要になります。
自由度が制限される
フレームワークを活用することのデメリットは、カスタマイズの自由度が制限されることです。
当たり前のことですが、枠組みが決まっているため、それを無視した開発はできません。
フレームワークを採用して開発を始める前に、検討しているフレームワークでできることとできないこと、また、実現したいことが達成できるのかについて考えることが重要です。
Pythonのフレームワーク
Pythonのフレームワークは数多く存在します。
そして、Pythonのフレームワークを活用してすでに様々サービスが展開されています。
Pythonでできることについての記事はこちらを参照ください↓↓
何をどのような手段で実現したいかによって利用すべきフレームワークは変わりますが、すべてを把握して最適なフレームワークを選択することは困難です。
ここでは、フレームワークの分類や選び方、代表的なものについてご紹介します。Pythonフレームワークの理解を深めましょう。
フレームワークの選び方
フレームワークを選ぶ際の気を付けるべき点について解説します。
開発規模に合っているか
無数にあるpythonのフレームワークの中には、大規模向けのものから小規模向けのものまであります。
学習コストや開発スピード、システムの動作速度に大きく影響するため、フレームワークの特徴を理解したうえで採用する必要があります。
近年では、小規模向けのフレームワークを活用し、テスト的に適応しつつ、開発規模を徐々に広げる手法がとられることが多くあります。
費用対効果も明確にわからない中で、多額の先行投資をすることは難しいですが、この方法であれば、初期費用を抑えつつ開発できるというメリットがあります。
人気なフレームワークか
人気なフレームワークは、開発コミュニティや利用者が活用方法やソースコードなどの情報をウェブ上に公開しています。
こういった情報が充実し、かつ、入手しやすいほど学習コストや開発コストは低くなります。
一方、マイナーなフレームワークは日本語の公開情報がなかったり、チュートリアルが充実していない可能性があるため、情報を収集する労力が多くかかってしまいます。
フレームワークの種類
フレームワークの大きく分類すると、以下の3つに分類されます。
フルスタックフレームワーク
「フルスタック」とは複数の技術を有しており、一部だけではなく全体のあらゆる対応ができる能力のことを言います。
したがって、フルスタックフレームワークは開発に必要なあらゆる機能が搭載されており、万能型のフレームワークです。特に大規模な開発に向いています。
しかし、場合によっては使わない機能まで搭載されてしまうことになるため、動作が重くなるというデメリットもあります。
Pythonはインタプリタ言語であり、ただでさえ他の言語に比べて動作が遅くなりやすい特徴があるので、注意が必要です。
フルスタックフレームワークの代表的なものには以下が挙げられます。
・Django
・web2py
マイクロフレームワーク
マイクロフレームワークは、特定分野の開発のための機能がまとめられたフレームワークです。
小規模の開発を行うことに向いており、機能がシンプルなため、学習コストも低いのです。
マイクロフレームワークの代表的なものには以下があります。
・Flask
・Bottle
非同期フレームワーク
非同期フレームワークは、非同期通信ができるフレームワークです。
同期通信では、データ通信の処理を出してから反応が返ってくるまでの間、他の処理を行うことはできません。
一方、非同期通信では相手からの反応を待たずに次の処理を行うことができます。例えば、メッセージアプリやメールは代表的な非同期通信です。
非同期フレームワークの代表的なものに以下があります。
・Tornad
・Sanic
機械学習・データ分析向けのフレームワークやライブラリ
Pythonの強みは機械学習やデータ分析分野にあるとも言われています。
その要因の一つは、Pythonの機械学習やデータ解析向けのフレームワークやライブラリが充実しているからです。
AI活用の原理となる機械学習の領域では、フレームワークとライブラリを明確に区別しない考え方もあるようです。
どちらにせよ、よく使われる機能がテンプレート化されたものであることに変わりはなく、活用することで機械学習の複雑な計算を手軽に組み込むことができます。
ここではPythonの代表的な機械学習のためのフレームワークとライブラリについてご紹介します。
Pytorch
Pytorchはコードがわかりやすい構造をしており、直感的なコーディングができるように工夫されています。
また、その構造が「Numpy」と似た構造をしており、Numpyを扱ったことがあれば、習得するのは比較的容易にできると言われています。
また、開発コミュニティが活発であり、多くの公開情報があるという点でも学習しやすいです。
Pytorchの始め方については、以下の記事で解説しています↓↓
TensorFlow
TensorFlowはPythonのフレームワークの中で最も知名度の高いものです。
世界中で使用されており、オープンソースとして公開されている情報もたくさんあります。
大規模なデータを処理することに向いていますが、その分のリソースも必要となるため、個人のパソコンの計算処理能力では適用できないこともあります。
PytorchとTensorFlowのどちらを使うべきか
現在、Pythonの機械学習フレームワークといえば、この2つが特に知名度が高くなっています。
PytorchとTensorFlowは開発の経緯が異なり、コードのルールや機能面の違いもあります。
しかし、近年では、どちらかにしかできない機能は少なくなってきているようです。
人気のフレームワークは、アップデートもされていくため、システムの開発にどちらを使うべきかという議論においては様々な意見があり、優劣がつきにくくなっています。
一般的に、公開情報が多い、より人気な方を選ぶというのも一つの手ですが、この2つの場合はそこまで大きな差はわかりません。
Google Trendsでは、どちらの方がGoogle上での検索需要があるかという点で比較することでき、通常、ここから人気度を解釈することもできます。しかし、グラフを見ても、わずかにPytorchのほうが人気の傾向がありそうですが、大きな差はありません。
まとめ:適切なフレームワークやライブラリ選びを!
この記事では、「フレームワーク」や「ライブラリ」の全体像や関係について解説し、Pythonでよく使われるフレームワークについて紹介しました。
Pythonを実際に触り始める前に、基本的な用語の概念から理解を深め、フレームワークの使われ方を把握することも重要です。
以下、要点をまとめます。
・フレームワークとライブラリは、よく使う機能をテンプレート化したもの
・フレームワークは「枠組み」であり、ライブラリは中身を構成する「便利な道具や部品」
・フレームワークを活用することのメリットは「効率化」「コードの統一化」「エラー減少」
・フレームワークのデメリットは「フレームワーク自体への学習コスト」「自由度の制限」
・フレームワークの選び方は、「開発規模」「人気度合い」