FastAPIアプリを作成してDocker上で動作させよう

プログラミング

この記事では、近年注目を集めているPythonのWebフレームワーク「FastAPI」を使って、簡単なAPIアプリケーションを作成し、ローカル環境で動かすまでの手順を分かりやすく解説します。

このシリーズは2部構成となっており、今回はその第1弾です。

  1. FastAPIアプリを作成してローカル環境で動作させる(今回の記事)
  2. FastAPIアプリをAWSのECS上でデプロイする

最終的にはクラウド環境で動かすことを目標にしていますが、まずは基本となるローカルでの開発方法をマスターしましょう。

FastAPIは、その名の通り「速さ」が特徴で、直感的かつ効率的にAPIを開発できるため、多くの開発者に支持されています。さあ、一緒にFastAPIの世界へ第一歩を踏み出しましょう!

FastAPIとは?

FastAPIは、Pythonというプログラミング言語で、Web API(ウェブの入り口のような仕組み)を簡単かつ高速に作成できる便利なツールです。

名前のとおり「Fast(速い)」という点が特徴で、開発はスピーディーに進み、動作も軽快です。

Pythonの書き方に合わせて、わかりやすく安全なAPIを作成できることが魅力です。

FastAPIの特徴とメリット

FastAPIには他のフレームワークと比べて際立った特徴がいくつかあります。FastAPIの魅力(初心者にもおすすめの理由)

1. 非同期処理でスムーズに動作する(async/awaitに対応)

FastAPIは、非同期処理(async/await)に対応しています。
これは、多くのユーザーが同時にアクセスしても、処理が重くなりにくく、快適なレスポンスを維持できる仕組みです。特にアクセス数が増えるようなアプリケーションにおいて、大きな効果を発揮します。

2. 自動でAPIドキュメントが生成される

APIを実装すると、Swagger UIReDocといったツールを使って、インタラクティブなAPIドキュメントが自動で生成されます。
ブラウザ上でエンドポイントを確認したり、ボタン操作だけで動作テストを行ったりできるため、開発効率が大きく向上します。

3. 入力チェック(バリデーション)が簡単にできる

「ユーザー名は文字列で」「年齢は整数で」といった入力のルールを、Pydantic(パイダンティック)というライブラリを使って簡単に定義できます。

入力に問題がある場合も、自動でわかりやすいエラーメッセージを返してくれるため、安全で信頼性の高いAPIを構築できます。

4. 型ヒントを活かしたコードが書ける

Pythonの「型ヒント(Type Hint)」を活用することで、自分自身やチームのメンバーにとって読みやすいコードを書くことができます。

また、エディタによる補完や自動チェック機能も活用できるため、開発中のミスを減らしやすくなります。

FastAPIの主な機能

FastAPIには、Web APIの開発を効率よく、かつ安全に進めるための便利な機能が多数備わっています。

ここでは代表的な機能をわかりやすくご紹介します。

ルーティング(URLごとの処理を定義する)

FastAPIでは、@app.get()@app.post() といったデコレーターを使って、URLに対応する処理(エンドポイント)を簡単に定義できます。

@app.get("/hello")
def say_hello():
    return {"message": "Hello!"}

このように、URLのパスやHTTPメソッドに合わせて関数を記述するだけで、APIがすぐに動作するため、初心者でも扱いやすい構造になっています。

依存性注入(共通処理を自動で渡せる)

FastAPIでは「依存性注入(Dependency Injection)」という仕組みを使って、ログイン認証やデータベース接続といった共通の処理を関数に自動で渡すことができます。

たとえば、毎回同じような処理を書く必要がなくなるため、コードの重複を避けられ、保守性が向上します。また、テストも行いやすくなるというメリットがあります。

リクエスト・レスポンスの自動バリデーション

APIにリクエストが送られた際、そのデータが正しいかどうかをFastAPIが自動でチェック(バリデーション)してくれます。これはPydanticという仕組みによって実現されています。

たとえば、送られてきた年齢が数値でなかった場合などは、APIが自動でエラーを返し、正確なレスポンス形式やエラーメッセージをクライアントに返すようになります。

これにより、セキュリティ面や品質面でも安心できるAPIを構築することができます。

OpenAPIとJSON Schemaへの自動対応

FastAPIは、APIの仕様をOpenAPI形式(以前のSwagger)として自動生成することができます。

