Featured image of post Visual Studio CodeとDockerを使ってPython開発環境をちゃちゃっと構築する

Visual Studio CodeとDockerを使ってPython開発環境をちゃちゃっと構築する

これはなに Link to this heading

Visual Studio CodeDocker を使った、Python 開発環境の構築方法を述べる。

本稿で説明する方法により構築した環境はGitHub にあげているため、参照してほしい。

前提条件 Link to this heading

筆者の環境 Link to this heading

  • Visual Studio Code
  • Docker Desktop for Windows
  • Windows 11

環境構築方法 Link to this heading

構築の流れは下記のとおりである。

  1. 必要となるVS Codeの拡張機能をインストールする
  2. requirements.txtをつくる
  3. Dockerfileとdevcontainer.jsonをつくる
  4. VS Codeの機能でDockerfileをbuild&run&attachする
  5. 開発を開始する

必要となるVS Codeの拡張機能をインストールする Link to this heading

今回はDockerコンテナ内にPython環境を構築し、VS Codeで開発する。 そのため、VS Codeを簡単にDockerコンテナにアタッチできるように、下記の拡張機能を入れる。

requirements.txtをつくる Link to this heading

すでにインストールしたいPythonパッケージが決まっている場合、requirements.txtファイルを作成して、そこにパッケージ名を書き込む。 requirements.txtファイルを作成することで、pip install -r requirements.txtコマンドにより、一括でPythonパッケージをインストールできる。 たとえば、``numpymatplotlibをインストールしたいなら、requirements.txt`は次のようになる。

requirements.txt
numpy
matplotlib

Dockerfileとdevcontainer.jsonをつくる Link to this heading

.devcontainerディレクトリを作り、そこにDockerfileをつくる。拡張子は要らない。

Dockerfileには下記の内容をコピペする。

Dockerfile
# ベースとなるDockerイメージ
# Pythonのバージョンを変更したい場合は
# https://hub.docker.com/_/python から該当するものを指定する
FROM python:3.11-slim

# Dockerコンテナ内のユーザー名。好きな名前に変えて良い。
ARG USERNAME=user

# この行以降はrootユーザーで実行される
USER root

# 必要なパッケージをインストールする
# locales : 言語の設定に必要
# tzdata : タイムゾーンの設定に必要
# git, ca-certificates, openssh-client : Dockerコンテナ内でgitを使うために必要
RUN apt-get update -y \
    && DEBIAN_FRONTEND=noninteractive \
    apt-get install -y --no-install-recommends \
    locales \
    tzdata \
    git \
    ca-certificates \
    openssh-client \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 言語とタイムゾーンを日本に設定
RUN locale-gen ja_JP.UTF-8 \
    && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV TZ=Asia/Tokyo \
    LANG=ja_JP.UTF-8 \
    LANGUAGE=ja_JP:jp \
    LC_ALL=ja_JP.UTF-8

# pip関連update
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

# この行以降は`WORKDIR`のディレクトリで実行される
WORKDIR /workspaces

# requirements.txtに書かれたパッケージをインストール
COPY ./requirements.txt requirements.txt
RUN pip install -r requirements.txt

# ユーザー作成
# ユーザーを作成して設定しないとrootで作業してしまうため
RUN groupadd -r $USERNAME && useradd -r -g $USERNAME $USERNAME
RUN mkdir /home/$USERNAME

# この行以降は`$USERNAME`ユーザーで実行される
USER $USERNAME

# Dockerfileをビルドする際に必ずbashを起動する
ENTRYPOINT [ "/bin/bash" ]

途中でGitをインストールしているが、これは必要なければ削除してよい。

次に、同じ.devcontainerディレクトリにdevcontainer.jsonを作成し、下記をコピペする。

devcontainer.json
{
    "name": "python-base-env-with-docker",
    "build": {
        "dockerfile": "./Dockerfile",
        "context": ".."
    },
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-python.python",
                "ms-python.black-formatter",
                "ms-python.flake8",
                "ms-python.isort",
                "ms-python.mypy-type-checker"
            ]
        }
    }
}
  • "name"は任意の名前でよい。
  • "extensions"には、使いたいVS Codeの拡張機能を入れる。
    • "ms-python.python" : Pythonの実行に必須
    • "ms-python.black-formatter": Pythonのフォーマッター
    • "ms-python.flake8": Pythonのリンター
    • "ms-python.isort": Pythonのimport順を整理するツール
    • "ms-python.mypy-type-checker": Pythonの静的解析ツール

devcontainer.jsonに記入した拡張機能はDockerコンテナを立てる際に必ずインストールされる。

必要ではない拡張機能を推奨したい場合は、.vscode/extensions.jsonを作成するとよい。 extensions.jsonの例を下記に示す。

.vscode/extensions.json
{
    "recommendations": [
        "streetsidesoftware.code-spell-checker",
        "oderwat.indent-rainbow"
    ]
}

.vscode/extensions.jsonがあると、そのディレクトリをVS Codeで開いた際に、推奨される拡張機能をインストールするか聞かれる。 また、拡張機能のタブに@recommendedと入力すると、推奨される拡張機能を一覧でき、まとめてインストールできる。

VS Codeの設定ファイルを作成する Link to this heading

VS Codeの拡張機能を有効にするため、VS Codeの設定ファイルを作成する。

.vscodeディレクトリを作成し、その中にsettings.jsonを作成する。 settings.jsonには下記をコピペする。

settings.json
{
    // 改行コードをLFにする
    "files.eol": "\n",
    // Pythonファイルの設定
    "[python]": {
        "editor.tabSize": 4,
        // フォーマッターをblackに設定する
        "editor.defaultFormatter": "ms-python.black-formatter",
        // 保存するたびにフォーマッターを動かす
        "editor.formatOnSave": true,
    },
// flake8とblackで競合する設定を合わせる
    // 参照 : https://black.readthedocs.io/en/stable/guides/using_black_with_other_tools.html#flake8
    "flake8.args": [
        "--ignore=E203,W503",
        "--max-line-length=80"
    ],
    "black-formatter.args": [
        "--line-length=80"
    ],
    // isortにblackを利用していることを伝える
    "isort.args": [
        "--profile",
        "black"
    ],
}

VS Codeの機能でDockerfileをbuild&run&attachする Link to this heading

ここまでできたら、先ほど入れたVS Codeの拡張機能Dev Containers を利用して、Dockerコンテナをビルドし起動する。

VS CodeでCtrl + Shift + Pを押すと、コマンドパレットが出てくる。 そのコマンドパレットで「Dev Containers: Reopen in Container」を検索し実行する。 すると、VS CodeでDockerfileをビルドし、コンテナを立て、そのコンテナにVS Codeをアタッチしてくれる。

VS Codeで実行するコマンド

開発を開始する Link to this heading

ここまでできたら、あとはPythonコードを書いて実行するだけである。 試しに実行してみる。

main.pyファイルを作成し、下記コードをコピペする。

main.py
def add_to_list(i: int, i_list: list = []) -> list:
    i_list.append(i)
    return i_list


print(add_to_list(1))
print(add_to_list(2))
print(add_to_list(3))


def add_to_list_2(i: int, i_list: list | None = None) -> list:
    if i_list is None:
        i_list = []
    i_list.append(i)
    return i_list


print(add_to_list_2(1))
print(add_to_list_2(2))
print(add_to_list_2(3))

コピペしたら、main.pyファイルを開いた状態で右上にある右向き三角ボタンをクリックする。 すると、main.pyが実行される。

Pythonコード実行ボタン

得られる出力
root@51db8ff21947:/workspaces/python-test# /usr/local/bin/python /workspaces/python-debug-test/src/main.py
[1]
[1, 2]
[1, 2, 3]
[1]
[2]
[3]
root@51db8ff21947:/workspaces/python-test#

以上の動作確認ができれば、環境構築は完了である。

おわりに Link to this heading

この環境構築手法は一部VS Codeに特化しているため、万人向けとは言えない。 しかし、Python環境をDockerで構築すると、環境構築や環境共有が簡単になる。

この内容が誰かの参考になれば幸いである。

参考文献・URL Link to this heading

Licensed under CC BY-NC-SA 4.0
最終更新 3月 02, 2024
Hugo で構築されています。
テーマ StackJimmy によって設計されています。