【Python】Devcontainerを使用して開発する

PythonでDevcontainerを使用してコンテナ内で開発する環境を構築してみます。

事前準備

Devcontainerを使用するには、以下のソフトウェアがインストールされている必要があります。

フォルダの構成

開発プロジェクトフォルダに.devcontainerフォルダを作成し、その中に以下のファイルを配置します。

project-folder/
├── .devcontainer/
│   ├── Dockerfile
│   ├── compose.yml
│   └── devcontainer.json
├── src/
│   └── main.py
└── requirements.txt

Dockerfileの作成

.devcontainer/Dockerfileに以下の内容を記述します。

# ベースイメージの指定
FROM python:3.13-slim

WORKDIR /workspace

# 必要なシステムパッケージのインストール
# イメージサイズを小さくするため、パッケージインストール後にキャッシュを削除
RUN apt-get update && \
  apt-get install -y --no-install-recommends \
  git \
  curl \
  wget \
  ca-certificates \
  build-essential && \
  rm -rf /var/lib/apt/lists/*

# requirements.txtに必要なパッケージを記載する
# インストールするバージョンを固定したい場合はrequirements.txtにバージョンも記載する
COPY requirements.txt /workspace/
RUN pip install --upgrade pip && \
  pip install --no-cache-dir -r /workspace/requirements.txt

COPY . /workspace/

compose.ymlの作成

.devcontainer/compose.ymlに以下の内容を記述します。

services:
  app:
    build:
      context: .. # compose.ymlが存在する.devcontainerの一つ上の階層を指定
      dockerfile: .devcontainer/Dockerfile # contextがdevcontainerの一つ上のプロジェクトフォルダなので、Dockerfileのパスは.devcontainer/Dockerfileとなる
    volumes:
      - ../:/workspace # プロジェクトフォルダをコンテナの/workspaceにマウント
    tty: true

devcontainer.jsonの作成

.devcontainer/devcontainer.jsonに以下の内容を記述します。 extensionsに記載する拡張機能名の取得はこちらを参照してください。

{
  // 設定を一意に識別する名称としてプロジェクトフォルダ名を使用
  "name": "${localWorkspaceFolderBasename}",

  // コンテナを作成するためのcompose.ymlのファイル名を指定
  "dockerComposeFile": ["compose.yml"],

  // compose.ymlで定義したサービス名を指定
  "service": "app",

  // 現在ローカルで開いているワークスペースをコンテナ内のどのフォルダーにマウントするか指定
  "workspaceFolder": "/workspace",

  // フォルダーのマウント方法を指定
  "mounts": ["source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached"],

  // コンテナ内にインストールするVsCodeの拡張機能
  // すべてのコンテナで共通で使用したい拡張機能はsettings.jsonの"dev.containers.defaultExtensions"に記載する
  "extensions": [
    "ms-python.python", // Python拡張機能
    "ms-python.vscode-pylance", // Pylance
    "njpwerner.autodocstring", // Autodocstring
    "charliermarsh.ruff" // Ruff
  ]
}

Devcontainerの起動

VsCode左下の緑色のリモートアイコンをクリックし、‘Reopen in Container’(コンテナーで再度開く)を選択すると Devcontainerが起動します。
Devcontainer起動後、コンテナ内で開発を行うことができます。

参考URL

Hugo で構築されています。
テーマ StackJimmy によって設計されています。