1 of 10

irb用

Jupyter ラッパーカーネルirb_kernelの紹介

@kozo2

2 of 10

irbとは

  • Ruby標準の対話実行環境 (REPL)

3 of 10

Jupyter (Notebook) とは

  • ブラウザでリモート環境中のREPLを叩く,結果を表示するための�サーバープログラム (Python製)�
  • 結果の画像やHTMLをブラウザ内で見れる�
  • REPLの言語はPythonだけでなくいろんな言語に置き換えて使えるように設計されている

4 of 10

JupyterとRuby

  • irubyという�Jupyterカーネル用gem�が存在する��
  • インストール,設定に少々難がある
    • 特にメッセージ通信用の�依存gem (zeromq binding)�に難

Web�browser

Notebook�server

.ipynb�(json)

Kernel

(iruby)

HTTP

zeromq

��

render

Code

eval

result

export-import

Jupyterのしくみ

カーネル

5 of 10

ネイティブカーネルとラッパーカーネル

  • ネイティブカーネル == カーネルすべてをカーネル用言語で実装
    • irubyはネイティブカーネル�
  • ラッパーカーネル == Pythonで実装。カーネル用言語のREPLをラップする
    • Pythonのpexpectパッケージを利用してPythonからirbをコントロールする
    • ラッパーカーネルではカーネル用のgemは不要となる。irbにパスさえ通っていればよい�
  • irbをラップしたラッパーカーネルはまだ無かった

6 of 10

irbのラッパーカーネルirb_kernel

  • ラッパーカーネルは雛形があり肝となる下記コードだけ変更すればよい

7 of 10

Jupyterのセルが複数行の場合への対応

  • 改行をセミコロンに置き換え複数行のRubyコード片をワンライナーにして実行している
    • コード片の途中にコメントがあったらそれ以降の行が無視されてしまう...

8 of 10

irb 1.2.* でよくわからなくなりました

  • 1.1.* から かなり変わった模様
  • pexpectのREPLWrapperに--nomultiline オプションが必要
  • 実行結果がバイト文字列(?)になってしまう

9 of 10

irb_kernelの今後

  • irb 1.2.* のサポート�
  • 画像やHTMLなどの表示

bash_kernelでの画像表示の実装

10 of 10

おわりのスライドです (まとめ)

  • Jupyter NotebookではRubyも使える�
  • RubyのカーネルにはREPLをラップするだけで簡単に実装できる方法がある�
  • irbのラッパーカーネルとしてirb_kernelを作った�
  • irb_kernel の中身,問題,今後�
  • irb_kernel は簡単。興味を持たれたらいじってみてください