データサイエンスにおける Ruby の現在の位置付けと将来性
村田賢太*

2016 年 12 月 5 日

1 はじめに2

現在 Ruby*1 は、データサイエンスの業務ではほデータサイエンス領域におけるプログ
ラミング言語とんど役に立たないプログラミング言語であると言

本節では、データサイエンス領域において重要なっても過言ではない。Ruby はデータサイエンスのカギを握るプログラミング言語として、現在主流世界では存在していないも同然の扱いであり、選択の Python と R、そして、将来性が期待されている肢にすら上がらない。

Julia*4 について述べる。
2.1 データサイエンスにおける Python と R の位

その理由は、実用的に使える環境が存在しないことである。データサイエンスで使える Ruby 向けの置付けツールは少ないが存在はする。しかし、これらは開データサイエンスの領域では、プログラミング言発者各自が思い思いのツールを好き勝手に作る方式語として Python と R が現在の主流として多くので供給されており、計画性がないオープンソース活ユーザを集めている。

動に支えられている。そのため、ツール間でデータPython は機械学習に強いプログラミング言語である。その理由は、scikit-learn*5 がとてもよく作られていて使いやすいからである。scikit-learn のユーザが多いため、xgboost*6 や keras*7 などの後発ライブラリが scikit-learn と互換性のあるインターフのやり取りができない、データサイエンスのすべての工程を一貫して Ruby で実施できない、ツールの品質が悪くて利用できない、などの理由から業務での利用を諦めざるを得ないのが現実である。

ェイスを提供することで、大きなライブラリ生態系

この状況を一変させるには、データサイエンスのが作られている。

仕事を最初から最後まで Ruby で実施できる実用的な環境を作り上げることが必要である。その方

R は、もともと統計解析のために作られたプログ法として、本レポートでは、データサイエンスの仕ラミング言語であり、統計解析のための機能は非常事でよく利用されている Python*2 と R*3 のツールに豊富である。時系列解析のように、R を使わなけを Ruby から利用する方法の開発を提案する。開発れば実現できない手法もある。の進め方としていくつかのマイルストーンを示し、両言語がよく利用されるもう一つの理由として、この計画の現状に対する利点と欠点をそれぞれ述

データフレームを便利に扱えることが挙げられる。

べる。

Python には pandas*8 がデータフレームを提供し、R は言語のコア機能としてサポートしている。
Python と R はスクリプト言語であり、科学技術計算で要求される高速な実行速度は望めない。そのため、両言語とも、データサイエンスで利用さ*4 http://julialang.org/* muraken@gmail.com*5 http://scikit-learn.org/stable/*1 https://www.ruby-lang.org/*6 https://github.com/dmlc/xgboost/*2 https://www.python.org/*7 https://keras.io/*3 https://www.r-project.org/*8 http://pandas.pydata.org/

1

れるライブラリ群のコア機能は C, C++, FortranSummer of Code*19 でプロジェクトを運営するなで実装されている。Python は、SciPy コミュニテ

ど、現在も活動が続いている。

ィ*9 が開発している Cython*10 と呼ばれるグルー言

し か し な が ら、 デ ー タ サ イ エ ン ス 領 域 で は、語により、C 拡張を実装しやすくなっている。R は

Rcpp*11 ライブラリによって C++ との連携が強化

Python, R, Julia とは比べるまでもなく、SciRubyの存在感は無いに等しい。この状況には次の 3 つ要されている。

因が相互に関連し、ネガティブフィードバックを作

2.2 データサイエンスにおける Julia の位置付け
Julia は、2012 年に登場したばかりの若いプログり上げていることが関係していると筆者は考えていラミング言語であり、活発に開発が進んでいる。この言語は、Python のように書きやすく、C++ や(2) ユーザが少ない、(3) 開発者が少ない、である。
必要な道具が揃わないのは、SciRuby がボランテ

Fortran のように高速に実行できる*12 ことが特徴ィアベースの開発者コミュニティーだからである。

である。そのため、アルゴリズムの実装とそのアプ開発者が各々で好き勝手に欲しい道具を作るため、リケーションの両方を Julia で書ける。これはプロ異なる道具間の連携が整備されず、一つの環境としグラマにとって非常に良い特徴であり、データサての完成度は低い。そのためユーザと開発者が増えイエンス領域で将来主流となることが期待されてず、オリジナルの開発者が開発を止めるとそのままいる。

放置されてしまい、完成度がどんどん低下していく。

る。その要因とは、(1) 必要な道具が揃っていない、現在の Julia は、言語仕様そのものが過渡期特有

このような負のサイクルを止めなければ、Ruby がの不安定性を持っており、バージョンが上がる度にデータサイエンスの領域で利用されるプログラミン下位互換性の無い変更が入るため、実用的では無い。

グ言語にはなれない。その理由は、比較対象である

一方、Julia は、Python や R の資産と連携するためのライブラリが準備されており、現在の環境

Python と R の完成度が非常に高く、さらに Juliaとの比較でも SciRuby の完成度は低すぎると言っから移行するユーザの利便性が考えられている。て良いレベルだからだ。

