Jupyter(IPython Notebook)を使い始めた

モダンなプログラミング言語には、対話型インタープリター=REPLというのがついている。自分が使った中ではPython、Rubyにはもちろんついている。Javascriptはブラウザのコンソールが実質REPLになる。(nodeもか)コンパイルが必要なはずのScalaにもある。
テキスト処理系のタスクなんかだと、少しずつREPLでテストしながら開発してくのがとても便利である。

で、今「自然言語処理100本ノック」をやっているんだけど、第三章「正規表現」がかなりきつい。このレベルだと正直REPLでは不足するようになってきた。

そういえば昔クックパッドのインターンに行っている時にIPython Notebookって使ったことあったなぁ、と思い自分の環境にも入れてみた。

  
そしたらこれが今までなんで使わなかったんだと後悔するほど便利。これは革命。

 
まぁ見りゃわかるけど、プログラムを入力するテキストボックスがあって、その場で実行可能。入力に補完もきく。実行もその場でできて、結果はすぐ下に表示される。(matplotlibなどで作った図も出せる)しかもそのまま保存もできる。
WEBサービスの「オンラインプログラム実行環境」とは違ってインストールしてるライブラリも使えるしローカルファイルのアクセスも可能。完全にREPLを置き換えられる。
ローカルでWEBアプリを動かしてるようなもんなので、表示量が増えると動作が遅いというのはあるが、デメリットはそれくらい。

REPLの場合、結果や入力内容がどんどん流れていってしまうのでどの時点でどんな結果が出ているかを把握しておくのが難しい。
その点Jupyterを使えばとりあえず今動いているやつを残しておいて、別のセルでリファクタリングする、機能を追加する等可能。もしなんだかわかんなくなってきてしまったら元のコードのあるセルに戻ればいいだけ。
行単位で入力していく必要があるREPLよりも編集しやすいし、にコピペするとインデントが崩れる問題とも無縁に。

Jupyterのおかげで正規表現との戦いに打ち勝つことができました。