この仕様は、他のシステムとの連携や自動テスト、APIクライアントの自動生成などに非常に便利です。

また、JSON Schemaへの対応もしており、データ構造が明確になることで、開発の効率や信頼性がさらに高まります。

ミドルウェアやイベントフックによる拡張性

FastAPIは、ミドルウェアという仕組みを使って、アプリケーションの動作を柔軟に拡張することができます。

たとえば以下のような処理が可能です。

  • リクエストやレスポンスのログ出力
  • CORS(クロスオリジン)設定
  • 共通のエラーハンドリング(例外処理)
  • アプリ起動時や終了時の初期化処理(イベントフック)

これらを組み合わせることで、本番運用にも対応できる高機能なAPIサーバーを構築できます。

FastAPIを実際に使ってみる

ここからは、実際にFastAPIを作成して使用する際の手順を解説していきます。

ステップ1:プロジェクト用フォルダの作成

まずはじめに、今回のFastAPIプロジェクト専用の作業場所となるフォルダを作成します。

ここでは api-age-app02 という名前のフォルダを作成しましょう。

コンピュータを操作するためのコマンド入力画面(ターミナルやコマンドプロンプトなどと呼ばれます)を開いて、以下のコマンドを実行してください。

mkdir api-age-app02
cd api-age-app02

これで、プロジェクト用のフォルダが準備できました。今後、このフォルダ内で作業を進めていきます。

ステップ2:Python仮想環境の作成(推奨)

FastAPIなどの依存パッケージを隔離して管理するために、仮想環境を作成します。

python3 -m venv venv
source venv/bin/activate

このコマンドを実行すると、ターミナルのプロンプト(入力待ちのカーソル前にある表示)の先頭に (venv) のような表示が追加されるはずです。

これは、現在仮想環境が有効になっていることを示しています。※ source venv/bin/activate を実行すると、仮想環境が有効になります(プロンプトが変わります)。

ステップ3:必要パッケージのインストール

仮想環境が有効になったら、いよいよFastAPIと、FastAPIを動かすために必要な「Uvicorn(ユーヴィコーン)」というASGIサーバーをインストールします。

ASGIサーバーとは、FastAPIのような非同期処理に対応したPython Webアプリケーションを動かすためのプログラムのことです。

以下のコマンドを実行してください。

pip install fastapi uvicorn

ここでは、fastapiuvicorn の2つを一度にインストールしています。

インストールが無事に完了したら、現在インストールされているパッケージのリストを requirements.txt というファイルに保存しておきましょう。

これは、後で同じ環境を別の場所で再現したり、他の人と共有したりする際に非常に便利です。

以下のコマンドで保存可能です。

pip freeze > requirements.txt

ステップ4:APIファイルを作成

FastAPIを使ったAPIの開発を本格的に始めましょう。

まずはアプリケーションの骨組みとなる フォルダ構成 を確認して、必要なファイルを用意します。

全体のファイル構造は以下のとおりです。

age-api/
├── venv/ # 仮想環境(Pythonパッケージの管理用)
├── main.py # メインのアプリケーションコード
├── requirements.txt # 依存ライブラリ一覧
└── Dockerfile # Docker用の設定ファイル

main.py

まずは、main.py という名前のPythonファイルを作成しましょう。

touch main.py

次に、エディタで main.py を開き、以下のコードを貼り付けましょう。

from fastapi import FastAPI
from datetime import date

# FastAPIのインスタンスを作成
app = FastAPI()

# 年齢を計算して返すAPIエンドポイント
@app.get("/age")
def calculate_age(birth_year: int):
    current_year = date.today().year
    age = current_year - birth_year
    return {"age": age}

このコードで、指定された誕生年から現在の年齢を計算して返すAPIを作成できます。

requirements.txt

requirements.txtファイルを開き内容を確認します。

requirements.txt はステップ3で作成済みです。

annotated-types==0.7.0
anyio==4.9.0
click==8.2.0
fastapi==0.115.12
h11==0.16.0
idna==3.10
pydantic==2.11.4
pydantic_core==2.33.2
sniffio==1.3.1
starlette==0.46.2
typing-inspection==0.4.0
typing_extensions==4.13.2
uvicorn==0.34.2

ステップ5:ローカルで動作確認

