この記事では、Dockerを使用してFastAPIアプリケーションをVSCodeからデバッグする手順を紹介します。以下の手順に従って、効果的なデバッグ環境をセットアップしましょう。
デバッグ準備
ソースコードのディレクトリ構造
アプリケーションのディレクトリ構造は次のようになっていることを前提とします。
Docker-debug
┣ .vscode
┃ ┗ launch.json
┣ backend
┃ ┣ main.py
┃ ┗ requirements.txt
┣ docker-compose.yml
┗ Dockerfile
main.pyには最低限の処理を記述します
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
message = "Hello World"
return {"message": message}
requirements.txt
内には、必要なパッケージ名とバージョンを指定します。FastAPIとuvicornの特定バージョンが記述されていることを確認してください。
fastapi==0.63.0
uvicorn[standard]==0.13.3
launch.jsonの作成
まず、プロジェクトのルートディレクトリに.vscode
ディレクトリを作成し、その中にlaunch.json
ファイルを作成します。
このファイルは、VSCodeのデバッグ構成を設定するためのものです。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}/backend",
"remoteRoot": "/app"
}
]
}
]
}
この設定では、リモートデバッグを行うための構成が定義されています。
ローカルのファイルとDocker内のファイルとの対応関係をpathMappings
で指定しています。
Dockerfileの作成
次に、FastAPIアプリケーションをDocker内で実行するためのDockerfile
を作成します。
FROM python:3.8
COPY ./backend /app/
WORKDIR /app/
RUN pip install -r requirements.txt
CMD uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
このDockerfile
では、Python 3.8ベースのイメージを使用し、アプリケーションファイルと必要なファイルをコンテナ内にコピーし、pip install
で必要な依存関係をインストールしています。
docker-compose.debug.ymlの作成
次に、docker-compose.debug.yml
ファイルを作成します。
このファイルは、デバッグ用のDockerコンテナを設定するためのものです。(ファイル名はdocker-compose.yml
でも構いません。デバッグ用とわかりやすいようにしています)
services:
app:
build: .
command:
[
"sh",
"-c",
"pip install debugpy && python -m debugpy --wait-for-client --listen 0.0.0.0:5678 -m uvicorn main:app --reload --host 0.0.0.0 --port 8000",
]
volumes:
- ./backend/:/app
ports:
- 8000:8000
- 5678:5678
この設定では、debugpy
を使用してデバッグクライアントとの接続を待ち、FastAPIアプリケーションをリロードモードで実行します。
デバッグ用のため、debugpy
はrequirements.txtには記載せず、直接コマンドをたたくようにしています。
デバッグの開始
docker compose up
ターミナルで以下のコマンドを実行して、デバッグ用のDockerコンテナを起動します。
docker-compose -f docker-compose.debug.yml up
Run and Debug
コンテナを立ち上げたら、VSCodeでデバッグを開始します。
VSCodeでプロジェクトを開き、デバッグビューを表示します。”Run and Debug”オプションを選択し、設定したデバッグ構成(Python: Remote Attach)を選択します。

※F5でデバッグ開始することもできます。
ブレークポイントをセットして、http://localhost:8000にアクセスすると、、、

うまくデバッグできていることが確認できました。