Ruby
Python
Rails
Jupyter

Jupyter Notebook 上で rails c を動かす

はじめに

Jupyter Notebook では Python 以外の言語も動かせるらしいですね。Ruby も動かせるらしいので、せっかくなら Rails アプリケーションの rails c を Jupyter Notebook 上で実行できないか調べてみました。

バージョン情報

$ sw_vers # macOS High Sierra
ProductName:    Mac OS X
ProductVersion: 10.13.1
BuildVersion:   17B1003

$ python --version
Python 3.6.4

$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]

$ bin/rails -v
Rails 5.1.4

手順

Jupyter Notebook のインストール

$ pip install jupyter
$ jupyter --version
4.4.0

iruby のインストール

Jupyter Notebook 用の Ruby カーネルである SciRuby/iruby をインストールします。なお README.md のインストール方法では ffi-rzmq ではなく cztop をインストールしていますが、これだと実行時にエラーになったため、代わりに ffi-rzmq をインストールしました。

$ brew install zeromq
$ brew install czmq --HEAD
$ gem install ffi-rzmq iruby
$ iruby register --force

Rails アプリケーションでの準備

Jupyter Notebook 上で Rails コンソールを起動したい Rails アプリケーションに、次の Rake タスクを追加します。

lib/tasks/jupyter.rake
namespace :jupyter do
  task :notebook do
    env = { 'RUBYLIB' => [*$LOAD_PATH, Rails.root].join(':') }
    Process.exec(env, 'jupyter', 'notebook')
  end
end

また、Gemfile にも ffi-rzmqiruby を追加します。

Gemfile
group :development do
  # 略
  gem 'ffi-rzmq', '2.0.5'
  gem 'iruby', '0.3'
end

Jupyter Notebook の起動

追加した Rake タスクを実行することで、必要な環境変数がセットアップされた状態で Jupyter Notebook が起動します。

$ bin/rails jupyter:notebook

Jupyter Notebook で Rails を読み込む

Notebook を作成してみます。iruby をインストールしたおかげで Ruby 2.4.3 が選択できるようになっています。

スクリーンショット 2017-12-22 18.20.42.png

Notebook を作成したら、まず次のコードを実行して Rails の環境を読み込みます。

# Rails アプリケーションのルートディレクトリが ~/workspace/my_rails_app だとする。
rails_root = File.join(ENV['HOME'], 'workspace/my_rails_app')
require(File.join(rails_root, 'config/boot'))
APP_PATH = File.join(rails_root, 'config/application')
require(APP_PATH)
Rails.application.require_environment!

スクリーンショット 2017-12-22 18.21.40.png

動いた! \\\٩( 'ω' )و////

参考