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

  • 83
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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