Jupyter Notebook 便利ですよね!
REPL感覚で使えるけれど、REPLより使い勝手良いし、セルごとに何度もやり直しできるし、リンクを共有すればコードもさくっと共有できます。
Scala にも spark-notebook や Apache Zeppelin などの ノートブック形式Webアプリケーションがいくつかありますが、いつも使っている Jupyter Notebook で Scala を動かしたかったので、今回 Jupyter Notebook のカーネルに Scala を追加しました。
この記事を書いた経緯なのですが、「jupyter-scala」 の名称が変わっていたりインストールの仕方が変化していたため、一旦まとめた次第です。
※ この記事を書いているのは 2018.11.01であり、今後も変更の可能性は大いにあります。。。
Jupyterのインストール
既に Jupyter をインストール済みの方は読み飛ばしちゃってください
Pythonのインストール
私は Anaconda派なので Anacondaの3系 を入れます。
1 2 3 4 5 | $ wget https: //repo .anaconda.com /archive/Anaconda3-5 .3.0-Linux-x86_64.sh $ chmod +x Anaconda3-5.3.0-Linux-x86_64.sh $ . /Anaconda3-5 .3.0-Linux-x86_64.sh # ポリシーの同意や、インストールパスを聞かれます. 私は /usr/local/anaconda3 をプリフィクスにしました. $ python --version |
PATHに /usr/local/anaconda3/bin が追加されたので反映します.
1 | $ source ~/.bashrc |
nbextensionsのインストール
nbextensions は Jupyter Notebook を便利にするための拡張機能です。
便利なので、私は入れましたが、飛ばして頂いても問題ないです。
1 2 3 | pip install jupyter_contrib_nbextensions jupyter contrib nbextension install jupyter contrib nbextensions migrate |
profileの作成
Jupyter Notebook の設定ファイルを生成します。
1 2 3 4 5 6 7 8 9 10 11 | jupyter notebook --generate-config vi ~/.jupyter /jupyter_notebook_config .py ~ # 設定を変更します. # 特に必要がなければやらなくて大丈夫ですが、サーバで公開する場合は下記の変更が必要です. c.NotebookApp.ip = '0.0.0.0' c.NotebookApp.open_browser = False # c.NotebookApp.port = 8888 # 8888 以外で公開するなら #c.NotebookApp.password = '' # 設定したほうがベター ~ |
Jupyter のインストールはこれで終わりです。
coursierインストール
次章で紹介する almond をインストールするために
coursier という Scalaライブラリ高速フェッチャー が必要なので、まずはこちらをインストールします。
1 2 3 | $ curl -L -o coursier https: //git .io /coursier && chmod +x coursier && . /coursier --help |
※ 公式サイトそのままです …少し時間がかかります。
パスを通すか、パスの通っている場所へ置きます。
1 2 3 4 | $ mv . /coursier /opt/bin $ echo "PATH=/opt/bin:$PATH" >> ~/.bashrc $ which coursier /opt/bin/coursier |
almondインストール
2018年現在、Jupyter の Scala カーネル(jupyter-scala)は almond として提供されるようになったようです。
almond は前章でインストールした coursier を使います。
1 2 3 4 5 6 | $ SCALA_VERSION=2.12.7 $ ALMOND_VERSION=0.1.10 $ coursier bootstrap \ -i user -I user:sh.almond:scala-kernel-api_$SCALA_VERSION:$ALMOND_VERSION \ sh.almond:scala-kernel_$SCALA_VERSION:$ALMOND_VERSION \ -o almond |
※ 公式サイトそのままです
あとは almond コマンドを実行するだけです。
1 | $ . /almond -- install |
Jupyter Notebookの起動
あとは起動するだけです。
1 2 | nohup jupyter notebook & tail -f nohup .out |
Scalaカーネルの起動
ブラウザから Jupyter Notebook にアクセスします。
カーネルで Scala が選択できるようになっています。
試しに notebook を作成して実行してみます。
特別な設定なく普通に実行できました。
これは快適です。
jar依存の追加
almond は Ammonite の薄いラッパーだそうでして、依存解決も Ammonite によって提供されています。
試しに、 cats と circe への依存を追加してみます。
適当なセルで下記のように入力し、実行します。
1 2 | import $ivy.`org.typelevel :: cats-core : 1.4 . 0 ` import $ivy.`io.circe :: circe-parser : 0.10 . 1 ` |
jar のダウンロードログが出ます。
scala バージョン付き jar は 先頭の : を 2個(::)にします(Java用のは1個)。
簡単な、 cats を使ったコードを実行してみます。
1 | "apple" .some |+| " pineapple" .some |
こんな感じですね。
これは便利。