Kotlin で Jupyter Notebook

Kotlin は素晴らしいプログラミング言語である。シンプルかつスマートな言語仕様、リッチな開発環境、ググれば出てくるノウハウ、どれをとっても使いやすい言語である。しかも JVM で動くので Write once, run anywhere 的な恩恵もある。個人的には、現代のプログラミング言語のなかで Kotlin がもっともバランスの取れたよい言語だと思っている。

一方で、データサイエンスといえば Python である。ライブラリの充実はハンパないが、知らない誰かが書いた型の分からない API を使うのはあまりにツラい。Kotlin でデータサイエンスできればそれに越したことはない。この記事は Kotlin kernel for IPython/Jupyter のインストール方法と簡単な使い方のメモである。10年後のデータサイエンスでは静的型付け言語が主流になっていてくれ...。

Kotlin kernel for IPython/Jupyter とは

文字通り Jupyter Notebook の Kotlin カーネルである。Notebook 上で Kotlin コードが書けるようになる。公式リポジトリは以下である。

github.com

デフォルトで Maven Central へのアクセスが可能であり、使用するライブラリ名を指定するだけでプロジェクトの依存ライブラリとしてインポートできる。さらに、データサイエンスに特化したライブラリは %use というキーワードでライブラリ名を指定するだけで自動的にインポートされ、以降でその API が使用可能となる。具体的には、JetBrains 謹製のデータ可視化ライブラリ Lets-Plot for Kotlin、深層学習のための deeplearning4j、numpy を Kotlin の型でラップしたKotlin bindings for NumPy など、対応ライブラリの数は 30 を超える。

インストール手順

ubuntu 20.04 にインストールしてみる。手順は上記の公式 Github ページにある通り。

まずは Kotlin カーネルを pip でインストールする。

$ pip install kotlin-jupyter-kernel

以下のコマンドで notebook を起動。起動の方法はなんでもよい。

$  jupyter notebook .

そして、ノートブックの作成時に Kotlin を選択してノートブックを起動。

f:id:t-keita:20210416020104p:plain

※ ノートブックを開いたときにエラーが発生したので対処した。詳細はこの記事の 末尾 にメモった。

ちょっと触ってみる

とりあえず Kotlin のコードが書けることを確認してみる。

f:id:t-keita:20210416020836p:plain

コード補完も効く。さすが JetBrains 謹製。

f:id:t-keita:20210416021251p:plain

もう少し複雑な例として、Gson ライブラリを使って JSON の文字列を Kotlin のクラスにマッピングしてみた。Maven Central のライブラリは、@file:Repository@file:DependsOn を指定してから import 文を書けば使えるようになる。かなり手軽に使える印象。ライブラリのバージョンを固定できるので安心感がある。

f:id:t-keita:20210416023313p:plain

最後に %use 命令を使って lets-plot ライブラリを使ってみた。%use を使うと Kotlin の import 文を書くことなく直接 API を叩ける。

f:id:t-keita:20210416024728p:plain

所感

  • ノートブック上で変数の型とか表示できるようになるとさらによい。というか IntelliJ IDEA から Kotlin カーネルのノートブックを直接開けるようになればめっちゃ使いやすいと思う。
  • 静的型付けなだけあってライブラリの API を叩くときの安心感がある。データサイエンスに必要なのは型チェック。

付録:ノートブック起動時のエラー対処

保存したノートブックを開いた時にエラーが発生したのでその解決方法をメモっておく。

発生した事象

Jupyter Notebook を起動したときに Notebook failed to load - The error was: TypeError: ext.toLowerCase is not a function と表示され、ノートブックに何も表示されない。

原因の調査

Jupyter Notebook のバージョンは以下。

$ jupyter notebook --version
6.0.3

どうやら Jupyter Notebook が持っているクライアントサイドの JavaScript コードにバグがある。 以下のコミットでこのバグが修正されている。

github.com

Jupyter notebook のバージョン 6.1.0 以降でこのバグ修正が取り込まれているので、現状の 6.0.3 からより新しいものへアップデートすれば良さそう。もともと apt install jupyter-notebook でインストールしていたが、これによってやや古いバージョンのものがインストールされていたのが原因っぽい。

解決策

いったん jupyter をマシンからアンインストールして、以下のコマンドによって再インストール。pip 経由のほうが新しいバージョンのものが入るらしい。

$ pip install jupyter

バージョンを確認。

$ jupyter notebook --version
6.3.0

これでバグ修正済みのバージョンが入った。実際、ノートブックを開き直すと無事エラーなく起動できた。