こんにちは。新規広告開発部所属エンジニアのレオ(@lchin)です。普段は広告配信関係のシステムを開発していますが、ここ最近「データサイエンス」に興味を持ち始めました。雑に説明すると、データサイエンスは統計学や機械学習などを用いて莫大のデータから価値を引っ張り出す分野です。今回のtechlifeは、そのデータサイエンスを学ぶ過程で知ったツールJupyter NotebookをRuby on Railsの開発に役に立つ使い方を紹介します。
Jupyter Notebookとは何か
Jupyter Notebook*1は科学者の「実験ノート」にインスパイアされたウェブ上のインタラクティブシェル環境です。ただのインタラクティブシェル環境ではなく、ソースコード、その実行結果、解説する文書、数式、画像などをまとめて1つの「ノートブック」ドキュメントとして扱えることが特徴です。
Jupyter NotebookはPythonで実装されていますが、ウェブのUIとノートブックのソースコードを実況する環境が分かれている設計のため、Python以外に様々なプログラミング言語に対応しています。ソースコードを実行するコンポーネントはkernelと呼ばれています。Rubyを実行するkernelはiRubyです。
Jupyterの試し方
Jupyterをインストールせずに試す方法としてTry Jupyterがあります。Rubyのサンプルノートブックはないのですが、iRubyがインストールされてる環境ですので、MenuからRubyを使ったノートブックを作成できます。
ちょっと試すのに、Try Ruby上に入ってるGemを調べてみます。
local_gems = Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.group_by{ |g| g.name } local_gems.keys.each {|gem_name| puts gem_name }
作成したノートブックはnbviewerを使って、実行結果を含めて共有できます。例えば、上記のRubyをTry Jupyterに実行してみた結果は以下のURLに閲覧できます。
JupyterとRails
さて、Jupyterを使ってRuby on Railsの開発に役立つには、Railsアプリに接続する必要があります。まず、JupyterとiRubyを手元の環境に用意します。
JupyterとiRubyをインストールする
Pythonのある環境であれば、pip
などでインストールできます。
pip install jupyter
Pythonのない環境の場合、Jupyter公式ドキュメントのインストール手順に従い、Anaconda(Jupyterを含むデータサイエンス向けPython版)をインストールします。
iRubyはRubyGemsでインストールできますが、環境に応じてlibmzq3など依存ライブラリのインストールも必要です。
gem install iruby
そして、Jupyterにirubyを登録して、jupyterを起動します。
ruby register jupyter notebook
Railsと繋ぐ
iRuby kernelを使ったノートブックは少し特殊なirbみたいなものです。Railsと繋ぐには、rails console
と同じようにRAILS_ROOT
でbootして環境を読みこめばよいです。
FileUtils.cd rails_root require './config/boot' APP_PATH = File.expand_path('config/application') unless defined?(APP_PATH) require APP_PATH Rails.application.require_environment!
Jupyterの応用
Jupyter Notebookは、ad-hocなソースコードを実行し、その実行結果を文章などと合わせてドキュメントにまとめてnbviewerに共有することがチームでRailsアプリを開発する様々な場面で役に立ちます。
- IRB, pryなどの代わりのプロトタイピングと検証(結果が残るから再現しやすい)
- 新機能をプルリクエストにまとめる時、その動作や実行結果を共有して簡単なでもにする
- デバッグする時に、バグを再現した結果データや原因の仮説などを別のファイルにコピペせずに、1つの資料に残せるため、時間が掛かるバグ調査が少し楽になる
- プログラムやアルゴリズムの最適化を行うときもデバッギング同様に、実験の繰り返しですので、仮説、コード、データ、が揃えてる残す必要のある作業である
- また、RailsアプリのDBに入ってるデータを直接引っ張りだして、daruやstatsampleなどSciRubyの科学計算ライブラリを応用してデータ分析もできる
終わりに
科学者同様にエンジニアも科学的方法を応用することに価値があると思います。そこで、Jupyter Notebookは役に立つツールですし、iRubyと合わせるとRuby on Railsアプリの開発過程でも便利に使えます。是非試してみてください。
最後に、クックパッドでは私達と一緒に「科学する」エンジニアを積極的に募集していますので、是非ご応募ください!