Jupyter Notebook便利ですね、皆さん使ってますか?
コードの実装や確認にも便利なのですが、工夫をすれば単体テストやマニュアル制作まで出来てしまう優れものです。
この記事では、従来の使い方とは少し違う便利な使い方を紹介します。
単体テストに使う
Jupyterは結果を確認しながらコードを書けるので便利ですよね。
その確認作業をそのまま単体テストに使えるとしたら便利だと思いませんか?
pytest-ipynbを使えばできます!
pytest-ipynb
は、pip
で簡単にインストールできます。
$ pip install pytest-ipynb
このモジュールは、テストライブラリpy.testの拡張なので、py.testのインストールも必要です。
使い方は簡単でテストを入れているディレクトリにtest*.ipynb
の名前のNotebookを放り込むだけです。
あとはそのセルにテスト内容を以下のように書けばOKです。
''' mul test '''
a = 100 * 2
assert a == 200
マニュアルの機能一覧を意訳してみました。
- 'test*.ipynb'ファイルをディスカバリします
- Notebookの各セルが単体テストとして実行されます(assertを使うだけ)
- 各セルの最初の行のコメント(docstring)は、テスト名または関数名として扱われます。
- docstringに'fixture*'または'setup*'とすれば、それぞれの単体テストの前に実行されます
- docstringに'SKIPCI'と書けばTravis-CIでのテストはスキップされます(CI環境変数が定義されているかどうかを確認)
- IPython Notebookカーネルはテスト後にリスタートされます
- テスト時のワーキングフォルダは、.ipynbファイルのローカルです
訳に間違いがありましたら、ご指摘をお願いします。
あとは普通にpy.test -v
を実行するだけで、Notebookも含んだテストをしてくれます。
Readme.mdに使う
GithubのReadme.mdにも使えます、実行結果を記載したい時などは手間が減って便利です。
私の作成したモジュール「Image4Layer」のGitHubも、JupyterからReadme.mdを生成しています。
JupyterのメニューからFile > Download as > Markdown(.md)と選択すれば、マークダウンのzipファイルが生成されます。
生成された.mdをリネームして微調整すれば完了です。
ただし画像などを生成した場合は、ルートディレクトリに画像を展開してしまうので修正が必要だと思います。
Sphinxに使う
「Sphinxを便利にして、みんなに使ってもらいたい」という記事にも書きましたが、NotebookはSphinxにも追加することができます。
Sphinxの拡張にnbsphinxというものがあり、この拡張でJupyterノートブックを取り込むことができます。
インストールはpip
で簡単に行えます。
pip install nbsphinx
Sphinxに取り込むと、以下のような表示になります。
Sphinxの詳細な設定は、以下の記事を参照してください。
Sphinxのドキュメント作成を便利にする「sphinx-quickstart-plus」を作りました
Sphinxを便利にして、みんなに使ってもらいたい
処理時間の計測に使う
基本的な事ですが、知らない方もいると思いますので記載しておきます。
%timeit
コマンドでJupyterで関数の処理時間計測も計測してくれます。
しかも、処理時間のブレを考慮して適当な試行回数でベストな時間を計測してくれるので、自力で計測するよりも高品質な計測結果が取れます。
In [1]: %timeit l = [x ** 2 for x in range(1000)]
1000 loops, best of 3: 45 ms per loop
まとめ
他の人のJupyter Notebook活用記事が読みたいです!