【FastAPI】Docker環境で始める初めてのAPI開発
今回は、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サーバ)をインストールするように指定しています。
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を定義します。
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やフロントエンドとの連携を学んでいくことができます。
Discussion