1つのpythonのソースコードからmarkdownやipynbを作るツールを作りはじめた(文芸的プログラミングっぽい感じ)
jupyter notebookは便利なのだけれど。便利な点はcellがあることで。 一方で不便な点もあって。不便な点もまたcellがあることという感じ。
端的にいうとjupyterを立ち上げるのが面倒くさいのとcell間のコントロールを行き来するのが面倒くさい。
nbreversible?
まだ作り途中だけれど、reversibleというところに重きを置いている。jupyterにもnbconvertというサブコマンドがありこれによってnotebookのipynbをhtmlにしたりmarkdownにしたりscript(pythonコード)にしたりできるのだけれど。変換が一方向でreversibleじゃない。
とくにpythonコードとipynbの間で行ったり来たりができるようになれば。しばらくはエディタ上に引きこもれるのでは?というような事を思った。
具体的な仕組み
具体的な仕組みはpythonコードを生成してipynbを生成するだけ。
$ python -m nbreversible --format=notebook script.py > script.ipynb
この時のpythonの記述が少し特殊なもの。
ついでにもう1つ条件があり、連続してpythonコードが続きつつcell自体を分けたい場合にはnbreversible.code
を利用しwith blockで括る(その範囲がcellになる)。
これが以下のような2つのcellに分かれる(今回はmarkdown出力)。
$ python -m nbreversible --capture --format=markdown script.py > script.md
--capture
オプションをつけると標準出力もみてくれるようになる(そう言えば標準エラーは見ていないかも。あとnbconvertに合わせて--execute
などに変えるかもしれない)。
print("this is python code cell") from nbreversible import code # this is python code cell
with code(): print("this is another python code cell") # this is another python code cell
ちなみにこの記事自体もpythonコードから生成されている。