2026-04-30·実装·⏱ 約 6 分
FastAPI 入門 ─ ML モデルを 5 分で API にする
Python の高速 Web フレームワーク FastAPI を使って、ML モデルを REST API として公開する最短ルート。型ヒント・自動ドキュメント・非同期対応の 3 拍子。
FastAPI は Python の Web フレームワークの中で最も勢いがあるツール。型ヒントベースの設計で、書きやすく ・ 速く ・ ドキュメント自動生成という 3 拍子が揃っています。
Hello World
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def root():
return {'message': 'Hello, World!'}実行
uvicorn main:app --reloadブラウザで `http://localhost:8000` → `{"message": "Hello, World!"}`、`/docs` で Swagger UI が見られます。
型ヒントで自動検証
Pydantic でリクエストモデル
from pydantic import BaseModel
class Features(BaseModel):
age: int
income: float
is_member: bool
@app.post('/predict')
def predict(features: Features):
return {'prediction': features.age * 2 + features.income}型が違うリクエストは自動的に 422 エラー で弾かれる。バリデーション不要。
ML モデルのサービング
scikit-learn モデルを API 化
import joblib
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title='Housing Price API')
model = joblib.load('model.pkl')
class HousingFeatures(BaseModel):
rooms: int
age: int
area: float
distance_to_station: int
@app.post('/predict')
def predict(f: HousingFeatures):
pred = model.predict([[f.rooms, f.age, f.area, f.distance_to_station]])
return {'predicted_price': float(pred[0])}非同期エンドポイント
OpenAI API のような外部呼び出しは async で
import httpx
@app.post('/llm')
async def call_llm(prompt: str):
async with httpx.AsyncClient() as client:
resp = await client.post(
'https://api.openai.com/v1/chat/completions',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'model': 'gpt-4o-mini', 'messages': [{'role': 'user', 'content': prompt}]},
)
return resp.json()依存性注入
認証チェック
from fastapi import Depends, HTTPException, Header
def verify_token(x_api_key: str = Header()):
if x_api_key != 'secret':
raise HTTPException(401)
return x_api_key
@app.post('/protected', dependencies=[Depends(verify_token)])
def protected():
return {'ok': True}Streaming Response
ChatGPT 風ストリーミング
from fastapi.responses import StreamingResponse
@app.post('/stream')
def stream(prompt: str):
def gen():
for chunk in llm_stream(prompt):
yield chunk
return StreamingResponse(gen(), media_type='text/event-stream')デプロイ
- Vercel: FastAPI を Functions として動かせる(Fluid Compute)
- Cloud Run(GCP): Docker + 自動スケール、寿命 60 分
- Lambda + API Gateway(AWS): サーバレス王道
- Render / Fly.io: 個人開発向け
Flask との比較
- 速度: FastAPI は Flask の 2〜3 倍速い(Starlette + Uvicorn)
- 型検証: FastAPI は型ヒントで自動、Flask は手動
- ドキュメント: FastAPI は OpenAPI 自動生成、Flask は別途作成
- 非同期: FastAPI ネイティブ async、Flask は別途設定
学習リソース
- [scikit-learn 入門](/blog/sklearn-introduction)
- [OpenAI API 実装入門](/blog/openai-api-implementation)
- [Slack Bot を LLM で作る](/blog/slack-bot-with-llm)
- [Docker 入門](/blog/docker-for-ml)
Related Articles
関連記事
- 2026-04-30実装Slack Bot を LLM で作る ─ FastAPI + OpenAI で社内ツール化Slack の Slash Command と Events API を使い、社内チャンネル内で動く LLM Bot を構築。FastAPI バックエンド + OpenAI で 1 日で完成。
- 2026-04-30実装Docker 入門 ─ ML 環境の再現性を担保する「自分の PC では動く問題」を解決する Docker。ML プロジェクトの Dockerfile・GPU 対応・docker-compose・Multi-Stage Build までを実用視点で。
- 2026-04-30実装SQL 中級 ─ ML エンジニアが書く 7 つの定石パターンWindow 関数・CTE・PIVOT・自己結合など、データ分析で必須の中級 SQL を 7 パターン。BigQuery・Snowflake・PostgreSQL で動く形で。