はじめに
この記事では、FastAPI と MySQL を組み合わせ、Docker Compose を使って簡単にローカル開発環境を構築する方法を紹介します。
コピペでそのまま使えるセットアップになっており、FastAPIをこれから学びたい方や、最小構成で動く環境をすぐに用意したい方にもおすすめです。
ホットリロードやSwagger UIを活用して、効率よく開発を進めることができます。
書こうと思ったきっかけ
FastAPIの学習を進める中で、まず「動く環境」を整えるまでに意外と時間がかかりました。
特にMySQLとの接続やDockerの設定でつまずくことが多く、都度ネットで調べては試す…という繰り返しでした。
同じようなところで悩む人の助けになればと思い、自分の中で整理がついたこのタイミングで記事にまとめることにしました。
ディレクトリ構成
project/
├── app/
│ ├── main.py
│ ├── requirements.txt
├── Dockerfile
├── docker-compose.yml
└── .env
app/main.py
from fastapi import FastAPI
import mysql.connector
import os
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI + MySQL in Docker!"}
@app.get("/db-status")
def db_status():
try:
connection = mysql.connector.connect(
host="db",
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
database=os.getenv("MYSQL_DATABASE")
)
if connection.is_connected():
return {"db_status": "connected"}
except Exception as e:
return {"db_status": "error", "details": str(e)}
app/requirements.txt
fastapi
uvicorn[standard]
mysql-connector-python
Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY app/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app/ .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
docker-compose.yml
version: '3.9'
services:
web:
build: .
container_name: fastapi-app
ports:
- "8000:8000"
volumes:
- ./app:/app
env_file:
- .env
depends_on:
- db
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
db:
image: mysql:8.0
container_name: mysql-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
.env
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=fastapi_db
MYSQL_USER=fastapi_user
MYSQL_PASSWORD=fastapi_pass
起動コマンド
docker compose up --build
動作確認
- アプリ確認: http://localhost:8000/
- DB接続確認: http://localhost:8000/db-status
- Swagger UI: http://localhost:8000/docs
ホットリロード
-
uvicorn
の--reload
で自動リロード -
volumes: ./app:/app
でコード変更が即反映
よくある次のステップ
- SQLAlchemy や Alembic を用いたORM開発
- GUIツール (DBeaver, MySQL Workbench) でのDBアクセス
- テーブル作成や初期データ投入
まとめ
今回紹介した構成を使えば、FastAPI と MySQL を組み合わせた開発環境を手軽に構築できます。Docker Compose と .env
を使うことで管理もしやすく、ホットリロードや接続確認なども簡単に行えます。
今後はこのベースに、SQLAlchemy やマイグレーションツールなども加えながら、より本格的な開発環境へ発展させていけたらと考えています。