見出し画像

Python FastAPI開発入門講座

FastAPiの概要について①

FastAPIは、Pythonで記述するための高速(高性能)、使いやすい、Web APIフレームワークです。FastAPIは、Python 3.6以降のタイプヒント(Type Hints)を使ってAPIパラメータを定義し、これにより強力な自動補完、型チェック、自動ドキュメンテーションなどが可能となります。
FastAPIの主な特長は以下の通りです:

  1. 高速: FastAPIは非常に高速で、NodeJSやGoに匹敵する性能を持つとされています。これは、Starlette(Web部分)とPydantic(データ部分)により実現されています。

  2. クイックコーディング: 開発者の生産性を高めるように設計されており、NodeJSやGoと比較して約2~3倍のコード開発速度を実現します。

  3. 少ないバグ: FastAPIを使用すると、開発者が少ないバグと短いコードでプログラムを作成するのを助けます。これは、Pythonのタイプヒントと自動エラーチェックの組み合わせによるものです。

  4. 直感的: FastAPIは新しい規格に基づいて設計されていて、直感的に使えます。これは長期的なプロジェクトで利益を生むための機能です。

  5. 簡易化されたデバッグ: FastAPIはエラー発生時にはっきりとしたエラーレポートを提供します。これにより、コードのエラー箇所を特定しやすくなります。

  6. 強力な自動補完: FastAPIの設計はエディタと互換性が高く、コードの自動補完が非常に強力です。これは、コーディング時間の短縮とバグの発生率低下に貢献します。

  7. 簡単なデプロイ: FastAPIアプリケーションは、UvicornというASGIサーバーを使用して簡単にデプロイすることができます。

また、FastAPIはAPIの定義にOpenAPI(以前のSwagger)とJSON Schemaを使用し、自動的に対話的なAPIドキュメンテーションを生成します。これにより、APIのテストやデバッグが容易になります。

FastAPIで重要なPython文法について

FastAPIは、Python 3.6以降のいくつかの新しい機能や文法を活用しています。以下にいくつか重要なものを挙げてみましょう:

1.タイプヒント: Python 3.5で導入されたタイプヒントは、FastAPIで非常に重要な役割を果たします。タイプヒントは、関数の引数や返り値の型を指定するための構文です。FastAPIはこれらのタイプヒントを利用して、リクエストとレスポンスのバリデーション、シリアライゼーション、デシリアライゼーションを行います。

例えば:

from typing import Optional
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

上記の例では、item_idint型で、qOptional[str]型(つまりstr型またはNone)としてタイプヒントが付けられています。これによりFastAPIは、適切なデータ型としてこれらのパラメータを処理します。

2.asyncとawait: Python 3.5以降、Pythonには非同期処理を行うためのasync/await文法が導入されました。FastAPIは非同期対応フレームワークであるため、この文法を利用してI/O待ち時間中に他のタスクを実行することができます。これにより、FastAPIは非常に高いパフォーマンスを達成しています。

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    # some async operation
    return {"item_id": item_id}

3.Pydanticモデル: Pydanticは、データバリデーションと設定管理を行うPythonライブラリで、FastAPIではリクエストとレスポンスオブジェクトのモデリングに広く用いられます。PydanticモデルはPythonのクラスにタイプヒントを使って属性を定義します。

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

データをバリデーション、シリアライゼーション、デシリアライゼーションすることができます。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

@app.post("/items/")
async def create_item(item: Item):
    return item

この例では、create_item関数はItem型のパラメータを取ります。クライアントがこのエンドポイントにPOSTリクエストを送信すると、FastAPIはリクエストボディをItemモデルにデシリアライゼーション(変換)し、バリデーションを行います。もしバリデーションに失敗すれば、FastAPIは詳細なエラーレスポンスを自動的に生成します。

これらの機能は、FastAPIが提供する自動的なリクエストハンドリング、データバリデーション、シリアライゼーション、自動ドキュメンテーション生成といった強力な機能の基盤となっています。

FastAPI用のDockerイメージ作成について

FastAPIアプリケーションのDockerイメージを作成するためには、まずDockerfileを作成する必要があります。DockerfileはDockerイメージの設計図で、コンテナがどのように動作するべきかを指定します。

以下に、基本的なFastAPIアプリケーションのためのDockerfileの例を示します:

# ベースとなるDockerイメージを指定
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8

# ワーキングディレクトリを設定
WORKDIR /app

# 依存関係ファイルをコピー
COPY ./requirements.txt /app/requirements.txt

# 依存関係をインストール
RUN pip install -r requirements.txt

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

このDockerfileでは、tiangolo/uvicorn-gunicorn-fastapi:python3.8というDockerイメージをベースとして使用しています。このイメージには、FastAPI、Uvicorn(ASGIサーバー)、Gunicorn(HTTPサーバー)が既に含まれています。

次に、requirements.txtファイル(FastAPIアプリケーションのPython依存関係をリストするファイル)をコピーし、pip install -r requirements.txtを実行して依存関係をインストールします。

最後に、アプリケーションのコードをDockerイメージにコピーします。

このDockerfileを使用してDockerイメージをビルドするには、以下のコマンドを実行します:

docker build -t my_fastapi_app .

これにより、FastAPIアプリケーションのDockerイメージがビルドされ、my_fastapi_appという名前が付けられます。このイメージは後でDockerコマンドを使用して実行することができます:

docker run -d -p 8000:80 my_fastapi_app

上記のコマンドはDockerコンテナをバックグラウンドで実行します(-dフラグ)し、ホストのポート8000をコンテナのポート80にバインドします(-p 8000:80)。これにより、ホストマシンのポート8000を通じてFastAPIアプリケーションにアクセスすることができます。

FastAPIのインストールについて

FastAPIはPythonのパッケージとして提供されており、pip(Pythonのパッケージ管理ツール)を使用して簡単にインストールすることができます。

まず、Pythonがインストールされていることと、適切なバージョン(FastAPIはPython 3.6以上が必要)であることを確認してください。Pythonが既にインストールされている場合、次のコマンドでバージョンを確認できます。

python --version

Pythonとpipがインストールされていることを確認したら、次のコマンドでFastAPIをインストールします。

pip install fastapi

また、FastAPIアプリケーションはASGIサーバー上で実行する必要があります。一般的には、Uvicornが使用されます。これも同様にpipを使用してインストールすることができます。

pip install uvicorn

これらのコマンドはすべてPythonの仮想環境内で実行することを推奨します。これにより、異なるプロジェクト間で依存関係の競合を防ぐことができます。

以上で、FastAPIとUvicornのインストールが完了し、FastAPIを使用した開発を開始することができます

この記事が気に入ったらサポートをしてみませんか?