TL;DR
- Jupyter Notebookがアツい! RubyとかElixirも動かしてみたい!
- Dockerコンテナで動かせば楽!
- Docker ToolboxだけでOK!
- Pythonの知識なくても環境構築できる
- RubyやElixirの知識がなくてもJupyter Notebook上でそれらの言語が扱える
Jupyter Notebookについて
Jupyter Notebookがキテる!という話は色々なところでなされているため本稿では省略する:
- Jupyterがすごい勢いでやってくるからお前ら備えとけ(IPython Notebook + R) - Qiita
- Railsエンジニアに役立つJupyter NotebookとiRuby - クックパッド開発者ブログ
- 現代のエンジニアのための強力なメモ帳 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).
FROM izumin5210/iruby-notebook
基本はこれだけ.なんらかのRubygemsを利用したい場合は,Dockerfileにgem install
を記述していく.
FROM izumin5210/iruby-notebook
RUN gem install rails
ローカルにGemfileを用意しておいて,それをCOPYしbundle install
するのでもOK
source 'https://rubygems.org'
gem 'rails'
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
を叩くようにすると幸せになれそう.
iruby-notebook:
build: .
ports:
- 8888:8888
volumes:
- .:/notebooks