LoginSignup
84

More than 5 years have passed since last update.

Jupyter Notebookを単体テストやマニュアル作成ツールとして使う

Posted at

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ファイルが生成されます。

メニュー_042.png

生成された.mdをリネームして微調整すれば完了です。
ただし画像などを生成した場合は、ルートディレクトリに画像を展開してしまうので修正が必要だと思います。

Sphinxに使う

「Sphinxを便利にして、みんなに使ってもらいたい」という記事にも書きましたが、NotebookはSphinxにも追加することができます。
Sphinxの拡張にnbsphinxというものがあり、この拡張でJupyterノートブックを取り込むことができます。

インストールはpipで簡単に行えます。

pip install nbsphinx

Sphinxに取り込むと、以下のような表示になります。

jupyter.png

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活用記事が読みたいです!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84