VS CodeからJupyter Notebookを使ってみよう:Visual Studio Codeで始めるPythonプログラミング(2/3 ページ)
Python人気を支えるツールの1つ「Jupyter Notebook」。VS Codeからこれを使ってみよう。Jupyter拡張機能が提供する機能も一覧する。
サンプルコードを実行してみよう
準備が整ったら、Jupyter拡張機能の説明ページにあるサンプルコードを実行してみよう。ここではjupytertestディレクトリを作り、その下にtest.pyファイルを作成して、そこにこのコードを記述している。
#%%
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
x = np.linspace(0, 20, 100)
plt.plot(x, np.sin(x))
plt.show()
先頭行の「#%%」は、Jupyter Notebookにおける「セル」の区切りを示すもので、これで区切られた領域が1つの実行単位となる。そのため、この行の上には[Run cell]というリンクが表示されている。
また、以下のように「#%%」で区切ってprint関数呼び出しを記述すると、これは2つのセルを含んだコードとなる。
では、1つ目の[Run cell]リンクをクリックしてみよう。すると、次のようにJupyter Notebookを新規に起動するか、既に起動されているJupyter Notebookを指定するかの選択画面が表示される。
ここでは[Start a new notebook]を選択する。すると、必要なパッケージがインストールされていれば、先頭のセルの内容が実行されて、次のように別のエディタに実行結果が表示される。されない場合には、condaコマンドあるいはpipコマンドで足りないものをインストールしよう。
このときに「Failed to Detect Jupyter Notebook」のようなメッセージが表示されたら、コマンドパレットから[Jupyter: Select an existing (local) Jupyter Notebook]コマンドを選択して、起動しているJupyter Notebookの中のいずれかを選択してから実行するとうまく実行できるかもしれない(Jupyter Notebookのインスタンスの選択については後述)。
ここで覚えておいてほしいのが、ステータスバーに表示されている[Python 3 Kernel (idle)]という表示だ。Kernel(カーネル)とは、ある言語のコードを実行するためのエンジンであり、上の画像ではVS Codeから起動されたJupyter Notebookのインスタンス上でPython 3のカーネルが実行されている(が、アイドル状態にある)ことが分かる。
2つ目の[Run cell]リンクをクリックすれば、その結果がグラフの下に表示される。
Pythonコードを表示しているエディタを右クリックすると、さらに細かく実行を制御できる。
上に示したコンテキストメニューには、Jupyter拡張機能が提供するメニュー項目として以下のものが表示されている。
- [Run Cell]:右クリックした位置にあるセルの内容を実行する
- [Run Cell and Advance]:右クリックした位置にあるセルの内容を実行して、次のセルにカーソルを移動する
- [Run Selection/Line]:選択範囲あるいは現在行だけを実行する
- [Go to Next Cell]:次のセルに移動する
- [Go to Previous Cell]:前のセルに移動する
連続するセルの内容を続けて実行したいときには、[Run Cell and Advance]が便利に使えるはずだ。また、セル内で特定の範囲だけをテストしたいというときには、[Run Selection/Line]が有用だ。[Go to Next Cell]と[Go to Previous Cell]はセル単位でカーソルを前後に移動する。
例えば、以下のようにhello関数を定義して、それを呼び出すセルを書いたとする。そして、このセル全体を実行しないまま、hello関数呼び出しを実行してみる(これは使い方としては間違っている例だ)。
すると、次のようにエラーが発生する。
例として間違った使い方を見てみたが、実際には関数定義とその呼び出しを別のセルに分けておき、関数定義を修正してからそのセルを実行、さらに関数呼び出しのセルを続けて実行のような使い方をすることで、細かなコードの修正とそのテストをインタラクティブな環境で簡単に行える。
Copyright© Digital Advantage Corp. All Rights Reserved.