2026年04月26日
OTTAN.JP
iPhone · Mac · Windows Tips
Mac

【2026年版】Django / Flask / FastAPI を VS Code(Cursor) + Dev Containers で始める

By ottanjp 3 min read 更新 2026.04.22

🔁 2026年リライト版 この記事は2020年4月に公開した「DjangoやFlask(Python)アプリの開発を始めるならVS Code + Dockerが最適」を、Dev ContainersuvFastAPICursor 前提で全面書き換えしたものです。

2020年からの主な変化点

  • Dev Containers(旧 Remote - Containers) が VS Code / Cursor の標準ワークフローに昇格
  • uvpip + venv + pip-tools を一本化。2024年以降デファクト
  • FastAPI が Django / Flask と並ぶ第三の選択肢に成長(ASGI、型ヒント、自動 OpenAPI)
  • Cursor / Windsurf などAI統合IDE が台頭。VS Code の Dev Container 仕様と互換
  • Python 3.12 / 3.13: typing 改善、asyncio / pattern matching / GIL 弱化オプション

環境

  • macOS Sequoia 15 / Tahoe 26
  • Docker Desktop or OrbStack
  • VS Code 1.95+ または Cursor 0.40+
  • 拡張機能: Dev Containersms-vscode-remote.remote-containers

プロジェクト構成

my-api/
├── .devcontainer/
│   └── devcontainer.json
├── app/
│   └── main.py
├── pyproject.toml
└── uv.lock

1. pyproject.toml を作成

FastAPI の例:

[project]
name = "my-api"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
  "fastapi>=0.115",
  "uvicorn[standard]>=0.32",
  "sqlalchemy>=2.0",
]

[dependency-groups]
dev = [
  "pytest>=8.0",
  "ruff>=0.6",
  "mypy>=1.11",
]

Django なら:

dependencies = [
  "django>=5.1",
  "djangorestframework>=3.15",
  "psycopg[binary]>=3.2",
]

2. devcontainer.json を作成

.devcontainer/devcontainer.json:

{
  "name": "Python API",
  "image": "mcr.microsoft.com/devcontainers/python:3.12",
  "features": {
    "ghcr.io/astral-sh/uv/uv:latest": {},
    "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}
  },
  "postCreateCommand": "uv sync",
  "forwardPorts": [8000],
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "charliermarsh.ruff",
        "ms-python.mypy-type-checker"
      ],
      "settings": {
        "python.defaultInterpreterPath": "/usr/local/bin/python",
        "[python]": {
          "editor.defaultFormatter": "charliermarsh.ruff",
          "editor.formatOnSave": true
        }
      }
    }
  }
}

3. VS Code / Cursor でコンテナ起動

  1. プロジェクトフォルダを VS Code / Cursor で開く
  2. 右下の通知「Reopen in Container」をクリック(または F1 → Dev Containers: Reopen in Container
  3. 初回は Docker イメージのビルドと uv sync が走るので数分待つ
  4. 完了すると、コンテナ内にアタッチされた状態で Python が使えます

4. FastAPI を起動

app/main.py:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def root() -> dict[str, str]:
    return {"hello": "world"}

コンテナ内ターミナルで:

❯ uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

forwardPorts で 8000 番がホストに転送されているので、ブラウザから http://localhost:8000 にアクセス可能。自動再読込もエディタ保存と連動します。

Cursor 固有の強み

2024年以降 Cursordevcontainer.json を VS Code と同じ仕様で扱えるため、Dev Containers の設定はそのまま使えます。加えて、

  • Cmd+K でコード生成・編集を AI に依頼
  • Cmd+L でチャット、@Codebase で全リポジトリをコンテキストに
  • .cursor/rules/*.mdc でプロジェクト規約を AI に学習させられる

Python プロジェクトだと型ヒント・テスト生成・docstring 補完あたりで劇的に速くなります。

Django で DB も Docker Compose で立てる場合

.devcontainer/devcontainer.jsondockerComposeFile を指定:

{
  "name": "Django + Postgres",
  "dockerComposeFile": "../docker-compose.yml",
  "service": "web",
  "workspaceFolder": "/workspace",
  "postCreateCommand": "uv sync && uv run python manage.py migrate"
}

docker-compose.yml:

services:
  web:
    build: .
    volumes: ["..:/workspace:cached"]
    command: sleep infinity
  db:
    image: postgres:17
    environment:
      POSTGRES_PASSWORD: postgres
    volumes: ["pgdata:/var/lib/postgresql/data"]
volumes:
  pgdata:

2020年から変わらない良さ

Dev Containers の根本的なメリットは2020年当時と同じです。

  • 環境差分ゼロ: 開発者・CI・本番が同じ OS ユーザランドで動く
  • 使い捨て: コンテナを壊しても Rebuild Container で再構築
  • ホスト汚さない: Python、Postgres、Redis すべてコンテナ側にある

uv・Dev Containers・Cursor の組み合わせで、2026年の Python Web 開発体験は2020年から段違いに快適になりました。

参考

Comments
comments powered by Disqus