例えば、Python のユーザは、ScikitLearn.jl*13 と将来に向けて負のサイクルを止めるには、実用的PyPlot.jl*14 を 用 い て、 そ れ ぞ れscikit-learn とmatplotlib*15 を Julia から利用できる。これらはPyCall.jl*16 を利用して作られたラッパーであり、Python で実装された他の既存資産も同様に呼び出な環境を短い期間で整備し、Ruby を使ってデータサイエンスに取り組むユーザを増やす必要がある。

4せる。

将来に向けた開発計画
前節で述べたように、Ruby が将来、データサイエンスで使えるプログラミング言語になるためには、

3 SciRuby の現状と将来性

Ruby 向けの実用的な環境を短期間で実現する必要SciRuby*17 は、Ruby のための科学技術計算とデがある。そのための現実的な手段として、既存の良ータ可視化のためのライブラリを開発している開い環境、即ち Python と R のために開発された環境

発者コミュニティである。SciRuby は 2011 年にを Ruby から使えるようにする方法を提案する。

John Woods 氏により開始され*18 、毎年 Google

Ruby のために独自環境をゼロから開発する方法は現実的ではない。これは、短期間で実用的なものにならないだけでなく、多くのユーザを確保する面*9 https://www.scipy.org/

でも困難である。なぜなら、成功するかどうか分か*10 http://cython.org/

らない独自環境を採用することは、エンジニアにも*11 http://www.rcpp.org/*12 http://julialang.org/benchmarks/

企業にもメリットがないからである。すでにメイン*13 https://github.com/cstjean/ScikitLearn.jl/

ストーリムとして確立されている Python や R に*14 https://github.com/JuliaPy/PyPlot.jl/

適合させる方が、エンジニアとしては仕事を得る機*15 http://matplotlib.org/*16 https://github.com/JuliaPy/PyCall.jl/*17 http://sciruby.com/*18 http://sciruby.com/blog/2011/08/15/first-post/*19 https://developers.google.com/open-source/gsoc/

2

2017年3月
第1マイルストーン

他言語ブリッジ

・Python ブリッジ基本機能
・R ブリッジ基本機能
・Julia ブリッジ基本機能
・Python, R, Julia 間の連携
・一群ライブラリのラッパー

2017年12月

表1 一群ライブラリと二群ライブラリの一覧

第2マイルストーン【一群ライブラリ】
ライブラリ名 プログラミング言語

・ブリッジの機能拡張
・二群ライブラリのラッパー・Stan との連携

numpy
scipy
pandasscikit-learn
matplotlib
basestatsgraphics

・Ruby の既存ライブラリの連携

Ruby Grant 2016

Ruby 独自のエコシステム

・Rubyを用いた初等統計解析の整備と構築
・Ruby/Numoの整備
・Tensorflow.rb

PythonPythonPythonPythonPythonRRR【二群ライブラリ】
ライブラリ名 プログラミング言語

図1 他言語ブリッジの開発計画 (上段) と Ruby
Grant 2016 (下段) との関係

seaborn
gensimpillow
keras
chainer
dplyr
tidyr
vars
forecasttseries
ggplot2

会が多くなり、企業としては世界中に多数存在する優秀なエンジニアを獲得できる可能性が高くなる。

4.1 開発計画のマイルストーン
提案する開発計画は、大きく 2 つのマイルストーンから構成される。
第 1 マイルストーンは、データサイエンスのために最低限必要な機能のラッパー、そのラッパーをPython
PythonPythonPythonPythonRRRRRR

分類
計算基盤
計算基盤
データフレーム
機械学習
可視化
計算基盤
統計解析
可視化

分類
可視化
機械学習
画像
深層学習
深層学習
データフレーム
データフレーム
統計解析
統計解析
統計解析
可視化

実現するために必要となる言語間ブリッジの基盤整
備、他言語間連携への対応で構成される。第 2 マイ

前節で提案した開発計画は、第 2 マイルストーン

ルストーンは、ブリッジ機能の強化、追加機能のラで取り組む「Ruby の既存ライブラリとの連携の開ッパー、ベイズ推定のための Stan との連携、そして発」において、Ruby Grant 2016 のプロジェクトとRuby の既存ライブラリとの連携の開発で構成される。2 つのマイルストーンを図1の上段に図示した。の連携機能が導入されることになる (図1における下段から上段への矢印)。

データサイエンスで利用される他言語のライブラ

6

リを一群と二群に分け、一群の基本機能を第 1 マイ

まとめルストーンで、一群の機能強化および二群の基本機

本レポートでは、Ruby をデータサイエンスで使能への対応を第 2 マイルストーンで扱うこととすえるプログラミング言語にする計画について述べる。一群ライブラリと二群ライブラリの構成は以下た。それは、Python と R の資産を Ruby から利の通りである。

用するためのブリッジとラッパーの開発である。
さらに、将来の技術動向の変化に対応していくた

5 Ruby Grant 2016 と本レポートの開めに、プログラミング言語 Julia とのブリッジの必発計画との関係要性を説明した。

Ruby Grant 2016*20 では SciRuby に関連する開提案した方式には、データサイエンスの世界でメ発プロジェクトが 4 件採択されている。4 件とも本インストリームとなっているツールを Ruby でもレポートで提案する開発計画とは異なり、Ruby の利用でき、業界標準のスキルセットを Ruby でも流ための独自環境の整備に該当するプロジェクトで用できる、などの利点がある。そして、短い期間である。

実用的な環境を作り上げることが可能である。

*20 http://www.ruby.or.jp/en/news/20161121.html

3