🔁 2026年リライト版 この記事は2020年4月に公開した「DjangoやFlask(Python)アプリの開発を始めるならVS Code + Dockerが最適」を、Dev Containers、uv、FastAPI、Cursor 前提で全面書き換えしたものです。
2020年からの主な変化点
- Dev Containers(旧 Remote - Containers) が VS Code / Cursor の標準ワークフローに昇格
uvがpip + 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 Containers(
ms-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 でコンテナ起動
- プロジェクトフォルダを VS Code / Cursor で開く
- 右下の通知「Reopen in Container」をクリック(または
F1 → Dev Containers: Reopen in Container) - 初回は Docker イメージのビルドと
uv syncが走るので数分待つ - 完了すると、コンテナ内にアタッチされた状態で 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年以降 Cursor は devcontainer.json を VS Code と同じ仕様で扱えるため、Dev Containers の設定はそのまま使えます。加えて、
Cmd+Kでコード生成・編集を AI に依頼Cmd+Lでチャット、@Codebaseで全リポジトリをコンテキストに.cursor/rules/*.mdcでプロジェクト規約を AI に学習させられる
Python プロジェクトだと型ヒント・テスト生成・docstring 補完あたりで劇的に速くなります。
Django で DB も Docker Compose で立てる場合
.devcontainer/devcontainer.json で dockerComposeFile を指定:
{
"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年から段違いに快適になりました。