Edited at
RubyDay 10

Pythonista以外が環境を汚さずにJupyter Notebookに触れる方法 あるいは,Rubyist以外が環境を汚さずにJupyter NotebookでRubyに触れる方法

More than 3 years have passed since last update.


TL;DR



  • Jupyter Notebookがアツい! RubyとかElixirも動かしてみたい!

  • Dockerコンテナで動かせば楽!



    • Docker ToolboxだけでOK!

    • Pythonの知識なくても環境構築できる

    • RubyやElixirの知識がなくてもJupyter Notebook上でそれらの言語が扱える




Jupyter Notebookについて

Jupyter Notebookがキテる!という話は色々なところでなされているため本稿では省略する:

このJupyter Notebook,Pythonista以外にとっては環境構築が面倒であるという欠点(?)がある.よくわからないまま言われるがままに環境を整えることもできる.が,あとで本格的にPythonを始めようとしたときに頭を抱えることになりかねない.Pythoninstaではない人はPythonのベストプラクティスを知らないことが多いからだ.

また,Jupyter Notebookはkernelというものを利用することでPython以外の言語を動かすことも可能である.が,例えばRubyを普段触らない人がこれをセットアップするのは非常に面倒くさい.Rubyistではない人はRubyのベストプラクティスを知らないことが多いからだ.この問題はあらゆるKernelを導入するときに同じように言える.

このJupyter Notebookのような,「(自分にとって)よくわからない環境」を構築するのにはDockerが向いているような気がする.ということで,本稿ではそのやり方について説明する.


Docker Toolbox

Docker ToolboxにはDocker Client,Docker Machine,Docker Compose,Docker Kitematic,VirtualBoxが含まれる.ローカルでDocker使いたければとりあえずこれ入れとけばなんとかなる.

まだ使ったことのない人はとりあえず以下のコマンドでDocker Machineを動かしておく.

$ docker-machine create --driver virtualbox dev

$ eval $(docker-machine env dev)


DockerでJupyter Notebookを動かす

Jupyter NotebookのGitHub repoを見ると,Dockerfileが含まれていることがわかる.今回はこれを参考にして,各言語のカーネルごとにDockerfileを作っていく.

とりあえずサンプルとして,Ruby及びElixirのkernelが入ったDockerfileを用意してあるので,これを元にDockerfileを書いていく(=> izumin5210/notebook-dockerfiles).


Dockefile

FROM izumin5210/iruby-notebook


基本はこれだけ.なんらかのRubygemsを利用したい場合は,Dockerfileにgem installを記述していく.


Dockefile

FROM izumin5210/iruby-notebook

RUN gem install rails


ローカルにGemfileを用意しておいて,それをCOPYしbundle installするのでもOK:ok_woman:


Gemfile

source 'https://rubygems.org'

gem 'rails'



Dockerfile

FROM izumin5210/iruby-notebook

ADD Gemfile .
RUN bundle install


あとはこのDockerfileをビルドして起動すればJupyter Notebookが利用できる.

$ docker build -t=iruby-notebook .

$ docker run -p 8888:8888 -v "$(pwd):/notebooks" iruby-notebook

毎回docker runのオプションを書くのが面倒な人は,docker-compose.ymlを書いておきdocker-compose upを叩くようにすると幸せになれそう.


docker-compose.yml

iruby-notebook:

build: .
ports:
- 8888:8888
volumes:
- .:/notebooks


References