jupyter-scalaでのimport

結論

  • 使いたいライブラリは使いたいサーバでsbt publishLocalしておく
  • 例えばbreezeを使いたいなら,import $ivy.`org.scalanlp::breeze:0.13.1`のようにimportする

背景

そろそろ実際に使えるコードを書いてみようと思ったところ, あまりにもわからないことだらけでびっくりしたのですが,特にはまったのがjupyter-scala.

なぜnotebookが欲しいか

notebookとは,コードをブラウザ上で書いて実行し,その結果をブラウザ上に表示させるというのを 繰り返し実行できる仕組みで,

  • 挙動をよく知らないモジュールを確認する
  • 作ったモジュールを実際に実行する

ということをPythonではnotebookのみで実行しています. なぜなら

  • すべての実行が,再実行可能な形で残される
  • 実行結果も残るので他のメンバも結果のレビューが容易

だからです. Scalaでもぜひnotebookを使いたい.

なぜjupyter-scalaか

こちらはそんなにしっかり試したわけではないので他が良いかもですが そもそも候補は

  • jupyter-scala
  • scala-notebook
  • spark-notebook

がメジャーだと思います.もともとjupyterを使っているので,jupyter projectが 言及しているjupyter-scalaがよい,というのが主な理由です. spark-notebookは使ってみたら重くて嫌になりました.

困ったこと

さて,では実際breezeという数値計算のライブラリを使ってみようとして, そもそも仕組みがよくわかっていないことに気づくのです. そもそも,同じファイルにないものを使いたい時,どうすればよいのでしょうか? Pythonだと,

  • ライブラリはpipでインストールして,import
  • スクリプトをPYTHONPATHの下に置いておいて,import

という2種類ができたのですが,scalaだとどうすれば良いのか.sbtでコンパイルする場合

  • 1 参照先のスクリプトをpackage指定し同時にコンパイルする.参照元でimport文を書く.
  • 2 jarファイルをsrc/main/lib/の下に置いておく
  • 3 build.sbtに参照したいパッケージを書いておく (公開されているパッケージについて?)
  • 4 sbt publishLocalしておいて,参照元でimport文を書く

はできそうです.

ではjupyter-scalaで何ができるのか.

というわけで,4.しか思いつきませんでした. それぞれのサーバーでコンパイルするのでなく,jarファイルでなんとかしたいところではあります.