Facebook
ここ数年テレビのニュースなどで「AI」、「ビックデータ」などの言葉をよく耳にするようになり、これらを取り扱う技術はどんどん身近なものになってきました。これからAI関連の市場はどんどん伸びていき、エンジニアやコンサルタントにとっては非常にやりがいのある分野になるのではないでしょうか。

ここではAIを開発するためのプログラミング言語の一つであるPythonと、そのフレームワークや開発されるソフトウェアなどについて紹介したいと思います。

目次

1.Pythonってどんな開発で活用されるの?

Pythonで開発されるシステムは様々です。「Webアプリ」、「AI・機械学習を利用したデータ解析ソフトウェア」が目立ちますが、ゲームの開発にも利用されているようです。では具体的にどのようなシステムが実装されているのでしょうか。Pythonで実装されている代表的なシステムの一つに「WordStream」があります。WordStreamはオンラインでのマーケティング用のソフトウェアを開発している会社で、googleのプレミアパートナーでもあります。そして、そのサーバーシステムはPythonで実装されています。

1.機械学習

Pythonは機械学習を利用したシステムを開発する際などに採用されています。機械学習とは、「AI技術を搭載したソフトウェアで使われる技術のこと」です。機械学習の仕組みが取り入れられているシステムは自身で得た何らかの経験から自動的に学び成長していきます。仕組みとしては、まずソフトウェアにあるデータを与え、分析させます。これがシステムにとっての経験になります。そして、その経験をもとにシステムは次の機会でより判断ができる、というものになります。

ではこの技術は具体的にはどのような場面で使われることになるのでしょうか。
たとえば、ヘルスケアの分野でこの機械学習が注目されています。AIを搭載した診察システムに過去の患者のデータを与え、分析させます。そしてその上で、今回診察する患者のデータを与えることで、過去の患者のデータの分析結果をもとにその患者を診察し、手術の仕方や薬の種類などを判断する、という具合になります。このような機械学習を利用したシステム開発や研究は様々な分野で行われています。

2.データ解析

データ解析とは、「収集したデータを分析し、有益な情報を生み出そうとすること」です。具体的に例を挙げると、企業が自社で製品を売って得た顧客の購買データを分析し、性別、年齢、住んでいる場所ごとに顧客を分類して、「分類した顧客ごとにどのような嗜好があるか」などの情報をデータから得ようとしたとします。

これは、自社製品の広告を効果的に打ち出すことができるので、企業にとって有益なデータ解析になります。この種のデータ解析はすでに私たちの身近にあると言えます。私たちは普段スマホを使って、自分の知りたい情報や欲しい商品を検索しています。これらの行為はデータとして企業のシステムに収集・分析されています。その結果、企業はユーザーの好みに合わせた商品を効率的に宣伝する事ができます。そしてPythonには、pandas、StatsModels、NumPy、SciPy、Scikit-Learnなどデータ解析のためのライブラリが数多く用意されていて、データ解析の実装が必要なシステムの開発言語として適しています。

3.Webアプリケーションの開発

フリーランスのエンジニア向けの案件として、Webアプリケーションの開発案件は非常に多く、Java、PHPが多い印象です。しかし、Pythonの案件もよく目にします。理由は、Pythonはwebを開発しやすい言語でもあるからです。後述の「Pythonのお勧めフレームワーク5つを徹底比較」で詳しく紹介しますが、Pythonにはweb開発用のフレームワークが多く存在しています。

これらを利用することで、少ないソースでWeb開発を行うことができ、かつ可読性も高くなります。結果、Pythonはweb開発をする際のプログラミング言語としても採用されています。

4.ロボット開発

Pythonはロボット制御にも使われています。たとえば、人型ロボットとして有名で、よく電気屋などのお店で見かける「Pepper」はPythonにも対応しています。ロボット開発をとりあえず体験してみたいのであれば、Raspberry Piを使うことがおすすめです。Raspberry PiにはPythonがインストールされていて、ライトの点滅の制御やカメラの制御などのプログラムを気軽に作成することができます。

2.Pythonのお勧めフレームワーク5つを徹底比較

Pythonのフレームワークは数多く存在しますが、ここではお勧めとして、「Django」、「bottle」、「Flask」、「Tornado」、「Plone」の5つを紹介します。それぞれの特徴と、「公式サイト」、「学習のしやすさ(学習しやすい順に3~1)」を載せています。

1.Djangoの特徴

Djangoは「ジャンゴ」と読みます。Pythonのweb開発用のフレームワークでオープンソースです。基本的なWebの機能である、「ユーザー認証」、「サイトマップ」、「RSSフィード」などの機能を備えており、webシステムの開発が楽になるように工夫されています。また、SQLインジェクションやクロスサイトスクリプティングなどの基本的な脆弱性を開発者が誤って生み出さないように設計されており、セキュリティ面もカバーしています。Webシステムの開発に適しているフレームワークです。

