「本ページはプロモーションが含まれています」
こんにちは。ここまではモンスター育成ゲームAPIの概要を決め、シーケンス図やER図、そしてDB設計をざっくりやってきました。
今回はいよいよFastAPIの環境を整え、実際にプロジェクトとして動かすためのフォルダ構成を決めたいと思います。 実装に入っていく段階ってワクワクする反面、「これでいいのかな?」と不安になる部分もあるので、試行錯誤しながら進めます.。
1. 今回のゴール
- Python環境 (venv) の準備
- FastAPIのインストール と 起動確認
- フォルダ構成 の例示
- 簡単なHello World API の作成
- AlembicやDBとの連携は次回以降…
まずは最小限の「FastAPIアプリが起動してブラウザで確認できる」状態を目指します。
2. Python環境の準備
上の記事でPythonはDLしてあり、新しくvenvを作りました。
3. FastAPIのインストール & 起動確認
3.1 インストール
pip install fastapi uvicorn
- fastapi:本体
- uvicorn:ASGIサーバー(これがないとローカルサーバー起動できない)
3.2 簡単なサンプル
app/main.py
といったファイルを作り、下記のように記述します。
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Hello, FastAPI!"}
3.3 サーバー起動
uvicorn app.main:app --reload
- --reload を付けると、コードを変更するたびに自動リロードされます。
- ブラウザで http://127.0.0.1:8000/ にアクセスすると、{"message":"Hello, FastAPI!"} が表示されれば成功。
- http://127.0.0.1:8000/docs を開けば、Swagger UI が表示されるはずです。
- http://127.0.0.1:8000/redoc を開けば、Redoc が表示されるはずです。
4. フォルダ構成の例
4.1 シンプル構成
以下のようなディレクトリ構成を考えています。
プロジェクトフォルダ/ ├── app/ │ ├── main.py # FastAPIエントリポイント │ ├── models.py # ORMモデル定義 │ ├── routers/ │ │ ├── users.py │ │ └── monsters.py │ ├── database.py # DB接続設定(SQLAlchemy) │ └── core/ # 設定ファイルや共通処理 ├── tests/ │ └── test_main.py # Pytestなどのユニットテスト ├── requirements.txt └── README.md
4.2 main.py にルーターを組み込む
from fastapi import FastAPI from .routers import users, monsters app = FastAPI() # ルーターの登録 app.include_router(users.router, prefix="/users", tags=["users"]) app.include_router(monsters.router, prefix="/monsters", tags=["monsters"]) @app.get("/") def read_root(): return {"message": "Welcome to Monster Game API"}
users.py や monsters.py 側では、router = APIRouter() を定義してエンドポイントをまとめる。 これで /users や /monsters エンドポイントになるイメージ。
4.3 DB接続やモデル定義は今後
app/models.py にテーブルのORM定義を置いたり、 app/database.py に engine = create_engine("sqlite:///...") みたいなコードを書く予定。 まだ実装していない状態でも、ファイルの位置だけ用意しておくと進めやすいかな。
5. まとめ
- FastAPIの環境構築は pip install fastapi uvicorn だけでとても手軽
- フォルダ構成はプロジェクトによって様々だけど、まずは app/main.py にエントリポイントを用意して、routersやmodelsを分割すると後々整理しやすい
- 「DB接続やCRUDはまだやってない…」状態でも、とにかく最初にサーバーを起動できるとモチベーションが上がる
次回以降でユーザー管理やモンスター管理のAPIに着手して、実際にDBとやり取りしてみます。まだまだ不安は尽きませんが、少しずつ前進!!!たぶんね。。。
Swagger などいいねぇ。。。資料書かずに済むし。。。
引き続きよろしくお願いいたします。