nbdev:探索的プログラミングをPythonで実現する開発環境(4/4)

nbdev:探索的プログラミングをPythonで実現する開発環境(4/4)

1.nbdev:探索的プログラミングをPythonで実現する開発環境(4/4)まとめ

・Pythonが持つ特に強力な動的機能IDEでは活用する事が難しいがJupyterは活用可能
・nbdevはJupyterの上に構築されているためPythonが持つ強力な動的機能もフルに活用できる
・nbdevの開発と併せて、fastai v2を完全にゼロからnbdevで書き直されており近い将来リリース予定

2.Pythonの動的機能

以下、www.fast.aiより「nbdev: use Notebooks for everything」の意訳です。元記事は2019年12月2日、Jeremy Howardさんによる投稿です。アイキャッチ画像のクレジットは(Photo by Simon English on Unsplash)。

Pythonの動的機能の活用
通常のエディターまたはIDEでPythonを扱う際の課題の1つは、Pythonが持つ特に強力な動的機能の活用です。例えば、いつでもメソッドをクラスに追加したり、メタクラスシステムを使用してクラスの作成方法や動作を変更したり、デコレーターを使用して関数やメソッドの動作を変更したりできます。

MicrosoftはLanguage Server Protocolを開発しました。これは、コードの自動補完、ナビゲーションなどに必要な情報を現在のファイルとプロジェクトから取得する仕様で、開発環境での開発を支援するために使用できます。

ただし、実際に正しい情報を提供するにはPythonコード自体を実行する必要があるため、Pythonのような真に動的な言語では、そのような情報は常に単なる推測にすぎません。(様々な理由で、実現できないのです。例えば、あなたがコードを書いている時、実際にはコードが書かれているファイルが削除されている最中なんて事も起こり得ます!)

一方、notebookには、実際に実行中のPythonインタープリタのインスタンスが含まれておりPythonの動的機能を完全に制御できます。そのため、Jupyterは、コードの現時点の状態に基づいて、自動補完、パラメーターリスト、状況に応じたドキュメントを提供できます。

たとえば、Pandasを使用すると、DataFramesのすべての列名をタブを押して補完する事ができます。Jupyter Notebookのこの機能により、探索的プログラミングの生産性が大幅に向上することがわかりました。

nbdevでPythonの動的機能を適切に動作するように変更する必要は特にありません。それは、Jupyterの優れた機能の一部に過ぎず、そのプラットフォーム上に構築することで無料で恩恵にあずかる事ができます。

現在のnbdevプロジェクトの状況
nbdevの開発と併せて、fastai v2を完全にゼロからnbdevで記述しています。

fastai v2は、深層学習モデルを構築するための豊富で構造化されたAPIを提供します。2020年の前半にリリースされる予定です。機能は既に完全であり、早期導入者はプレリリースバージョンで既にクールなプロジェクトを構築しています。また、fastai v2で他のプロジェクトを作成しました。そのうちのいくつかは今後数週間でリリースされます。

nbdevを使用すると、従来のプログラミングツールを使用した時より生産性が2倍から3倍向上することがわかりました。

私にとってこれは大きな驚きです。私は30年以上にわたってほぼ毎日コーディングしており、その間にプログラムを構築するための多数のツール、ライブラリ、およびシステムを試してきました。それゆえ、生産性にこれほど大きな改善の余地があるとは思っていませんでした。

私は、開発者の生産性を大きく向上する他のアイデアがまだまだあるのではないかと感じており、また、人々がnbdevでどのようなものを開発するのかを見るが楽しみであり、これからの未来に興奮しています。

あなたがnbdevを試してみることにしたなら、私達にあなたがどうやってそれを使っているかを教えてください! そしてもちろん、どんな質問でもお気軽に。これらの議論に最適な場所は、nbdev用に作成したこのフォーラムスレッド(Nbdev discussion)です。もちろん、nbdev GitHubリポジトリへのプルリクエストも歓迎します。

私達のプロジェクトに興味を持ってくれてありがとう!

謝辞:この記事の草案に対して有益なフィードバックをくださったAlexis GallagherとViacheslav Kovalevskyiに感謝します。show_docのプロトタイプの作成を支援してくれたAndrew Shawと、gitフック機能の多くを提供してくれたStas Bekmanに感謝します。GitHubアクションの使用に役立つアイデアを提供してくれたHamel Husainに感謝します。

3.nbdev:探索的プログラミングをPythonで実現する開発環境(4/4)関連リンク

1)www.fast.ai
nbdev: use Jupyter Notebooks for everything

2)nbdev.fast.ai
Welcome to nbdev

3)github.com
fastai/nbdev

4)www.reviewnb.com
Code Reviews for Jupyter Notebooks

5)jekyllrb.com
Transform your plain text into static websites and blogs

6)forums.fast.ai
Nbdev discussion