FastAPIで最初のWeb APIを動かすまでに必要なのは、開発環境の準備、1ファイルの実装、開発サーバーの起動、レスポンスの確認です。
この記事では、ブラウザにJSONを返す最小構成の「Hello World」APIを作り、コードとコマンドの意味を順に確認します。
FastAPIの特徴や採用前の確認事項から知りたい場合は、先に関連記事を読むと全体像をつかみやすくなります。
この手順で作るもの
APIは、ソフトウェア同士が決められた形式で情報をやり取りするための窓口です。
今回はWebブラウザやcurlからルートパス(/)へGETリクエストを送り、次のJSONを受け取ります。
{"message":"Hello, World!"}
- FastAPI:PythonでWeb APIを実装するためのフレームワーク
- エンドポイント:APIへアクセスするURLとHTTPメソッドの組み合わせ
- Uvicorn:FastAPIアプリケーションを起動し、HTTPリクエストを受け付けるサーバー
作業後の構成は、仮想環境を除けば次の1ファイルだけです。
fastapi-hello/
└── main.py
1. プロジェクトと仮想環境を準備する
任意の作業場所でプロジェクト用フォルダを作り、その中へ移動します。
mkdir fastapi-hello
cd fastapi-hello
仮想環境は、プロジェクトごとにPythonパッケージを分離する仕組みです。
別のプロジェクトが使うパッケージやバージョンと混ざりにくくなるため、この小さな例でも用意します。
python -m venv .venv
続いて、利用している環境に合うコマンドで仮想環境を有効化します。
Windows PowerShell
.\.venv\Scripts\Activate.ps1
macOSまたはLinux
source .venv/bin/activate
有効化した仮想環境へ、FastAPIと標準的な実行用依存パッケージをインストールします。
python -m pip install "fastapi[standard]"
2. main.pyにエンドポイントを書く
プロジェクト直下にmain.pyを作り、次のコードを保存します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
app = FastAPI()は、APIの設定とエンドポイントを登録するアプリケーション本体を作ります。
@app.get("/")は、ルートパスへのGETリクエストを直下のread_root関数で処理する指定です。
関数が返したPythonの辞書は、FastAPIによってJSONレスポンスへ変換されます。
async defを使う基準
FastAPIのエンドポイントは、通常のdefとasync defのどちらでも定義できます。
awaitで呼び出す非同期対応ライブラリを使う処理にはasync defを選び、同期的なライブラリを呼ぶ処理には通常のdefを選びます。
この例では待ち時間を伴う処理がありませんが、最小コードとしてasync defを使っています。
3. Uvicornで開発サーバーを起動する
main.pyを保存したフォルダで、次のコマンドを実行します。
uvicorn main:app --reload
main:appのmainはmain.pyを、appはファイル内のapp = FastAPI()で作ったオブジェクトを指します。
--reloadはPythonファイルの変更を検知してサーバーを再起動する開発用オプションです。
起動すると、通常はhttp://127.0.0.1:8000でローカルからアクセスできる状態になります。
同じ開発サーバーは、FastAPIの開発用コマンドでも起動できます。
fastapi dev main.py
4. JSONレスポンスを確認する
サーバーを起動したターミナルはそのままにして、別のターミナルからリクエストを送ります。
curl http://127.0.0.1:8000/
Windows PowerShellでcurlの挙動が異なる場合は、次のコマンドでも確認できます。
Invoke-RestMethod http://127.0.0.1:8000/
ブラウザでhttp://127.0.0.1:8000/を開いても、同じ内容を確認できます。
次のJSONが返れば、エンドポイントの登録からサーバー起動まで成功しています。
{"message":"Hello, World!"}
5. APIドキュメントを試す
FastAPIは、登録したエンドポイントの情報をもとにAPIドキュメントを用意します。
- Swagger UI:http://127.0.0.1:8000/docs
- ReDoc:http://127.0.0.1:8000/redoc
Swagger UIではGET /を開き、「Try it out」からリクエストを実行すると、ステータスコードとレスポンス本文を画面上で確認できます。
ReDocは仕様を読みやすく整理して表示するため、エンドポイントが増えたときの確認に向いています。
つまずきやすいエラーの確認表
| 症状 | 確認すること | 対処 |
|---|---|---|
No module named 'fastapi' |
仮想環境の有効化とインストール先 | 仮想環境を有効化し、python -m pip install "fastapi[standard]"を再実行する |
Could not import module "main" |
現在のフォルダ、ファイル名、app変数 |
main.pyがあるフォルダへ移動し、コードの名前を確認する |
Address already in use |
8000番ポートを使う別のプロセス | 以前のサーバーを停止するか、--port 8001を付けて別のポートで起動する |
最小APIから次に進む順序
ここまでで、アプリケーションの作成、GETエンドポイントの登録、Uvicornの起動、JSONレスポンスとドキュメントの確認が一巡しました。
次は、パスパラメータやクエリパラメータを追加し、型ヒントとPydanticによる入力検証へ進むと、APIが受け取るデータの条件を表現できます。
機能が増えたら、1ファイルのAPIを保守しやすい構成へ分ける方法を参考に、役割ごとの分割を検討してください。
なお、--reloadを使う今回の起動方法はローカル開発用であり、そのまま外部へ公開する手順ではありません。
公開前には、認証、入力検証、テスト、ログ、監視、実行プロセスなどをFastAPIプロトタイプの本番運用チェックリストで確認します。
この記事に関連する株式会社greedenの取り組み
FastAPIの小さなAPIを業務で使える仕組みに育てるには、要件整理から外部連携、テスト、運用までの設計が必要です。
株式会社greedenは、API開発を含むWebシステム開発を企画から保守、改善まで支援しています。

