【第4回】モンスター育成ゲーム用APIをPythonのFastAPIで作ってみたい…けど大丈夫かな?

「本ページはプロモーションが含まれています」

こんにちは。ここまではモンスター育成ゲームAPIの概要を決め、シーケンス図やER図、そしてDB設計をざっくりやってきました。

kunio-ud-zatta.hatenablog.com

今回はいよいよFastAPIの環境を整え、実際にプロジェクトとして動かすためのフォルダ構成を決めたいと思います。 実装に入っていく段階ってワクワクする反面、「これでいいのかな?」と不安になる部分もあるので、試行錯誤しながら進めます.。

1. 今回のゴール

  1. Python環境 (venv) の準備
  2. FastAPIのインストール と 起動確認
  3. フォルダ構成 の例示
  4. 簡単なHello World API の作成
  5. AlembicやDBとの連携は次回以降…

まずは最小限の「FastAPIアプリが起動してブラウザで確認できる」状態を目指します。

2. Python環境の準備

kunio-ud-zatta.hatenablog.com

kunio-ud-zatta.hatenablog.com

上の記事でPythonはDLしてあり、新しくvenvを作りました。

venv activate

3. FastAPIのインストール & 起動確認

3.1 インストール

pip install fastapi uvicorn
  • fastapi:本体
  • uvicorn:ASGIサーバー(これがないとローカルサーバー起動できない)

install fastapi

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

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 が表示されるはずです。

Swagger UI

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 などいいねぇ。。。資料書かずに済むし。。。

引き続きよろしくお願いいたします。