notedown : MarkdownでJupyter
Jupyter を使っていると、ファイルがjson の独自方式で保存されるのが残念に思う事ってありません? ファイルの構造は Markdown でも充分記述できそうですし、その方が既存のツール(diffなど)で差分を見るときに直感的だと思います。 何か理由があるんでしょうか?
そういう plugin or tool が無いかと Google 先生に尋ねたところ…… ありました!!
notedown
markdownでnoteが使えれば割と便利だと思うのですがユーザーは少ないようです。 日本語の記事も少なめでした。
基本的な機能は jupyter notebook から markdown への変換、読み取り。 何故か knitr : Rmakown をJupyter notebook に変換させる機能までついています。
- Jupyter notebook (.ipynb) <=> markdown (.md) 相互変換
- knitr : R-markdown (.rmd) -> markdown (.md)
- knitr : R-markdown (.rmd) -> Jupyter notebook (.ipynb)
これらの操作はシェル上でコマンド操作で行えます。 knitr *1 に関する機能は今のところ確かめておりません。
jupyter_notebook_config.py を編集してmarkdown をnotebook として取り扱うこともできます。
こちらのソフトの不具合か分かりませんが、markdown ファイルをnotebook として取り扱った際、bash_kernelなどではやや挙動不審(動作が重い、操作が返ってこない)に感じるときがあります。 変換後のファイルの kernel が正しく認識できない場合もあります。 再現条件の詳細は分かりません。
確認した環境
インストール & 簡単な操作
pip でもインストールできますが、anaconda にも登録されていましたので、こちらを使用しました。
$ conda install -c trung notedown=1.5.0 # install $ notedown hoge.ipynb --to markdown # markdown に変換されたものが標準出力
変換後の markdown は code cell とそのアウトプットが少し独特な形になります。 通常のipynbよりは読みやすいですが一般的とはいえません
# markdown hoge fuga ```{.python .input n=1} print("hello world") ``` ```{.json .output n=1} [ { "name": "stdout", "ouput_type": "stream", "text":" "[1] \"hello world\"\n" } ] ```
他のオプション指定で出力は変わるかもしれません。
Jupyter から makdown を notebook として読み込む
jupyter_notebook_config.py (~/.jupyterの下)をエディタで開き、 以下の左辺が記述された部分を探しアンコメントして以下のように書き換える
c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'
こうすると、
touch hoge.md
この様に touch で作ったファイルを jupyter で読み込んで作業することもできます。