FastAPIを試したいものの、既存のPython環境にパッケージを混ぜたくない場合は、標準機能のvenvでプロジェクト専用の環境を作ると依存関係を分けて管理できます。
この記事では、venvの作成からFastAPIのインストール、最小構成のAPI起動、ブラウザとcurlによる動作確認までを順に進めます。
Pythonの基本的な文法を理解し、初めてWeb APIを動かす読者を想定しています。
最初に知っておきたい4つの用語
手順に入る前に、登場する用語の役割を分けておくと、エラーが起きた場所を判断しやすくなります。
- venv:プロジェクトごとにPython本体への参照とインストール済みパッケージを分ける、Python標準の仮想環境機能です。
- FastAPI:PythonでWeb APIを作るためのフレームワークです。特徴や用途はFastAPIでAPIを設計するときの基本で詳しく解説しています。
- ASGI:PythonのWebアプリケーションとサーバープログラムを接続するための標準インターフェースです。
- Uvicorn:FastAPIアプリケーションを読み込み、HTTPリクエストを受け付けるASGIサーバーです。
手順1:Pythonの実行環境を確認する
ターミナルまたはコマンドプロンプトを開き、インストール済みのPythonを確認します。
macOSまたはLinux
python3 --version
Windows
py --version
バージョン番号が表示されなければ、コマンド名としてpythonも試してください。
Pythonが未導入の場合は、Python公式ダウンロードページから利用環境に合う配布物を入手します。
FastAPIが対応するPythonの範囲はリリースにより変わるため、固定された古いバージョンを選ばず、利用時点のFastAPI公式チュートリアルと照合してください。
手順2:プロジェクト用フォルダを作る
作業場所を決め、プロジェクト用のフォルダへ移動します。
mkdir fastapi-venv-project
cd fastapi-venv-project
以降のコマンドは、このフォルダ内で実行します。
手順3:venvで仮想環境を作る
Python公式のvenvドキュメントに沿って、.venvという名前の仮想環境を作成します。
macOSまたはLinux
python3 -m venv .venv
Windows
py -m venv .venv
.venvはフォルダ名であり、別の名前も使えます。
仮想環境は別の端末へコピーして使うものではないため、Gitを利用する場合は.gitignoreに.venv/を追加します。
手順4:仮想環境を有効化する
有効化すると、通常のpythonやpipが仮想環境内の実行ファイルを参照するようになります。
| 環境 | コマンド |
|---|---|
| macOSまたはLinuxのbash、zsh | source .venv/bin/activate |
| Windows PowerShell | .\.venv\Scripts\Activate.ps1 |
| Windows コマンドプロンプト | .venv\Scripts\activate.bat |
有効化後は、次のコマンドで実際に使われているPythonの場所を確認できます。
python -c "import sys; print(sys.executable)"
表示されたパスに.venvが含まれていれば、作成した仮想環境を使えています。
作業を終えるときは、次のコマンドで元の環境へ戻ります。
deactivate
手順5:FastAPIとUvicornをインストールする
仮想環境を有効にしたまま、pipを更新してFastAPIをインストールします。
python -m pip install --upgrade pip
python -m pip install "fastapi[standard]"
python -m pipと書くことで、直前に確認したPythonに対応するpipを実行できます。
fastapi[standard]は、FastAPI本体に加えてUvicornなど標準的な追加依存関係を導入する、FastAPI公式が案内しているインストール方法です。
インストール先を確認するには、次のコマンドを使います。
python -m pip show fastapi
手順6:最小構成のAPIを作る
プロジェクト直下にmain.pyを作り、次のコードを保存します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, World!"}
app = FastAPI()はアプリケーション本体を作る行です。
@app.get("/")は、ルートパス/へのGETリクエストをread_root()で処理するよう登録します。
関数が返す辞書はJSONレスポンスに変換されるため、ブラウザやほかのプログラムから内容を受け取れます。
手順7:開発用サーバーを起動する
main.pyがあるフォルダで、次のコマンドを実行します。
python -m uvicorn main:app --reload
main:main.pyというPythonモジュールを示します。app:ファイル内のapp = FastAPI()で作ったオブジェクトを示します。--reload:コードの変更を検知して開発用サーバーを再起動します。本番運用では使いません。
終了するときは、起動したターミナルでCtrl+Cを押します。
手順8:レスポンスとAPIドキュメントを確認する
サーバーを起動したまま、ブラウザでローカルのルートAPIを開きます。
次のJSONが表示されれば、FastAPIがリクエストを受け取り、処理結果を返せています。
{"message":"Hello, World!"}
ターミナルから確認する場合は、次のようにcurlを実行します。
curl http://127.0.0.1:8000/
FastAPIが生成するドキュメント画面も確認できます。
よくあるエラーの切り分け方
エラーメッセージだけで対処を決めず、Python、仮想環境、パッケージ、起動位置の順に確認すると原因を狭めやすくなります。
| 症状 | 確認と対処 |
|---|---|
python3またはpyが見つからない |
python --versionも試します。どのコマンドでもバージョンが表示されなければ、Pythonのインストール状況と実行パスを確認します。 |
PowerShellでActivate.ps1を実行できない |
組織や端末の実行ポリシーを確認します。ポリシーを不用意に変更せず、コマンドプロンプトのactivate.batを使うか、.\.venv\Scripts\python.exeを直接指定できます。 |
ModuleNotFoundError: No module named 'fastapi' |
python -c "import sys; print(sys.executable)"とpython -m pip show fastapiを実行し、同じ仮想環境にFastAPIが入っているか確認します。 |
Error loading ASGI app |
main.pyがあるフォルダで実行しているか、ファイル名がmain.py、オブジェクト名がappになっているか確認します。 |
| 8000番ポートが使用中と表示される | python -m uvicorn main:app --reload --port 8001で別のポートを指定し、URLもhttp://127.0.0.1:8001/へ変更します。 |
/docsを開けない |
サーバーを起動したターミナルが動作中か、起動ログに表示されたURLとポートが一致しているか確認します。 |
最小APIの次に進む順序
最初のレスポンスを確認できたら、機能を増やす前に入力と出力の型を決めます。
- Pythonの型ヒントとPydanticによる入力検証を学ぶ。
- パスパラメータとクエリパラメータを追加し、複数のルートを作る。
- 1ファイルのFastAPIを保守しやすい構成へ分ける方法を確認する。
- データベース、認証、テストを追加し、FastAPIを本番運用へ進めるチェック項目を確認する。
FastAPIを動かすまでの確認事項
- プロジェクト用フォルダに
.venvを作成した。 - 仮想環境のPythonを使って
fastapi[standard]をインストールした。 main.pyにルートを一つ定義した。- Uvicornを開発モードで起動し、JSONレスポンスと
/docsを確認した。
ここまで確認できれば、Pythonのグローバル環境とプロジェクトの依存関係を分けた状態で、FastAPIの学習を続けられます。
この記事に関連する株式会社greedenの取り組み
FastAPIで小さなAPIを動かした後は、要件整理と運用設計が次の課題です。株式会社greedenは、FastAPIを含むWebシステム開発を、要件定義から実装、テスト、リリース後の保守改善まで支援しています。