公式サイト:https://www.djangoproject.com/

学習のしやすさ:3
日本語書籍が出ていて書店でも販売されていました。また、ネット上での情報も今回紹介するフレームワークの中で一番充実している印象です。

2.bottleの特徴

WSGI(Web Server Gateway Interface)であるということに特徴があります。Webサーバーへのリクエストを複数のWebアプリケーションを利用して処理するシステムを実装することができます。また、「軽い」ということにも重点をおいていて、1ファイルのみで動きます。そしてコーディングの特徴として、テンプレートエンジンと呼ばれるものがあります。htmlに変数やif分岐などを埋め込んで実装していくので、Javaのthymleafに似ています。

公式サイト:https://bottlepy.org/docs/dev/

学習のしやすさ:2
日本語の参考書籍もあり、ファイルも一つで、インストールが簡単なので開発環境を準備しやすいです。ただし、Djangoと比べるとネットの情報は少ないようです。

3.Flaskの特徴

Flaskは、「bottle」と同じWSGIでWebアプリケーションを開発するフレームワークです。コードはリクエストとリスポンスを定義していくことで実装する。JavaのSpringの実装に似ている印象を受けます。

公式サイト:http://flask.pocoo.org/

学習のしやすさ:2
日本語の参考書籍もあり、ソースコードをほとんど書かなくても実装できるところも魅力です。学習のしやすさはbottleと同じくらいです。

4.Tornadoの特徴

Tornadoは「ノンブロッキングI/O」であるということが最大の特徴です。そのため、システムの規模を変更しやすく、同時に大量のリクエストがあったとしても対応することが可能です。ポーリングが実装されるシステムなどの開発に向いています。

公式サイト:http://www.tornadoweb.org/en/stable/

学習のしやすさ:1
英語の参考書籍はありましたが、日本語のものは検索しても見つかりませんでした。

5.Ploneの特徴

PloneはオープンソースでWebアプリケーション用のフレームワークです。主に企業向けのCMS(Content Management System)の作成で利用されています。Ploneはフレームワークとしてだけでなく、CMSとしての「Plone」を指すことも多いので、そこは注意が必要です。

公式サイト:https://plone.org/

学習のしやすさ:1
フレームワークとしてのPloneの情報は、書籍でもネットでも見つけづらいです。

3.Pythonのそれぞれのフレームワークの違い、人気度合い


Google Trendsで地域を「日本」にして今回紹介した5つのフレームワークを比較すると、現時点では「Django」、「bottle」、「Flask」、「Tornado」、「Plone」の順で検索されているようです。「Django」が一番人気のあるフレームワークということができます。これは、今の世の中に一番需要がある特徴を持っているフレームワークが「Django」であるから、このような結果になったと考えられます。「Django」はWeb開発のフレームワークとして定石通りのバージョンアップが行われているという印象を受けます。

それに対し、他のフレームワークは「Django」と比べ、やや偏った特徴を持っていると感じます。日本では現在Webシステム関連の案件が多く、Web開発のためのフレームワークとして王道をいく「Django」に人気が集まっていると推察されます。もちろん、他のフレームワークが絶対的に「Django」に劣っているわけではありません。勉強やシステム開発でフレームワークを選択する際はそれぞれのフレームワークの特徴やその時の人気・需要・普及率などを考慮して選ぶことが大事です。しかし、結果として現時点では、「Django」の需要が一番あるということは間違いないと言えるでしょう。

4.フレームワークを習得すると、フリーランスエンジニアにとってどんなメリットがあるの?

フレームワークを習得することで、そのフレームワークを利用してシステムを開発している案件の受注がしやすくなります。フリーランスエンジニア向けの案件情報サイトを見てみましょう。

「Python」で検索して案件を探すと、その案件の要求スキルなどが書いてある欄に「Django 1年以上」などと記載されていたりします。これは「Djangoを使った実務経験が1年以上ある方を募集しています」という意味です。企業側はフリーランスエンジニアに即戦力を求めているため、採用の際、現在開発中のシステムで採用しているフレームワークを使ったことがあるエンジニアを取ろうとする傾向があります。そのため、たとえば「Django」で開発をしていた経験があれば、「Django」で開発中の他の案件にも採用されやすくなります。特に人気のフレームワークを習得しておけば、受注できる案件が増え長く活躍できるので、フリーランスのエンジニアとして大きなメリットになります。

5.まとめ

今回はPythonのフレームワークについて、主にその特徴などについて紹介しました。現在注目を集めているPythonのフレームワークは「Django」ですが、フレームワークにはそれぞれに特徴があり絶対的な優劣はありません。今後、時代に合わせて人気のフレームワークが変わる可能性もあるので、定期的に主要なフレームワークの動向について調べるようにすると良いでしょう。