# 【入門】PythonのFastAPIの使い方についてわかりやすく解説！

> 当サイト【スタビジ】の本記事では、FastAPIの使い方を解説していきます！FastAPIはPythonでWeb APIを構築するためのフレームワーク！実際にFastAPIを触りながら使い方をマスターしていきましょう！

- URL: https://toukei-lab.com/fastapi
- 公開: 2024.04.01 / 更新: 2025.11.27
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、FastAPIの使い方を解説していきます！FastAPIはPythonでWeb APIを構築するためのフレームワーク！実際にFastAPIを触りながら使い方をマスターしていきましょう！
:::

こんにちは！スタビジ編集部です！

今回は「**[FastAPI](https://fastapi.tiangolo.com/ja/)**」の使い方について解説していきます。

FastAPIを使うことで簡単に**Web APIを開発**することが出来ます。

近年WebアプリではAPIを使うことが多くなっているので、ぜひFastAPIの使い方をマスターしましょう！

:::talk{who="umatan"}
当メディアが運営するスタアカの以下のコースでPythonでAPIを利用する方法を解説しています！ぜひ参考にしてみて下さい！
:::

:::box
**[スタアカ「PythonでAPIを使ってみよう！」](https://toukei-lab.com/achademy/courses/python-api/)**
:::

## FastAPIとは

「**[FastAPI](https://fastapi.tiangolo.com/ja/)**」について簡単に見ていきましょう。

FastAPIは<mark>PythonでWebアプリケーションやWeb APIを開発するためのWebフレームワークです。</mark>

PythonのWebフレームワークといえば「[Django](/django)」や「[Flask](/python-flask)」が有名ですね。

FastAPIの特徴は主に以下が挙げられます。

:::box
**・直感的でシンプルな構文なので学習しやすい**\
**・非同期処理をサポートしているので、高速なリクエスト処理を実現**\
**・コードから自動的にAPIのドキュメントを生成する機能を提供**\
**・Pythonの型ヒントを活用して、タイプミスやデータの不整合を検知**\
**・APIのオープンスタンダードに基づき、互換性がある**
:::

FastAPIはWebフレームワークの中でも<mark>Web APIの開発に特化しており、そのための機能が充実しています。</mark>

:::talk{who="umatan"}
シンプルなコードで実装できるので、Pythonを触ったことがある人なら簡単に開発できるよ！
:::

APIについては以下の記事で解説しているので参考にしてみて下さい。

<https://toukei-lab.com/api>

## FastAPIを試してみよう

実際に自分の環境でFastAPIを動かしてみましょう。

本記事では”python3.11.8″を利用しています。

### 事前準備

FastAPIを動かすために必要なツールをインストールします。

まずはFastAPIをインストールします。

```python
pip install fastapi
```

pipコマンドでインストールできます。

FastAPIではpythonは3.8以上のバージョンが必要になります。

続いてFastAPIを動かすためのASGIサーバーをインストールします。

“**ASGI（Asynchronous Server Gateway Interface）サーバー**“とは、<mark>Pythonで書かれたWebアプリケーションやAPIを動かすためのサーバーで、非同期処理をサポートしています。</mark>

ASGIサーバーには”[Uvicorn](https://uvicorn.dev/)“や”[Hypercorn](https://gitlab.com/pgjones/hypercorn)“といったものが挙げられます。

```python
pip install "uvicorn[standard]"
```

こちらもpipコマンドでインストールできます。

### デモアプリケーションを確認

始めに”[公式ドキュメントのデモ](https://fastapi.tiangolo.com/ja/#_4)“を実装してみましょう。

main.pyというファイルを作成し、以下のコードを記述します。

```python
from fastapi import FastAPI

app = FastAPI()


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


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

それぞれ細かく見ていきましょう。

```python
app = FastAPI()
```

ここではFastAPIクラスのインスタンスを作成し、”app”と定義しています。ここでFastAPIアプリケーションが作成されます。

```python
@app.get("/")
def read_root():
    return {"Hello": "World"}
```

「@app.get(“/”)」は<mark>FastAPIで使用されるデコレーターの一つで”/”ルートへのGETリクエストを処理するための関数を指定しています。</mark>

ここでは、read_root関数が定義され、「{“Hello”: “World”｝」と返すようにしています。

FastAPIではこのデコレーターで修飾された関数を”**パスオペレーション関数**“と呼びます。

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

ここでも同様にデコレーターとパスオペレーション関数を定義しています。

read_item関数ではint型の”item_id”とstr型の”q”いう引数を受け取ります。

“item_id”はルートにも記載があり、<mark>パスのパラメータを想定しています。</mark>

“q”はクエリパラメータを想定しています。

クエリパラメータとは<mark>URLの末尾に”?”の後ろに続く形でキーと値のペア形式で渡されるパラメータです。</mark>

例としては”\~/item/1?q=example”のようなイメージで、デフォルト値は”None”となっています。

:::talk{who="umatan"}
HTTPリクエストを受け取って、結果を返すデモが簡単に実装できる！
:::

### デモアプリケーションを動かしてみる

実際にデモアプリケーションを動かしてみましょう。

```python
uvicorn main:app --reload
```

uvicornでmain.pyのFastAPIアプリケーションである”app”を起動します。

“**–reloadオプション**“はコードの変更があるのサーバーが再起動する設定になります。

ブラウザでローカルホストの8000ポート（http\://127.0.0.1\:8000）にアクセスすると「{“Hello”: “World”｝」と表示されます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo1-min.jpg)<mark>ルートパス（”/”）へのリクエストに対してread_root関数が動いているのがわかりますね。</mark>

では、ここで受け付けるパスを変えてみます。

```python
@app.get("/hello")
def read_root():
    return {"Hello": "World"}
```

main.pyを上記のように変えて保存します。

すると先ほどの画面が以下のように変わります。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo2-min.jpg)ルートパス（”/”）への処理が定義されていないため、FastAPIで用意されているエラー文が返ってきました。

指定した”/hello”のパスでアクセスすると先ほどと同じように「{“Hello”: “World”｝」が表示されます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo3-min.jpg)

続いてread_item関数の動きも見ていきましょう。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo4-min.jpg)

“item_id”に1を入れたURLを実行すると、<mark>“item_id”に1が”q”はデフォルトの”null”（Pythonの”None”はJsonでは”null”）が表示されます。</mark>

では、クエリも入れたURL（http\://127.0.0.1\:8000/items/1?q=example）を実行します。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo5-min.jpg)

“q”に設定した”example”が入って表示されているのが確認出来ました。

:::talk{who="umatan"}
ルール通りに結果が返ってくることがわかるね！
:::

### APIドキュメントを確認する

FastAPIではコードから「**自動対話型のAPIドキュメント**」を生成してくれます。

ブラウザから”http\://127.0.0.1\:8000/docs”にアクセスすると、生成されたAPIドキュメントを確認できます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo6-min.jpg)

APIドキュメントは<mark>“**[Swagger UI](https://swagger.io/tools/swagger-ui/)**“と呼ばれるWeb APIの仕様を視覚的に確認・操作するためのツールで作成されています。</mark>

この画面ではAPIの動作を確認してみましょう。

“Read Item”のタブを開き、”Try it out”をクリックします。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo7-min.jpg)

下記のように、パラメータを設定して”Execute”ボタンを押すと、APIを実行することが出来ます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo8-min.jpg)

リクエストURLの内容と実行結果が返ってきます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo9-min-1.jpg)

:::talk{who="umatan"}
自動生成されるAPIドキュメントでUI上でAPIの動作を確認できるのは便利！
:::

## FastAPIでイベント管理APIを作ってみよう

FastAPIを使ってWeb APIを作ってみましょう。

今回は以下の機能を持ったイベント管理をするAPIを作っていきます。

:::box
**・Json形式でイベント情報を受け取る**\
**・イベントごとにidを割り振り、idに応じてイベント情報を返す**\
**・指定されたidのイベントがない場合はエラー文を返す**
:::

ではそれぞれ見ていきましょう。

### イベント情報を受け取る

まずは、イベントのデータモデルを定義します。

event.pyファイルを作成し、”BaseModel”クラスを継承した”Event”クラスを定義します。

```python
from pydantic import BaseModel
from datetime import datetime

# イベントを定義
class Event(BaseModel):
    id: int
    title: str
    datetime: datetime
    location: str
    description: str
```

“**[pydanticのBaseModel](https://docs.pydantic.dev/latest/api/base_model/)**“クラスではモデル内の変数を型で指定できます。

ここでイベントに必要な変数を定義します。

イベントを受け取る部分を実装します、main.pyを以下のように修正します。

```python
from fastapi import FastAPI, HTTPException
from fastapi.responses import RedirectResponse
from event import Event

app = FastAPI()

# イベントデータを格納するリスト
events_db = []
event_id_counter = 0

#イベントを作成する
@app.post("/events/")
def create_event(event: Event):
    global event_id_counter
    event_id_counter += 1
    event.id = event_id_counter
    events_db.append(event)
    return {"message": "イベント作成", "event": event}
```

FastAPIのHTTP POSTメソッドで”/events/”に送られたデータの処理を定義します。

creat_event関数で送られたEventモデル形式のデータをリストに追加します。

また、リストに追加する前に<mark>イベントごとにidを更新して、idからデータを取ってこれるように処理を行っています。</mark>

### イベント情報を取得する

main.pyに作成したイベント情報を取得する処理を追加していきましょう。

```python
#rootパスへのGETリクエストが実行されたら"/events/"に転送する
@app.get("/")
def root():
    return RedirectResponse(url="/events/")

#すべてのイベントを取得する
@app.get("/events/")
def get_all_events():
    return events_db

#特定のイベントを取得する
@app.get("/events/{event_id}")
def get_event(event_id: int):
    for event in events_db:
        if event.id == event_id:
            return event
    raise HTTPException(status_code=404, detail="イベントはありませんでした")
```

デモアプリと同様にGETリクエストの処理を定義しています。

FastAPIでは起動時に”/”が呼び出されるので、”/events/”に転送する処理を記載しています。

get_event関数ではパスのidに紐づいたイベントをリストから検索し、<mark>当てはまったイベント情報を返しています。</mark>

また、当てはまらない場合はFastAPIの”**HTTPException**“を使用して、HTTPエラーとして404を返す設定をします。

### イベント情報を送信する

HTTP POSTリクエストを送信できるようにリクエスト用のコードを実装します。

今回は”event1.json”、”event2.json”というファイルを作り、request.pyでイベント情報のリクエストを送信するようにします。

event1.jsonファイルの中身は以下のようにしました。”Event”クラスで定義したものと同じ形式にします。

```python
{
    "id": 1,
    "title": "ミーティング",
    "datetime": "2024-04-01T10:00:00",
    "location": "Zoom",
    "description": "進捗確認"
}
```

続いて、リクエストを送信する”request.py”を見ていきます。

```python
import requests
import json

# JSONファイルからイベント情報を読み込む関数
def load_event_data(file_name):
    with open(file_name, "r") as file:
        return json.load(file)

# 各JSONファイルからイベント情報を読み込み、リクエストを送信する
for file_name in ["event1.json", "event2.json"]:
    # イベント情報を読み込む
    event_data = load_event_data(file_name)
    
    # POSTリクエストの送信
    response = requests.post("http://localhost:8000/events/", json=event_data)

    # レスポンスの確認
    print(response.status_code)
    print(response.json())
```

処理としてはJsonファイルを読み込んで、POSTリクエストを送信するシンプルなものです。

PythonでHTTPリクエストを送信する際は”**requestsライブラリ**“を利用すると便利です。

### 動作確認

では実際に動かしてみます。

```python
uvicorn main:app --reload
```

デモアプリでは”http\://127.0.0.1\:8000″にアクセスしていましたが、今回は”/”のURLは”/events/”にリダイレクトするように設定しています。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo10-min.jpg)

イベントデータがないので、空の状態が表示されます。

イベント情報を登録していきましょう。request.pyを実行します。

```python
python3 request.py
```

再度”/events/”にアクセスすると、イベントが登録されていることがわかります。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo11-min.jpg)

また実装通り、URLにidを指定するとidに応じてイベントを抽出し、範囲外のidの場合はエラー文を返しています。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo13-min.jpg)

最後にAPIドキュメントも見ていきましょう。

ここではPOSTリクエストの動作も確認できます。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo16-min.jpg)

“/events/”を見るとイベントが追加されていることがわかります。

![fastapi](/wp-content/uploads/2024/03/fastapi_demo18-min.jpg)

:::talk{who="umatan"}
APIを通じて、データの登録から取得までを確認できた！

DBと組み合わせるとより複雑なデータの処理が出来るから試してみよう！
:::

## FastAPI まとめ

ここまでご覧いただきありがとうございました！

本記事では、<mark>FastAPIの使い方</mark>を見ていきました。

FastAPIの特徴をおさらいすると以下です。

:::box
**・直感的でシンプルな構文なので学習しやすい**\
**・非同期処理をサポートしているので、高速なリクエスト処理を実現**\
**・コードから自動的にAPIのドキュメントを生成する機能を提供**\
**・Pythonの型ヒントを活用して、タイプミスやデータの不整合を検知**\
**・APIのオープンスタンダードに基づき、互換性がある**
:::

FastAPIを使うと簡単にWeb APIの処理を記述できることが分かったと思います。

:::talk{who="umatan"}
FastAPIを使って、いろんなAPIを作ってみよう！
:::

最近ではAIサービスと外部データを繋ぐ”**MCPサーバー**“が普及しています。以下の記事で詳しく解説しているのでチェックしてみて下さい

<https://toukei-lab.com/mcp>

また、本記事を通してアプリ開発や機械学習をもっと勉強したいと思った方は、当メディアが運営する教育サービス[「スタアカ（スタビジアカデミー）」](https://toukei-lab.com/achademy/)の講座をチェックしてみてください。

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です！

<mark>プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1（30分×4回）を実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}