0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【FastAPI入門 #1】Pythonで作るREST API ── 初心者が「なぜFastAPI?」を理解するための解説

0
Last updated at Posted at 2026-06-22

はじめに

「PythonでAPIを作ってみたい」と調べていると、よく FastAPI という名前が出てきます。
でも、そもそも「APIってなに?」「サーバーとクライアントって?」「RESTって?」というところから疑問だと、解説記事を読んでも正直よくわかりません。

この記事では、Web初心者の視点 から順番に「なぜFastAPIが便利なのか」を説明していきます。


1. まず「ブラウザとサーバー」の関係を理解しよう

普段、YouTubeやGoogleを使うとき、あなたは ブラウザ(Chrome など) でURLを入力しますよね。

このとき、裏側で何が起きているかというと:

あなたのPC(クライアント)  ──── リクエスト ────►  YouTubeのサーバー
                           ◄─── レスポンス ────
用語 意味
クライアント 情報を「要求する」側。ブラウザやアプリのこと
サーバー 情報を「提供する」側。Webサービスの裏側にある
リクエスト クライアントがサーバーへ送る「お願い」
レスポンス サーバーがクライアントへ返す「返答」

💡 たとえるなら...
レストランで「ハンバーグ定食をください」と注文する(リクエスト)と、
店員さんが料理を持ってくる(レスポンス)イメージです。


2. REST APIとは何か?

API(Application Programming Interface)は、プログラム同士が会話するための「窓口」です。

たとえば天気アプリは「今日の東京の天気を教えて」と気象データのAPIに問い合わせ、データをもらって画面に表示しています。

REST API は、その窓口のルールの一つで、以下のような特徴があります:

  • URLでリソース(データ)を表現する
  • HTTP メソッドで操作を表現する
GET    /users       → ユーザー一覧を取得
GET    /users/1     → ID=1のユーザーを取得
POST   /users       → ユーザーを新規作成
PUT    /users/1     → ID=1のユーザーを更新
DELETE /users/1     → ID=1のユーザーを削除

このような「取得・作成・更新・削除(CRUD)」の操作をHTTPで表現するのがREST APIです。


3. PythonでAPIを作るとどこが大変?

「じゃあPythonでREST APIを作ってみよう!」となったとき、FastAPIを使わないとどんなことが起きるか を考えてみましょう。

3-1. Flaskで書くとこうなる(FastAPIなし)

PythonのWebフレームワークとして Flask が有名です。
Flaskで簡単なAPIを書くとこうなります:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/users', methods=['POST'])
def create_user():
    data = request.get_json()

    # ① バリデーションを自分で書かないといけない
    if 'name' not in data:
        return jsonify({'error': 'name is required'}), 400
    if not isinstance(data['name'], str):
        return jsonify({'error': 'name must be a string'}), 400
    if 'age' not in data:
        return jsonify({'error': 'age is required'}), 400
    if not isinstance(data['age'], int):
        return jsonify({'error': 'age must be an integer'}), 400

    # ② 処理本体
    user = {'name': data['name'], 'age': data['age']}
    return jsonify(user), 201

これだけのコードで、バリデーション(入力チェック)だけで10行以上 かかっています。

しかもこれには別の問題もあります。

3-2. ドキュメントが自動で生成されない

APIを作ったら、「このAPIどうやって使うの?」という説明書(ドキュメント)が必要です。

Flaskでは、ドキュメントを別で手書きしないといけません。

  • エンドポイント: POST /users
  • リクエストボディ: {"name": "string", "age": "integer"}
  • レスポンス: 201 Created ...

これを Swagger UI や Postman で管理するのは、特に初心者には手間がかかります。

3-3. 型ヒントとの連携が難しい

Python 3.5 以降には「型ヒント」という機能があります:

def greet(name: str) -> str:
    return f"Hello, {name}"

しかしFlaskはこの型ヒントを「APIのバリデーションや自動ドキュメント生成」には活用してくれません。型ヒントを書いても、それはあくまでIDEへのヒントにとどまります。

3-4. 非同期処理が難しい

最近のWebアプリでは、DBへのクエリやファイルI/Oなどを非同期(async/await) で処理することでパフォーマンスが上がります。

FlaskはデフォルトでASGIに対応していないため、非同期処理をしようとすると追加ライブラリの導入・設定が必要でした。


4. FastAPIが解決すること

上記の課題をまとめると、こうなります:

課題 FastAPIなし FastAPI
バリデーション 自分で書く 自動(Pydanticで型定義するだけ)
APIドキュメント 手書き 自動生成(Swagger UI)
型ヒント活用 IDEのヒントのみ バリデーションに直結
非同期処理 追加設定が必要 ネイティブ対応(async/await)

FastAPIで同じAPIを書くとこうなる

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# ① 型をクラスで定義するだけ
class UserCreate(BaseModel):
    name: str
    age: int

@app.post('/users', status_code=201)
def create_user(user: UserCreate):
    # ② バリデーションは自動!型が合わなければエラーを返してくれる
    return user

たったこれだけです!
name が文字列でなければ、FastAPIが自動で 422 Unprocessable Entity を返してくれます。

Swagger UIが自動で生成される

FastAPIを起動して http://localhost:8000/docs にアクセスすると、こんな画面が自動で表示されます:

┌────────────────────────────────────────────────┐
│ POST /users                                    │
│                                                │
│ Request Body:                                  │
│  {                                             │
│    "name": "string",                           │
│    "age": 0                                    │
│  }                                             │
│                                                │
│ [Try it out]                                   │
└────────────────────────────────────────────────┘

ドキュメントを書く手間がゼロ になります。


5. FastAPIのクイックスタート

pip install fastapi uvicorn
# main.py
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_available: bool = True  # デフォルト値も設定できる

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

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

@app.post("/items")
def create_item(item: Item):
    return item
uvicorn main:app --reload

起動したら:

  • http://localhost:8000/docs → Swagger UI(自動生成ドキュメント)
  • http://localhost:8000/redoc → ReDoc形式のドキュメント

6. まとめ

FastAPIが初心者にもおすすめな理由:

  1. コードが少ない ── Pydanticの型定義だけでバリデーションが完成
  2. ドキュメントが自動生成 ── /docs にアクセスするだけ
  3. 型ヒントと完全連携 ── Pythonの標準機能をフル活用
  4. 非同期対応 ── async def をそのまま書ける
  5. 高速 ── NodeのExpressに匹敵するパフォーマンス(TechEmpower Benchmark参照)

「PythonでAPIを作ってみたい」と思ったら、まずFastAPIから始めるのが今の定番です。


参考


この記事は学習日記として書いています。間違いや補足があればコメントいただけると嬉しいです!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?