【連載】Python FastAPI入門:第1回 FastAPIの特徴と「爆速」の理由

この記事は約5分で読めます。

「FastAPI」という名前は聞いたことがあるけれど、実際どういうものなのか、なぜこれほど注目されているのか分からないという方も多いのではないでしょうか。

最近のPython Web開発において、FlaskやDjangoを抑えて採用率が急上昇しているのがFastAPIです。

この連載では、「名前は知っているけれど使ったことはない」という状態から、実際にAPIを構築して運用できるレベルまで、ステップバイステップで解説していきます。第1回は、FastAPIの正体とその驚異的な速さの秘密、そして最初の「Hello World」までをまとめます。

FastAPIとは?モダンなAPI開発の標準

FastAPIは、Python 3.8以降の「型ヒント」を最大限に活用した、モダンで非常に高性能なWebフレームワークです。

一言で言えば、「開発者が楽をしながら、なおかつ超高速なWebサーバーを作れるツール」です。

かつてPythonのWeb開発といえば、シンプルで軽量な「Flask」か、多機能な「Django」の二択でした。しかし、FastAPIはその両方のいいとこ取りをしながら、最新の通信規格やPythonの言語機能をフルに活用することで、全く新しい開発体験を提供しています。

なぜFastAPIは「爆速」のか?その原理を紐解く

FastAPIが「Fast」を冠する理由は、単にコードが書きやすいからだけではありません。技術的な裏付けとして、大きく3つの理由があります。

ASGI(Asynchronous Server Gateway Interface)の採用

従来のFlaskやDjango(以前のバージョン)は「WSGI」という規格に基づいていました。これは一度に一つのリクエストを処理する、いわば「同期処理」が基本です。 対してFastAPIは、ASGIという次世代の規格を採用しています。これにより、大量のリクエストを並行して効率よくさばけるようになりました。

非同期処理(Async / Await)へのネイティブ対応

FastAPIの真骨頂は、Pythonの asyncawait というキーワードを用いた非同期処理にあります。 例えば、データベースの読み込みを待っている間、CPUを遊ばせずに他のリクエストの処理を進めることができます。組み込み開発の言葉を借りれば、常にポーリング(監視)して待機するのではなく、「割り込み処理(Interrupt)」のように効率よくタスクを切り替えているイメージです。

PydanticとStarletteという最強の土台

FastAPIはゼロから作られたわけではなく、2つの強力なライブラリを組み合わせています。

  • Starlette: Web通信を担当する超軽量なツール。
  • Pydantic: データのバリデーション(型チェック)を担当する高速なライブラリ。

この2つが土台にあることで、Pythonでありながら、Node.jsやGoといった高速な言語のフレームワークに匹敵するパフォーマンスを叩き出しています。

環境構築の手順

それでは、実際に動かしてみましょう。Pythonがインストールされている環境であれば、構築は非常にシンプルです。

必要なライブラリのインストール

FastAPI本体と、Webサーバーとして動作させるための uvicorn をインストールします。

pip install fastapi uvicorn

最初のプログラム:Hello World

準備ができたら、適当なフォルダに main.py というファイルを作成し、以下のコードを貼り付けてください。

from fastapi import FastAPI

# FastAPIのインスタンスを作成
app = FastAPI()

# ルートパス(/)にアクセスした時の処理
@app.get("/")
def read_root():
    return {"message": "Hello FastAPI!"}

# 特定のIDを受け取る例
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

注目ポイント:型指定のメリット

ここで item_id: int と記述している部分に注目してください。 これは、URLから受け取る item_id が「整数(int)」であることを指定しています。もし数字以外のデータが送られてきた場合、FastAPIが自動的にエラーを返し、不正なデータがプログラム内部に入り込むのを防いでくれます。

サーバーの起動方法

作成した main.py があるディレクトリで、以下のコマンドを実行します。

uvicorn main:app --reload
  • main: ファイル名(main.py)を指します。
  • app: コード内で作成した app = FastAPI() の変数名です。
  • --reload: コードを保存するたびにサーバーが自動で再起動する設定です。開発中に非常に便利です。

起動後、ブラウザで http://127.0.0.1:8000 にアクセスしてみてください。画面に {"message": "Hello FastAPI!"} と表示されれば成功です!


感動の「自動ドキュメント」を確認する

FastAPIの最大の特徴を体験しましょう。 ブラウザで http://127.0.0.1:8000/docs にアクセスしてみてください。

そこには、先ほど書いたコードに基づいたAPIの仕様書(Swagger UI)が自動生成されています。 「Try it out」ボタンを押すと、ブラウザ上から実際にAPIをテスト実行できます。仕様書を別で作る手間が一切かからない、画期的な機能です。

まとめ:第1回はここまで

今回は、FastAPIの概要と「速さの原理」、そして最初の実行までを解説しました。

  • FastAPIはASGI非同期処理によって圧倒的に速い
  • Pydanticのおかげで、Pythonの型ヒントがそのままバリデーションになる
  • /docs高機能なドキュメントが勝手に出来上がる

非常に合理的なフレームワークであることが実感できたのではないでしょうか。次回は、Web APIの基本である「データの受け取り方(パスパラメータとクエリパラメータ)」について詳しく解説していきます。

コメント

タイトルとURLをコピーしました