DIVE INTO CODE

2019年06月13日

Pythonで機械学習もWebアプリケーションも両方開発することってできるの?

Aws4 request&x amz signedheaders=host&x amz signature=44d77c18f73375448643e4a1b0e4982105327f89c104bbe75d4cea144c5702d5

機械学習で検索するとPythonを使った記事ばかり…Pythonって機械学習専用の言語なの?Webアプリケーションは作れる?逆に、Rubyで機械学習はできる?結局どの言語を選べばいい?そんな疑問にお答えします!

【こんな方におすすめ】
・どのプログラミング言語を選べばよいか迷っている方
・言語の名前は聞いたことがあるけれど、何ができるのか分からない方
・「どうして機械学習といえばPythonなのか?」と疑問に思われている方

【目次】
1. Python=機械学習専用?
2. Rubyで機械学習はできる?
3. 結局どの言語を学べばよいのか

■話し手
DIVE INTO CODE 代表 野呂 浩良
■聞き手
StartGate 永田 拓也

Python=機械学習専用?

Pythonといえば機械学習でよく聞きますが、Webアプリケーション開発もできるんでしょうか。

結論から言うと実装できます。Pythonで全部作るということはできます。スマホアプリは作れないですが、スマホアプリの裏側の部分なら作れます。

もっと詳しく教えていただけますか?

はい。まずPythonで機械学習をするというのは、ほぼデファクトスタンダードになっていると私は思っています。

なぜそうなっているんですか?

Pythonって機械学習をするためのプログラムがすでに大量に作られているんですよ。
Pythonという言語が世の中に出てきたときはRubyと同じような思想で、「文字列操作とかちょっとしたプログラミングをすばやくかつ簡単に楽しく作ることができるように」ということだったんです。生まれたときは機械学習用というわけではなかったんです

その後、Pythonを使うと今までよりも簡単にプログラムを作れるということに着目した人たちが「データ分析とか数式の計算とか、いわゆるデータサイエンスのツールをちゃちゃっと作るのに向いてるよね」ということで、例えばそのための分析用プログラムや機械学習用の数式のプログラムを作り始めた人が出てきたんです。オープンソースだから皆に共有されて拍車がかかっていろんなツールが生まれていきました。

機械学習用に作られたわけではないけれど、みんながそういう使い方をし始めたら、どんどんそういう流れができて、「機械学習といったらPython」みたいな形になっていると。

そうです。何もなかったところに、「こういう道具を作ったんだけどどうかな?」と出したら、「これにも使えるね!」「あれにも使えるね!」という人たちがどんどん現れ始めたんです。じゃあもっと進化させてみんなが使えるようにしようという人が集まってきて、それを使う人が集まったらまた開発する人が増えてきて…そういうサイクルに拍車がかかって、データ分析ツールや数式が詰まったものやデータがすでに入ったものが揃っているんです。

中でも最近よくデータサイエンスとか機械学習というとよく使われるのが、 scikit-learn(サイキット・ラーン)とかpandas(パンダス)というプログラムの集合体。そういうものを使ってプログラムを書くと、自分で0から作らなくても、データ分析に必要なデータを読み込ませたらデータの傾向を見るようなグラフが簡単に作れたりします。すぐにニューラルネットワークを使えたり、そういうアルゴリズムが使えたりするんです。

新しく自分で作るより、あるものを使おうと。

そのうちに大学の授業で正式に採用されたり、例えばGoogleなどの企業が採用したりするようになり、「もっと進化させたら会社でも使えるから」と予算がどんどんつぎ込まれていって…そうするともっと拍車がかかる。
だから機械学習といえばPythonなんです。

そういうことなんですね!

Rubyで機械学習はできる?

よく引き合いに出されるのは「Rubyでは機械学習できないのか」という疑問です。できるのですが、すでに作られている道具が少ないんですよ。だいぶ遅れをとっています。ただRubyが好きな人は機械学習もRubyで書きたいといって、Pythonのライブラリと同じように作ろうとしているものがいくつかできてきています。
しかし、「作りこまれていて不具合が少なそうで実用的なのはどっち?」と言われると、Pythonになります。なので機械学習はPythonが選ばれるんですね。

一方でPythonでもWebアプリケーションは作れるけど…?

日本の私の周りのベンチャー企業では、Webアプリケーションを作るならRuby on Railsを選ぶところが多いです。Pythonで作ろうと主張する人は少ないですね。海外、欧米にいくとまた違うのですが、ライブラリやコミュニティが違うので、フレームワークの作りこみ具合にはそれぞれの言語の特徴があります。先程のPythonは機械学習が得意でしたが、Ruby on RailsはWebアプリケーションの方が得意なんです。
PythonにはDjango(ジャンゴ)というWebアプリケーションのフレームワークがあったりしてWebアプリケーションも作れるんですけど、事例とかツールが少ないので、よほどその言語が好きな人でないとそれを選ぶ合理性がないということになります。

それでいくとWebアプリケーションはRubyだけど、中のAIはPythonということもあり得るんですか?

あり得ます。
プログラムって1つのコンピュータの中に1つの言語でしか作っちゃいけないということはないです。Rubyで作ったWebアプリケーションの中にPythonで作ったプログラムを組み込むということもできます。
どうやって組み込むかというと、一方の言語で作ったプログラムからもう一方の言語で作ったプログラムを呼び出すというふうにします。ただ、呼び出すときにファイルからファイルを呼び出すと通信スピードが落ちてしまう。かなりスピードが落ちてしまうので、リアルタイム通信とかするときは設計をよく考えないといけません。

結局どの言語を学べばよいのか

初心者の方がプログラミングを学び始めるときに、言語を何にしようか迷うと思うんですけど、おすすめとか考え方とかはありますか?
今、「AIが話題だからPythonにいったらいい」とか「とっつきやすいからRuby」とか…。

まず、何の目的で学びたいのかを決めるといいですね。例えば、「AIを作ってみたい」とか「Web上に自分だけのシステムを作ってみたい」とか。それを決めて、そこに最短距離でつながりそうな言語を学習してみるといいと思います。
最初にPythonを始めたけどWebアプリケーションを作りたいとなったときに、ちょっと小難しいことをしなくてはいけなくなったりします。経験者の方は大丈夫だと思うのですが、初心者の方にはつらいかもしれないです。

プログラミングの世界に飛び込みたいときは、「こういうのを作りたいんだけど、どの言語でやったらいいんだろう」と分かっている人に相談してみた方がいいということでしょうか?

そうですね。相談してみたり、掲示板で聞いてみたりするといいかもしれません。
PythonでWebアプリケーションも作れるし、Rubyでも機械学習はできます。どちらでもできるのですが、「最終目的が何か」と考えたときに、仕事にするのなら本当にその現場で使われている方を学習したほうがいいです。

なるほど。ありがとうございました。

まとめ

PythonでもRubyでも、機械学習とWebアプリケーションのどちらも作れます。ただし、どんなフレームワークやライブラリが揃っているかで作りやすさは違ってきます。選ぶポイントは「自分が何をやりたいのか」をはっきりと決めた上で、その分野でよく使われている言語を選ぶといいですね。

プログラミングを仕事にすることを検討されている方は、ぜひプログラミングスクール DIVE INTO CODEの無料カウンセリングへお越しください。カウンセリングでは、IT業界の動向をご紹介させていただくとともに、目的が明確になるようサポートさせていただきます。

DIVE INTO CODEの無料カウンセリング予約こちら

DIVE INTO CODEのことをもっと知ってみませんか?