【FastAPI】Docker環境で始める初めてのAPI開発

2024/08/01に公開

今回は、PythonのモダンなウェブフレームワークであるFastAPIを使って、簡単なウェブAPIを作成する方法を紹介します。さらに、Dockerを使用して環境を構築するので、初心者の方でも簡単に始めることができます。

FastAPIとは?

FastAPIは、PythonでウェブAPIを作成するためのモダンなフレームワークです。以下のような特徴があります:

  • 高速: 非常に高性能で、GoやNode.jsと同等の速度を誇ります。
  • 簡単: 宣言的なコードスタイルと自動ドキュメント生成により、少ないコードで強力なAPIを作成できます。
  • 標準準拠: OpenAPIとJSON Schemaに基づいており、自動でAPIドキュメントを生成します。
  • 型ヒントサポート: Pythonの型ヒントを活用し、エディタの補完機能を最大限に利用できます。
  • 依存性注入: デコレーターを使って簡単に依存性を管理できます。
    これらの特徴により、FastAPIは非常に使いやすく、強力なツールとなっています。

導入手順

FastAPIを実行するための環境をDockerで整えます。

必要なツール

  • Docker
  • Docker Compose
  • Python 3.7以上

ディレクトリ構成

まず、プロジェクトのディレクトリ構成を決めます。以下のような構成にします。

fastapi-docker-example/
  ├── app/
  │   └─── main.py  # FastAPIアプリケーションのエントリーポイント
  ├── docker-compose.yml  # Docker Composeの設定ファイル
  ├── Dockerfile  # Dockerの設定ファイル
  ├── requirements.txt  # 依存パッケージのリスト
  └── README.md  # プロジェクトの説明

ライブラリーのインストール

requirements.txtはプロジェクトで必要なPythonライブラリとそのバージョンを指定するファイルです。ここではFastAPIとUvicorn(ASGIサーバ)をインストールするように指定しています。

requirements.txt
fastapi
uvicorn

Dockerファイルの作成

Dockerfile

Dockerイメージをビルドするための指示を含むファイルです。Pythonの実行環境、依存関係のインストール、アプリケーションコードのコピー、そして起動コマンドを定義しています。
app/Dockerfileを作成

# ベースイメージを指定
FROM python:3.9

# 作業ディレクトリを作成
WORKDIR /app

# 必要なパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションのソースコードをコピー
COPY . .

# アプリケーションを起動
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml

複数のDockerコンテナを定義し、管理するためのファイルです。ここではWebサービスを定義し、ポートマッピングやボリュームの設定を行っています。

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
  • web:
    これはサービスの名前です。この場合、ウェブアプリケーションのサービスを定義しています。

  • build:

    • context: .: ビルドコンテキストをカレントディレクトリ(.)に設定しています。つまり、Dockerfileや関連ファイルはこのディレクトリにあることを示しています。
    • dockerfile: Dockerfile: 使用するDockerfileの名前を指定しています。この場合、デフォルトの「Dockerfile」という名前のファイルを使用します。
  • ports:
    "8000:8000": ホストマシンの8000ポートをコンテナの8000ポートにマッピングしています。これにより、ホストマシンのlocalhost:8000でアプリケーションにアクセスできます。

volumes:

./app:/app: ホストマシンの./appディレクトリをコンテナ内の/appディレクトリにマウントしています。これにより、ホスト側でコードを変更すると、即座にコンテナ内に反映されます。開発時のコード変更をリアルタイムで確認するのに便利です。

APIの作成

FastAPIアプリケーションのエントリーポイントです。このファイルにAPIのルートやエンドポイントを定義します。
app/main.pyを作成。ここでは、シンプルな「Hello, World!」APIを定義します。

main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

アプリケーションの起動

以上の設定が終わったら、以下のコマンドを実行してDockerコンテナをビルドし、アプリケーションを起動します。

docker compose up --build

コンテナが起動したら、ブラウザでhttp://localhost:8000にアクセスしてください。「Hello, World!」メッセージが表示されるはずです。

まとめ

これで、FastAPIとDockerを使用した簡単なウェブAPIの環境が整いました。この環境をベースに、さらに複雑なAPIやフロントエンドとの連携を学んでいくことができます。

株式会社Xronotech

Discussion