1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ハッカソン個人備忘録⑤:FastAPI + MySQL ローカル開発環境構築(Docker Compose対応)

Posted at

はじめに

この記事では、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

動作確認


ホットリロード

  • uvicorn--reload で自動リロード
  • volumes: ./app:/app でコード変更が即反映

よくある次のステップ

  • SQLAlchemy や Alembic を用いたORM開発
  • GUIツール (DBeaver, MySQL Workbench) でのDBアクセス
  • テーブル作成や初期データ投入

まとめ

今回紹介した構成を使えば、FastAPI と MySQL を組み合わせた開発環境を手軽に構築できます。Docker Compose と .env を使うことで管理もしやすく、ホットリロードや接続確認なども簡単に行えます。
今後はこのベースに、SQLAlchemy やマイグレーションツールなども加えながら、より本格的な開発環境へ発展させていけたらと考えています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?