次に、このAPIがちゃんと動くかどうかを、ローカル環境で確認してみましょう。

まず、ターミナルで次のコマンドを実行して、FastAPIアプリを起動します。

uvicorn main:app --reload

このコマンドは、Uvicornサーバーを起動して、main.py ファイルの中にある app という名前のFastAPIアプリケーションを実行するコマンドです。

起動に成功すると、ターミナルに次のようなログが表示されます(一例):

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

この状態で、ブラウザを開き、以下のURLにアクセスしてみましょう:

http://127.0.0.1:8000/docs

ここでは、FastAPIが自動で生成したAPIドキュメント(Swagger UI)が表示されます。

/age エンドポイントをクリックして試すこともできます。たとえば birth_yearに「2000」 と入力すると、計算された年齢がレスポンスとして返されます。

ステップ6:Docker上にアプリをデプロイする

次は、FastAPIアプリを Dockerコンテナ 上で動かせるように準備していきます。
このステップでは、AWS ECSなどの本番環境にデプロイする前の「動く箱」を作るイメージです。

PC上にDockerがインストールされていない場合は、こちらからインストールを実施してください。

下記のコマンドでDockerfileを作成しましょう。

touch Dockerfile

作成したファイルを開き、下記コードを入力します。

# Dockerfile
FROM python:3.11-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

RUN apt-get update && apt-get install -y gcc

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

このファイルは、Pythonベースの環境を構築し、必要なライブラリをインストールした上で、FastAPIアプリをUvicornで起動する設定になっています。

ビルドとローカル確認

以下のコマンドを順に実行して、Dockerコンテナをビルドし、起動します。

docker build -t age-api .
docker run -p 8000:80 age-api
  • docker build:プロジェクトのDockerイメージを作成します。
  • docker run:ローカルのポート8000をコンテナのポート80に接続してアプリを実行します。

最後に、ブラウザで以下のURLにアクセスしてみてください。

http://localhost:8000/docs

画像のように、ローカルと同じくSwagger UIが表示され、APIの動作が確認できれば、Docker環境へのデプロイ成功です。

ステップ7:FastAPIアプリを実際に動かしてみる

ページが表示されたら、「GET /age」という項目を探してください。これが先ほど作成した年齢計算APIのエンドポイントです。
クリックして詳細を開き、「Try it out」ボタンを押すと、パラメータを入力できるようになります。

birth_year という入力欄に、例えば 2000(2000年生まれの場合)と入力して、「Execute」ボタンをクリックしてみましょう。

サーバーからの応答(Response)が表示されます。

「Response body」という部分に、以下の画像のようなJSONデータが出力されていれば成功です!

Response bodyに以下の値が出力されているか確認しましょう。
{
  "age": 25
}

これは、2025年現在、2000年生まれの人は25歳である、という計算結果を示しています。
ぜひ、ご自身の生まれ年を入力して、正しい年齢が返ってくるか試してみてください。

まとめ

今回は、FastAPIを使って簡単なAPIアプリケーションを作成し、ローカル環境で動作させるまでの一連の流れを体験しました。

  • プロジェクト用のフォルダを作成し、
  • Pythonの仮想環境を準備し、
  • FastAPIとUvicornをインストールし、
  • 簡単なPythonコードで年齢計算APIを実装し、
  • Uvicornサーバーを起動して、
  • ブラウザからAPIドキュメント(Swagger UI)にアクセスし、実際にAPIを試す
  • Docker上にアプリをデプロイする

というステップを学びました。FastAPIがいかに手軽に、そして強力な開発ツール(自動ドキュメント生成など)と共にAPI開発を始められるか、感じていただけたのではないでしょうか。

さて、次回はいよいよこのFastAPIアプリケーションを、AWSのECS(Elastic Container Service)というサービスを使って、クラウド上にデプロイする方法を解説していきます。

API管理をするうえで重要なステップとなります。ぜひこちらもご覧ください。

プロフィール
TanaT

株式会社あいてぃ所属。
クラウドエンジニア(AWS・Azure)
取得資格:AWS SAP、AZ-104、AZ-305
フロントエンド、バックエンド開発もできるフルスタックエンジニアとして学習中。
「AIとクラウドについて学ぶ」サイトの編集長。

TanaTをフォローする
プログラミング
シェアする

コメント

タイトルとURLをコピーしました