AIの普及とともに急速に伸びているのがプログラミング言語、Pythonです。
PythonはAIだけでなくアプリケーションの開発にも使えるので将来的にAI導入を視野に入れたシステムはAIと相性の良いPythonで構築されることが多くなっているのです。
そうしておけばAI導入時に既存アプリケーションとAIとのやりとりが簡単、確実になるからです。
そんなPythonですが早くも沢山のフレームワークと呼ばれる開発環境が出てきています。
フレームワークはプログラムソースの統一性が保たれ一定の品質が保証される開発環境であり、効率的な開発が可能なので多くの企業が採用しており、これからIT業界に入るには、もはや必須知識となりつつあります。
そこで、ここではPythonのフレームワークにはどんなものがあるのか?
また、どういった特徴があるのかを解説し、おすすめのフレームワークも挙げてみましょう。
Pythonフレームワークとは?
フレームワークとは
フレームワークとは、あらかじめ「プログラムの全体像」や「よく使う機能」をテンプレートとして用意している開発環境です。
-
あらかじめ「プログラムの全体像」や「よく使う機能」をテンプレートとして用意している開発環境
プログラムというのは入力画面、照会画面、帳票、バッチなどの機能がありますが、それぞれの機能で作られるプログラムの全体像は機能別に見た場合、最終的に同じようなものになります。ならば、あらかじめ全体像をテンプレート化しておけばプログラムを1から作る必要がなくなり、その分、効率化が図れます。
また入力画面のチェック機能なども「よくあるもの」はあらかじめ用意しておけば、それを使えば良いので更に開発は楽になり一定の品質保証にもつながります。
またフレームワークの既製品化されたテンプレートを開発担当者全員が使うことによりソースの統一化ができるので、きれいなプログラムソースとなり、保守も容易になるのです。
更にフレームワークは「フレームワークの規則」さえ覚えれば、誰でも開発に参加できるのでプログラマーを揃えやすく、共同作業も楽になる、という利点もあります。
Pythonフレームワークとは?
「プログラムの全体像」や「よく使う機能」をあらかじめ用意しておくということは必然的にフレームワークは「言語別」になります。
つまりPythonフレームワークとはPythonという言語に特化したフレームワークのことです。
-
Pythonという言語に特化したフレームワークのこと
そしてPythonは「AI構築に最も適した言語」なので必然的にAI関連の機能である機械学習やディープラーニングといったプログラムを作ることを視野に入れたフレームワークも存在します。
一方、Pythonはアプリケーションの開発もできますので、アプリケーション開発をメインに考えたフレームもあります。
Pythonを使った開発ではフレームワークを使うのが既にスタンダードとなっており、Pythonを勉強するのであればフレームワークも勉強しておくべきです。
例え、現時点ではAI導入まではいかなくても、いずれはAIを導入する、という方向で考えている企業は段々とPythonを使うようになってきているからです。
それは将来のAI導入に向けての準備といって良いでしょう。そしてPythonを使う以上、同時にPythonフレームワークも導入する、というのが現在のスタンダードなのです。
Pythonの活用方法
機械学習
機械学習とはAI技術を搭載したシステムで使われる技術のことです。
-
AI技術を搭載したシステムで使われる技術のこと
機械学習の機能が搭載されたシステムは与えられたデータで経験を積み、自ら成長していきます。
例えば病院において、ある患者さんの症状データを与え、その病名を教えるという教育をすると、違う患者さんの症状データを入れた場合に「前のデータとは合致しない」という結論を出し、新たなデータに対する知識を要求してきます。
そして、その病名を教えると次からは、同じ症状データの場合、病名を推察してくれるようになるのです。
こういった「経験のない入力値」に対応するには、これまではプログラマーが修正を行わなければならなかったのですが、機械学習を搭載したシステムは、その必要がないのです。こうしてデータを積み重ねていくと複雑な事例でもAIが推察してくれるようになります。
現在、機械学習はさまざまな分野で進められており、推察の精度は、どんどん高まってきていますので実用化される日も遠くはないと考えられています。
そして、こういった機械学習機能を備えたAIを構築するにはPythonが最も適した言語なのです。
Webアプリケーションの開発
Webアプリケーションの開発案件は現在でも数多くあります。
Java、PHPなどの言語が使われることが多いですがPythonによるWebアプリケーションの開発も段々と多くなってきています。
PythonにはWebアプリケーション開発用のフレームワークもあるので、それを使えば開発担当者は少ないソースコードでWebアプリケーションを構築することができます。
それもメリットですが「将来的にAIを導入する」ということを考えた場合、Pythonで作っておけばAIに対応しやすくなるというメリットもあるのです。
ですので、WebアプリケーションでもPythonを採用する企業が増えてきているのです。
データ解析
データ解析とは、「収集したデータを分析し、有益な情報を生み出そうとすること」です。
-
収集したデータを分析し、有益な情報を生み出そうとすること
データ分析というとデータサイエンティストというビッグデータを扱う専門家を思い浮かべますが、既存システムに蓄積されている情報からだけでも経営に有利な情報を引き出すことは可能なのです。
製品別の主たる購買層や売上の上がる時期や下がる時期、全体に占める製品別の売上割合などのデータがあれば生産調整に役立ちますし、売上の上がる時期が分かれば広告を出すタイミングも分かります。
また購買層が分かれば、どういう広告を出せば良いのか方向性も決められ、より効果的に広告を行うことが出来ます。
Pythonのフレームワークには、こういったデータ分析の機能を用意しているものも多くあるので、データサイエンティストでなくても、こういった分析が簡単に行えるようになるのです。
ロボット開発
Pythonはロボットの開発にも、よく使われています。やはりAIとの相性が良いので使われているのです。
皆さんもご存じの通り、運転手無しの自動運転自動車などは部分的ではありますが実用化に漕ぎつけていますし、一部の地域では全自動運転バス、全自動運転列車なども実用化されています。
ロボットというと「人型のもの」を想像してしまいますが、全自動運転バスなどは、もはや完全なロボットといっても良いものなのです。
現在、人間の手で行われている作業のうち、「創造的な作業、研究的な作業」以外は、或る意味「やり方さえ覚えてしまえば、誰にでもできる作業」とも言えます。
となると、AIで代替が可能な作業は世の中に、まだまだ一杯あると言って良いでしょう。
そして、そういった作業を行うロボットに対する社会的要求は少子高齢化が進む日本では「高まりこそすれ衰えることはない」といって良いのです。そして現実に農業を始め、色々な分野でロボットを使った自動化が研究されています。
日本はロボットの分野では世界をリードしており、もしかしたら50年後の日本の主産業は「ロボット産業」になるかもしれません。
それくらいにロボット開発というのは重要な分野であり、また面白くもあり世の中のためにもなるものなのです。そしてロボット技術にはPythonとAIという組み合わせが最も適しているのです。
Pythonフレームワークのタイプ
Pythonのフレームワークは大きく分けて3つのタイプがあります。それぞれのタイプ別に特徴を述べてみます。
フルスタックフレームワーク
Web開発に必要な「プログラムの全体像」や「よく使う機能」を豊富に備えているフレームワークです。
-
Web開発に必要な「プログラムの全体像」や「よく使う機能」を豊富に備えているフレームワーク
フルスタックフレームワークを使うと、ほとんどの機能が既製品化され、搭載されているので開発は非常に楽で早いです。ですので、大規模開発に向いていると言えます。
機能が豊富ということは汎用性も高くなりますので、色々なシステム構築に使用することが出来ます。
但しフルスタックフレームワークは機能が豊富な分、開発担当者が覚えるべきことも多くなり事前学習に時間がかかるというデメリットがあります。またフレームワーク自体が大きいので他のフレームワークより重くシステムの自由度にも欠けるというデメリットもあります。
フルスタックフレームワークの代表的な物にはDjango、Pyramidなどがあります。
マイクロフレームワーク
マイクロフレームワークはフルスタックフレームワークとは反対に最小限の機能だけを備えたフレームワークです。
-
フルスタックフレームワークとは反対に最小限の機能だけを備えたフレームワーク
ですので、フレームワーク自体が軽く自由度が高いと言うメリットがあります。比較的、少ない機能ですむ小規模システムやフレームワークでは備えていない機能をオリジナルで作る必要がある場合、などはこちらのマイクロフレームワークの方が使いやすく融通がききます。
また覚えるべき機能が少ないので開発担当者の学習時間が少なく済むというメリットもあります。
マイクロフレームの代表的なものとしてはFlask、Bottleなどがあります。
非同期フレームワーク
IT業界のエンジニアでも「同期、非同期」という言葉を理解している人は多くないと思います。
簡単に言うと「同期型とは命令を出して相手の応答を待つ方法」であり「非同期型とは命令を出して相手の応答を待たない方法」なのです。
同期型 | 命令を出して相手の応答を待つ方法 |
非同期型 | 命令を出して相手の応答を待たない方法 |
例えば、プログラマーがプログラムを書いてサーバー内の自分の作業エリアに保管するには保管のボタンを押し、サーバーが保管完了するまで「待たされる」のが普通でした。つまり「サーバーの応答待ち」という無駄な時間があった訳です。
サーバーと端末の間がLAN回線で通信をしている場合、相手の処理が終わらないと、こちらも終了できなかったのです。しかしPythonのフレームワークには「非同期型」という革新的な考え方を取り入れたフレームワークが存在します。
非同期型の場合、保管ボタンを押すことは「サーバーに保管しろ」と命令しただけですので、サーバーが保管を完了したかどうかは関係ありません。
つまり、「サーバーの応答待ち」という無駄な時間が無いのです。
もちろん命令した以上、サーバーはしっかり保管してくれますので心配はいりません。そして開発担当者は「サーバーが保管が終わったかどうか」とは無関係に作業を続けられるのです。つまりレスポンスが素晴らしく良いのです。
そしてレスポンスの良さは開発効率に大きな影響を与えます。
つまり非同期フレームワークを使うと作業効率が抜群に良くなるのです。非同期型フレームワークの代表的なものとしてはTornadがあります。
Pythonフレームワークを利用するメリット
作業の効率化
Pythonフレームワークはプログラムのテンプレートや多用されるチェック機能、変換機能などを多数、用意しているためコーディングの大部分が簡略化できます。
また用意された機能だけでは足りない場合、カスタマイズすることも簡単です。
つまり短時間で一定以上の品質保証があるプログラムを作ることが出来るのです。
これは作業の効率化に多いに貢献します。
コードの統一化
参加する開発担当者がみな、同じテンプレートを使い、同じ機能を呼び出して使うようコーディングすると結果的に「コードの統一化」につながります。
これまでプログラムのコーディングは人それぞれで保守担当者からすると「結局、全てを解析しなければならない」という大きな手間を発生させていました。
しかしコードの統一化がされていれば保守担当者は非常に効率的に作業を進めることができるようになるのです。
バグの減少
システム開発を進める中で最も大きな問題は「バグの発生」です。
特に大規模であればあるほど「バグの原因究明」は困難を極めることが多いものです。
しかし同じテンプレートを使い、同じ機能を呼び出して使うようコーディングされていればバグの発生率は大幅に下がります。
またバグが発生した場合でも原因追及が非常にしやすくなり解決に要する時間も短くすることができるのです。
Pythonフレームワークを利用するデメリット
学習時間が必要
フレームワークを使うには、まずフレームワークを学習しなければならないので、その時間がかかってしまうという点がデメリットとして挙げられます。
また多くのフレームワークは日本製ではないためマニュアルも英語で書かれていたりすることもありますし、あまり普及していないフレームワークの場合は資料や情報を入手すること自体が難しいというケースもあります。
費用がかかる場合がある
Pythonフレームワークには無料で利用できるものもありますが、費用がかかるものもあります。
一般的に費用を取るものは「それだけの価値がある」ものですが、それは開発担当者にしか理解できないもので、予算担当者には分かってもらえないこともあり得ます。
ですので、いくら優れたフレームワークでも多大な費用が発生するものは導入の承認が得られないこともあるのです。
おすすめのPythonフレームワーク
Pythonフレームワークは多くのものが出されており、それぞれの特徴を持っています。ですので、代表的なフレームワークについて特徴をご説明致します。
Django
Djangoは、2005年に公開されたWeb開発用のオープンソースフレームワークです。
フルスタック型のフレームワークですので大規模のWebアプリケーション開発に向いています。
PythonのWebフレームワークの中では、最も人気の高いフレームワークですので採用しているところも多く求人案件も多数あります。
Pythonを学ぶのであればDjangoは是非とも習得しておきたいフレームワークです。
bottle
bottleはマイクロフレーム型のフレームワークで、とてもシンプルであることが特徴です。
内容がシンプルですので習得しやすくフレームワークの勉強をする際に最初にbottleを学ぶとフレームワークというものを覚えやすくなります。どちらかというと小規模、中規模開発に向いたフレームワークです。
bottleはWSGI(Web Server Gateway Interface)というサーバーとWebアプリケーションを接続する機能も備えているのですが、簡単な仕組みを理解するだけで使いこなせるという特徴も持っています。
WSGIの機能はWebアプリケーションの開発においては是非とも覚えておきたい機能ですのでbottleで、その勉強をしておくことは、とても有意義なことと言えます。
Flask
Flaskもマイクロフレーム型のフレームワークで、フレームワークとしては最も軽く機能が最小限に絞られているのが特徴です。
しかしWSGIへの対応機能も備えていますのでWebアプリケーションの開発が十分に可能なフレームワークです。
自由度が高いので、普段、まず使う事はない機能を搭載するシステムや全くのオリジナル機能を作ろうという時に便利なフレームワークです。
機能が最小限に絞られている分、覚えやすいので最初にFlaskを勉強するというのも良い選択です。
どちらかというと小規模のWebアプリケーションの開発に向いたフレームワークと言えます。
Tornado
Tornadoは「非同期型フレームワーク」の元祖といえるPythonフレームワークです。
とにかくレスポンスが良いのが特徴で、開発担当者には人気抜群のフレームワークです。
フレームワークとしては十分なテンプレートと機能を持っていますので大規模開発も可能なフレームワークです。
Plone
PloneはオープンソースのWebアプリケーション用Pythonフレームワークです。
Ploneの最大の特徴はデータベースWebサーバを備えているフレームワークである、という点です。
他のフレームワークではデータベースが必要な時にはApacheやMySQLを別途にインストールしなければなりませんがploneは、その必要が無いのです。
Webアプリケーションの場合、企業が業務用に使う目的のものは、どうしてもデータベースが必要になります。つまりploneは、そういった企業向けの業務用アプリケーションを作ることを前提にしているフレームワークなのです。
Webアプリケーションの最大の需要は企業の業務用という事実を考えた場合、あらためてデータベースを別途に用意しなくて良いploneは需要を良く見据えたフレームワークであると言えます。
企業の業務用アプリケーションは大規模な物が多くなりますがploneはそれに対応するだけの能力も備えています。
PloneはDjangoと並ぶPythonフレームワークと言えるものなので、覚えておいて損はありません。
Pyramid
Pyramidはフルスタック型のPythonのWebアプリケーション開発フレームワークです。
Ruby on Railsに強い影響を受けているためRuby習得者にとっては、とっつきやすいフレームワークと言えるでしょう。
フルスタック型ですので豊富なテンプレートと多彩な機能群を備えており大規模開発が可能ですが、機能を各モジュールに分割するためにWSGI標準を広い範囲にわたり使用しているので小規模開発にも便利で、高い柔軟性を持っています。
つまりPyramidは万能型のフレームワークであると言って良いでしょう。
TurboGears
TurboGearsはWebアプリケーション用のフレームワークですが、オブジェクト指向を意識して作られており、アプリケーションの内部処理とユーザーに対する入出力処理を分離し、3つのレイヤーに分割して、それぞれが決められた役割を担当するMVCアーキテクチャを元にしているのが大きな特徴です。
そのため開発を始めるまでの手順が少なく済み、開発も保守も非常に簡単にできるようになっています。
日本国内ではTurboGearsを採用している企業も多く、日本語の情報が他のフレームワークに比べると非常に集めやすいというのも大きな利点です。
Pytorch
PyTorchは、Facebookが開発を主導したPython向けの機械学習ライブラリで、フレームワークそのものではありません。
しかし機械学習、ディープラーニングの機能も備えているライブラリですので本格的なAIに取り組む際には、とても役にたつものです。
PyTorchは「パイトーチ」と読み、Facebookの人工知能研究グループにより開発されたものでPythonの機械学習ライブラリとして現在では欠かせないものとなっています。
NumPy
NumPyはPython で数値計算を高速に行うためのライブラリです。
従って、これもフレームワークそのものではありません。
AIに機械学習機能を搭載するには、どうしても高速計算の機能が必要となります。
そうしないとAIはビッグデータを処理するのに非常に時間がかかってしまうからです。
NumPyはその高速計算を行うアルゴリズムを提供してくれるライブラリなのです。
ですので,本格的なAI開発に取り組む場合、NumPyがあると、とても助かるのです。
まとめ
Pythonのフレームワークについて述べてきましたが、各フレームワークはそれぞれの特色を持っていることが、ご理解頂けたかと思います。どのフレームワークを採用すべきかは開発しようとするシステムの内容と規模、また現在の要員の状況を踏まえて選択すれば良いのです。
Pythonのフレームワークは実に沢山のものが出されているので「目的にマッチしたフレームワーク」を見つけることは難しいことではありません。
また開発担当者にとってはPythonという言語の現状と将来性、そしてフレームワークを学ぶ重要性を、ご理解いただけたのではないかと思います。
システム開発という仕事は日々、進歩しています。いつまでも現状のまま、では時代に置いて行かれてしまうかもしれません。
発注側の要望が進歩していく以上、作る側も進歩していかないと発注側の要望に応えられなくなってしまう可能性を考えてみて下さい。
そうなってしまうと仕事が無くなってしまいます。IT関係者にとって新しいものを知り、それを学ことは「重要な仕事」なのです。
それはIT業界で働く者の宿命と言っても良いかも知れません。どんな仕事でも「初心に帰れ」というのは重要なキーワードです。
次世代の言語としてPythonとPythonフレームワークの時代が来るのは確実と言って良いでしょう。その流れに乗り遅れてはならないのです。