Jupyter notebookのNode kernel

JupyterにはJavascriptとゆーかNode用のkernelがある。

Jupyter NodeJS

便利に使っていたんだが、Jupyterをいろいろいじくっていたら、最近動作してないことに気がついた。先日Ubuntuをアップグレードした時にlibzmqを入れ忘れたのが原因らしいので入れてみたら、今度はバージョンがどうとかと言って動かない。

それならということで、件のkernelを再buildしようとすると、npm installの時点でコケる。おかしいなーと思っていろいろいじっていたら、どうやらnanがあれやこれやと言っている。

じゃあnanを何とかすればいいかと思ったら、nanは最新になっている。どんなエラーが出ているかと言えば、

make: ディレクトリ '/home/ogochan/git/jupyter-nodejs/node_modules/zmq/build' に入ります
CXX(target) Release/obj.target/zmq/binding.o
In file included from ../binding.cc:29:0:
/usr/include/zmq_utils.h:46:84: note: #pragma message: Warning: zmq_utils.h is deprecated. All its functionality is provided by zmq.h.
"Warning: zmq_utils.h is deprecated. All its functionality is provided by zmq.h.")
^
In file included from ../node_modules/nan/nan.h:190:0,
from ../binding.cc:38:
../node_modules/nan/nan_maybe_43_inl.h: In function ‘Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)’:
../node_modules/nan/nan_maybe_43_inl.h:88:15: error: ‘class v8::Object’ has no member named ‘ForceSet’
return obj->ForceSet(GetCurrentContext(), key, value, attribs);
^~~~~~~~

とか言ってる。nanだろうなと思ってnpmjs.comのnanのページを見てみる。

Native Abstractions for Node.js

見てみると、エラーと言っているNan::ForceSet()に打ち消し線が入っている。どうもないのか使えないのか知らんが、エラーのことも考えるとなくなったような感じである。

そこでまぁzmqモジュールを上げればいいだろうと思ったら、書いてあることが何やら古い(io.jsに言及されてるなんて…)。よく見るとlatestが2年前と来たもんだ。こりゃVer 10とか11のNodeのことなんか知らんわなと思って調べていると、似たような名前のzeromqというのサジェストされる。これもZeroMQ用のモジュールである。

Node.js – NPM package zmq vs zeromq

Versionsを見ると、つい最近もアップデートされている。

ということで、build/socket.jsの中にあるrequire(‘zmq’)をrequire(‘zeromq’)に修正するとめでたく動くようになった。もちろんpackage.jsonもそれなりに修正しておいた。

まぁ動いてくれれば結果オーライなんだが、こーゆー古いのが使われ続けるというのはどうしたものやら。まぁ、Jupyter NodeJSもたいがい古いからなぁ。