🔨

VSCode Dev ContainersでJupyter実行環境を作ろう

2024/06/19に公開

はじめに

機械学習の勉強を始めようと思って、色々調べてみると、Jupyter を使って分析等を行うといいということがわかりました。
しかし、「ローカル環境に Python + Jupyter 環境を構築するのもなぁ...」ということで、Visual Studio Code Dev Containers を使って Jupyter 実行環境を作ってみました。

本記事では Poetry を使って Python のパッケージ管理を行いますが、お好きなパッケージ管理ツールを使っても構いません。
また、Jupyter の実行は VS Code の Jupyter 拡張機能を使い、VS Code エディタ上で操作します。
VS Code での Jupyter 操作については、こちらを参考にしてください。

なぜ VS Code の Jupyter 拡張機能を使うのか気になる方はどうぞ...

VS Code 上で Jupyter を操作することで

  • ファイル保存時にフォーマッティングさせる
  • GitHub Copilot のアシスタントを効かせる

が今回の構築を作るに至った目的です。
ブラウザ版 Jupyter Notebook を使ったことがないので、これらがブラウザ版で使用できる場合はコメントいただければ嬉しいです。

環境

  • Visual Studio Code
  • Docker

手順

1. Dockerfile の作成

今回は以下の Dockerfile を使用します。
今回の Jupyter 環境はセキュリティ等の考慮は行っていませんので、あしからず...。

FROM python:3.12-slim

RUN apt-get update &&\
    apt-get -y install locales curl &&\
    localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm

RUN pip install --upgrade pip
RUN curl -sSL https://install.python-poetry.org | python -

ENV PATH /root/.local/bin:$PATH

2. devcontainer.json の作成

次に、VS Code で使用する devcontainer.json を作成します。
作業ディレクトリ下に .devcontainer ディレクトリを作成し、その中に devcontainer.json を作成します。
devcontainer.jsonの例を以下に記載しますので、参考にしてください。

{
  "name": "vscode-devcontainer-jupyter-example",
  "build": {
    "context": "..",
    "dockerfile": "../Dockerfile"
  },
  "features": {
    "ghcr.io/devcontainers/features/python:1": {}
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "charliermarsh.ruff",
        "ms-toolsai.jupyter"
      ]
    }
  }
}

今回、コンテナ内にインストールする拡張機能は

です。

RuffRust で書かれた Python のリンター・コードフォーマッタです。
今回は Ruff を使用して、保存時にフォーマッティングを行ってもらうため、拡張機能も追加しています。

上記の拡張機能をコンテナ内にインストールするためにcustomizationsvscodeextensions に記載します。
これらに加えて、Pylanceを入れるとよいかもしれません。

3. コンテナの起動

VS Code で作業ディレクトリを開き、左下の >< マークをクリックし、コンテナーで再度開く を選択します。
すると、ビルドが始まり、ビルドに成功するとコンテナが起動し、VS Code がコンテナ内で開かれます。

4. プロジェクトの作成

今回は Poetry を使用しているので、以下のコマンドでプロジェクトを作成します。

poetry new my_project

my_projectの部分は好きなプロジェクト名に変更してください。

5. パッケージのインストール

pyproject.tomlがあるプロジェクトディレクトリに移動し、以下のコマンドでパッケージをインストールします。

poetry add ipykernel ruff

ipykernelIPython カーネルの一部で、Jupyter と Python の間の通信を可能にするコンポーネントです。
VS Code の Jupyter 拡張機能を使うためには ipykernel が必要なため、インストールします。
ruff も合わせてインストールしておきます。

ruff のインストールが成功したら、jupyter notebook ファイルをフォーマットできるようにpyproject.tomlに以下を追記してください。

[tool.ruff]
extend-include = ["*.ipynb"]

6. .vscode/settings.json の作成

次に、.vscode/settings.json を作成します。
以下を参照ください。

{
  "python.analysis.extraPaths": [
    "/root/.cache/pypoetry/virtualenvs/foo-py3.12/lib/python3.12/site-packages"
  ],
  "[python]": {
    "editor.defaultFormatter": "charliermarsh.ruff",
    "editor.formatOnType": true,
    "editor.codeActionsOnSave": {
      "source.organizeImports": "explicit"
    }
  },
  "notebook.formatOnSave.enabled": true,
  "notebook.codeActionsOnSave": {
    "source.fixAll.ruff": true,
    "source.organizeImports.ruff": true
  },
  "editor.formatOnSave": true
}

python.analysis.extraPathsには、Poetry で作成した仮想環境のパスを記載します。
詳しい設定については私の記事で恐縮ですが、こちらを参照してください。

ファイル保存時にフォーマットを行うように設定を行っておきます。
[python]内のeditor.defaultFormatterRuff に指定しておきます。
notebook.formatOnSave.enabledtrueにし、 Jupyter で保存時にフォーマットを行うように設定します。
notebook.codeActionsOnSaveにて、保存時に lint 違反を自動的に修正し、インポートを整理するように設定しておきます。

ここまでできたら、VS Code を再読み込みしてください。
Windows の場合、command + shift + p でコマンドパレットを開き、Reload Windowを選択することで再読み込みができます。

7. Jupyter ファイルの作成&実行

それでは Jupyter ファイルを作成してみましょう。
コマンドパレットを開き、Create: New Jupyter Notebookを選択し、新しい Jupyter ファイルを作成します。

適当にhello worldでも出力してみましょう。
以下のコードを入力して、alt + enterでセルを実行してみてください。

print("hello world")

その際にカーネルを選択する画面が出るかと思います。
仮想環境をインタープリタとして選択してください。

この際に、仮想環境ではないインタープリタを選択すると、実行時に ipykernel がないと怒られので、注意してください。

それではあらためてセルを実行してみてください。
以下が出れば成功です!

以上で環境構築は修了です。

おわりに

VS Code Dev Containers を使って、Jupyter 実行環墋を構築してみました。
まだまだ Jupyter の使い方等はわかっていないので、勉強していきたいと思います。
この記事が少しでもお役に立てば幸いです。

参考記事

Discussion