はじめに
FastAPIをDockerで開発する際、コードの変更をリアルタイムに反映させたい場面が多々あります。
そんなときに便利なのが「ホットリロード」です。
本記事では、FastAPIでホットリロードを有効にする方法について、実例を交えて解説します。
書こうと思ったきっかけ
FastAPI + Docker構成で開発を始めたとき、「コードを変更しても反映されない」という悩みに直面しました。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
調べてみると、--reload
オプションや volumes:
の設定が必要だと分かり、「これって意外とつまずく人多いのでは?」と思い、この記事を書くことにしました。
ホットリロードはどこ?
FastAPIのホットリロード(コードの変更がリアルタイムに反映される仕組み)は、uvicorn
の --reload
オプションで実現されています。
✅ ホットリロードが有効な場所:
-
docker-compose.yml
のcommand:
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
- または
Dockerfile
のCMD:
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
✅ ホットリロードを有効にするポイント:
-
--reload
を指定すること(すでに指定済み) -
volumes:
でローカルコードをマウント
volumes:
- ./app:/app
これで、app
フォルダの変更が即時コンテナに反映され、ホットリロードが機能します。
🔁 実際に試すには:
@app.get("/")
def read_root():
return {"message": "🔥 Hello from FastAPI with hot reload!"}
保存するだけで、ターミナルに Reloading...
と表示され、変更が反映されます。
💡補足:
-
--reload
は開発専用です。本番では削除しましょう。 - 開発中は若干パフォーマンスに影響しますが、非常に便利です。
-
uvicorn[standard]
をインストールしていれば、内部でwatchgod
によりホットリロードが有効になります。
まとめ
FastAPIのホットリロードは、ちょっとした設定で大きく開発効率を向上させてくれます。--reload
の指定と volumes:
のマウント、この2点を押さえるだけでOK。
もし反映されないときは、command
の書き方やマウント設定を見直してみてください!
Docker + FastAPIの組み合わせで快適な開発ライフを送りましょう!