Python

最終更新日: 2024.01.19 (公開: 2024.01.19)

FastAPIとは?Pythonのフレームワークの特徴や使い方を解説

FastAPIとは?Pythonのフレームワークの特徴や使い方を解説

Pythonの文法を一通り学習し、実際にプログラムやWebアプリを開発してみたいと考えている方のなかには、どのWebフレームワークで開発を進めるか悩んでいる方もいるのではないでしょうか。おすすめのWebフレームワークのひとつに「FastAPI」があります。「FastAPI」とは、Python3.6以降でWeb APIを簡単に、高速に作成するためのWebフレームワークです。

本記事では「FastAPI」の概要や特徴、インストール方法やAPIの作り方について解説します。

FastAPIとは?

FastAPIとは、「Python」3.6以降でAPIを構築するために制作されたWebフレームワークです。「Python」でのWebアプリ開発やAPI開発をサポートするフレームワークで、日本語にも対応していることから国内で注目を集めています。

他のフレームワークよりも直感的にコーディングができるため、初心者でも扱いやすく、これから「Python」でアプリやAPI開発に挑戦する方にもおすすめです。

また拡張性も高く、RESTやGraphQLでの開発にも対応しているため、初心者以外でも物足りなさを感じない性能となっています。このため、FastAPIは幅広い開発者に利用されているフレームワークのひとつです。

FastAPIの特徴

FastAPIには、7つの特徴があります。

  • 日本語の公式マニュアルが充実している
  • ドキュメント自動生成機能がある
  • コードが書きやすい
  • サーバーを立ち上げやすい
  • Pythonに型定義を含めることが可能
  • 非同期通信の実装がしやすい
  • 高い拡張性がある

ここからは、それぞれの特徴について詳しく解説します。

日本語の公式マニュアルが充実している

FastAPIは公式のチュートリアルやマニュアルが、日本語でも作成されています。

画像引用元:公式HP

公式サイトの内容が充実しているため、学習に十分な情報が得られます。また、トピックごとに分割されており、作成したいAPIに関する情報に直接アクセスも可能です。他にも、リファレンスとしても利用でき、記載されているコードブロックはすべてテストされているため、コピーして直接使用できます。

英語に詳しくない人でも学習しやすいため、プログラミング学習初心者でも学習しやすいメリットがあります。

ドキュメント自動生成機能がある

FastAPIは、コードを書くとそれに合わせてドキュメントが自動で生成される機能があります。ドキュメントとは、作成したAPIの説明書に該当するものです。APIを公開する際にどのような機能を持ったAPIなのか入出力を記載することで、どのような使い方をするAPIなのか、APIのインターフェースとして提示できます。

「OpenAPI」と呼ばれるWebAPIインターフェース記載記法にも対応しており、これに従って記載することで、利用者は最小限の実装ロジックでAPIを理解し組み込むことが可能です。

コードが書きやすい

FastAPIは、コードの書きやすさも特徴のひとつです。

APIを構築する多くの要素が用意されており、ルーティングやリクエスト処理などAPI開発に必要な部分はシンプルにモジュール化されています。開発者は必要な機能を自由にカスタマイズでき、さまざまなニーズに対応できます。少ないコード量で実装できる点も利点で、バグが少なく軽量で直感的な操作が可能です。

サーバーを立ち上げやすい

FastAPIを使用してサーバーを立ち上げるためには、いくつかのコマンド入力が必要です。

①pipコマンドで、「fastapi」と「uvicorn」をインストールします。
Uvicornとは、FastAPIフレームワークで開発された「Python」のWebアプリケーションを安定して実行するためのサーバーです。

pip install fastapi uvicorn

②fastapiとuvicornのインストールが終わったら、FastAPIのプログラムを作成します。お使いのエディタを開いて、以下のプログラムを記述し「main.py」というファイル名で保存してください。

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def hello():
    return {"message" : "Hello,World"}

このプログラムは、Uvicornを使用して「Hello, World」というメッセージを出力するAPIを作成するものです。

Pythonに型定義を含めることが可能

FastAPIの特徴のひとつは、「Python」の型ヒントを活用してAPIのバリデーションやドキュメント生成をおこなうことです。

FastAPIではpydantic(パイダンティック)ライブラリを使用して、型ヒント(変数や関数の引数、戻り値などの期待するデータ型を明示的に指定するためのもの)を利用したバリデーション(入力データや処理データが特定の条件や要件を満たしているかを確認するプロセス)が可能です。

また、型ヒントを活用することで、シリアライゼーション(オブジェクトやデータ構造を一連のバイトや文字列の形式に変換するプロセス)もおこなえます。

pydanticを使った型指定のサンプルコードは、以下の通りです。

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel

class User(BaseModel):
   id: int
   name : str
   signup_ts: Optional[datetime] = None
   friends: List[int] = []

この例では、以下のフィールドを持つUserクラスを定義しています。

id:int
name:str
signup_ts:datetime
friends:intを要素に持つList

以下は、定義通りの値を設定して出力した実行例です。

user = User(
   id=11111,
   name ='User name'
   signup_ts=datetime(2023, 9, 25, 12, 30),
   friends=[1, 5]
)
 
# フィールドにアクセス
print(user.id)  # 11111
print(user.name)  # User name
print(user.signup_ts)  # 2023-09-25 12:30
print(user.friends)  # [1, 5]

以下は、定義と異なる値を設定して出力した実行例です。「validation errors」というエラーが発生し、型が誤っていることが検出されます。

try:
   user = User(
       id='not number',
       signup_ts='not datetime',
       friends=[1, 'str']
   )
except ValidationError as e:
   print(e)

出力結果は、以下です。

# 3 validation errors for User
# id
#   value is not a valid integer (type=type_error.integer)
# signup_ts
#   invalid datetime format (type=value_error.datetime)
# friends -> 1
#   value is not a valid integer (type=type_error.integer)

非同期通信の実装がしやすい

非同期処理とはプログラミングにおける処理方法のひとつです。通常のプログラミングの同期処理実行時は、プログラムの先頭からひとつずつ順に実行します。上から順に実行していくので、1つ目の処理が終わるまで次の処理が開始できません。

一方で非同期処理では、異なる処理をおこないます。プログラムを先頭から順に処理する流れは同期処理と同じですが、非同期処理が完了するのを待たなくても次の処理の実行を開始することが可能です。

たとえばふたつの処理がある状態では、最初の処理がある程度進んだあとに止めたあと、次の処理をまたある程度進めたら止めて、最初に止めた処理の再開が可能です。

このような段階的な実行をおこなうことで、複数の処理を並行したようにみせながら実行できます。

「Python」のasync/await構文を使用することで、非同期処理を簡潔に記述できます。

下の例はtask1が2秒、task2が4秒で並行で処理される、計4秒の実行時間となる例です。

import asyncio
import time


async def proc_after(delay, what):
    print(f"started proc_after {delay} {what}")
    await asyncio.sleep(delay)
    print(what)

async def main():
    task1 = asyncio.create_task(
        proc_after(2, 'task1'))

    task2 = asyncio.create_task(
        proc_after(4, 'task2'))

    print(f"started at {time.strftime('%X')}")

    await task1
    await task2

    print(f"finished at {time.strftime('%X')}")

asyncio.run(main()) 

高い拡張性がある

FastAPIの「高い拡張性」とは、FastAPIをベースにして、さまざまな追加の機能やツールを簡単に組み込める性質を指します。

FastAPIは必要に応じて追加の機能やツールを組み合わせて、複雑なアプリケーションの作成が可能です。また多様なデータベースとの接続が簡単にできるほか、自動的にAPIのドキュメントが作られるため、作ったプログラムの使い方を他の人に伝えるのに便利です。さらにFastAPIは、他の多くのツールやライブラリとも簡単に組み合わせられます。

FastAPIとDjangoを比較するとどこが違う?

Djangoは、Web開発に必要な機能はすべて盛り込まれている「重量級フレームワーク」で2つのケースに向いています。

  • 大規模開発
  • プロジェクト内ルールが厳格規定されているWeb開発

また、個人開発者が開発をおこなう際にも、実装だけに集中できるためおすすめです。作成するAPIの要件が明確な大規模開発に適しています。

FastAPIは非同期処理のサポートにより、軽量で高速に動作する特徴があり以下のようなケースに向いています。

  • 小中規模のWebアプリ開発
  • WebAPI開発全般
  • 処理速度が求められる開発

特に処理速度が求められるAPI開発では、その名の通りFastAPIが最有力です。APIドキュメントが自動生成されるので、公開する手間の削減にもつながります。

FastAPIをインストールする方法

FastAPIは、開発環境の構築が非常に簡単なフレームワークです。一部のプログラミング言語やフレームワークでは環境構築に手間取ることがありますが、FastAPIは簡単にセットアップできます。

まずコマンドプロンプトやターミナルを開き、以下のコマンドを入力してFastAPIをインストールします。

pip install fastapi

FastAPIは、ASGI(Asynchronous Server Gateway Interface・PythonのWebアプリケーションとWebサーバー間の標準的なインターフェースを提供する仕様)フレームワークであり、実際にサーバとして動作させるためにはASGIサーバが必要です。その中でも、「Uvicorn」は人気のある選択肢です。

以下のコマンドでUvicornをインストールします。

pip install uvicorn

これで、FastAPIを使用したAPIの開発を始めるための基本的なセットアップが完了しました。

FastAPIでWebAPIのプログラム作成方法

開発環境が完成したら、いよいよFastAPIでブログラムを作成していきましょう。次の手順で、作成方法の流れを解説します。

  • main.pyにプログラムを書いて保存する
  • ターミナルにコマンドを入力する
  • API を呼び出すために、src下に test.pyを作成する
  • FastAPIを起動しよう

main.pyにプログラムを書いて保存する

インストールが完了したら、APIのプログラミングをおこないます。ここでは、「main.py」について、詳しく説明します。

APIを実行すると、「Hello,World」というメッセージが出力されます。

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def hello():
    return {"message" : "Hello,World"}

1行目で「FastAPI」をインポートして、main.pyのなかで「FastAPI」を使えるようにします。

2行目で、FastAPIのインスタンスを「app」という名前で生成しています。このappを通じて、以降のAPI関連メソッドを呼び出しましょう。

3行目では、@app.get("/")というデコレータを使用して、ルートエンドポイント("/")に対するGETリクエストを定義しています。デコレータは、関数の前後に追加の処理を挿入するための特殊な記述方法です。

4-5行目では、helloという関数を定義しています。この関数は、上記のルートエンドポイントが呼び出された際に実行され、{"message": "Hello,World"}というレスポンスを返します。

以上の手順で、簡単なAPIが完成です。

ターミナルにコマンドを入力する

完成したAPIの動作確認をするために、ターミナルかコマンドプロンプトを起動します。以下のコマンドを入力してください。

uvicorn main:app --reload

このコマンドは、先ほど作成した「main.py」の中の「app」インスタンスを起動するためのものです。末尾の「–reload」オプションは、main.pyのコードが変更された際にサーバを自動的に再起動するためのものです。

実行すると、ターミナルに「http://127.0.0.1:8000」と表示されます。このURLをWebブラウザに入力して、APIの動作を確認してください。正しく動作していれば、いかのように指定したレスポンスが表示されます。

FastAPIの特徴である「ドキュメントの自動生成」を利用するには、上記のURLの末尾に/docsを追加してアクセスします。これにより、自動生成されたAPIのドキュメントを確認することが可能です。

API を呼び出すために、src下に test.pyを作成する

APIの動作が確認できたら、プログラムから呼び出します。

「main.py」を作成した同じフォルダに、「test.py」というファイル名で下記プログラムを書いてください。

import requests
import json
def main():
    url = 'http://127.0.0.1:8000/' # 先ほどターミナルに出力されたURL
    message = 'API呼び出しの結果はこちらです:'

    # ここでAPIを呼び出しています。
    res = requests.get(url)
    print(message +json.dumps(res.json()))

if __name__ == '__main__':
    main()

APIを公開した際には、このようにプログラムから呼び出されることになります。

FastAPIを起動しよう

呼び出し元のプログラムも完成しました。先ほどのAPIの動作確認を行ったターミナルは開いたまま、別ターミナルを起動して「python test.py」と入力してください。

test.pyが起動され、その中からAPIが呼び出されます。出力結果は、以下の通りです。

「API呼び出しの結果はこちらです:{"message": "Hello,World"}」

FastAPIを使ってAPIを効率的に作成しよう

本記事ではFastAPIのインストールやサーバーの立ち上げ、API本体の作成と呼び出し元プログラムの作成について解説しました。

API開発に必要な機能がそろっており、非常に高速で動作するFastAPIは、API開発において優先的な選択肢となります。本記事を参考に、さらにいろいろな機能や使い方を公式チュートリアルで学習してください。

アクセスランキング 人気のある記事をピックアップ!

    コードカキタイがオススメする記事!

    1. 子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      2024.01.26

      子供におすすめのプログラミングスクール10選!学習メリットや教室選びのコツも紹介

      #プログラミングスクール

    2. 【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      2022.01.06

      【完全版】大学生におすすめのプログラミングスクール13選!選ぶコツも詳しく解説

      #プログラミングスクール

    3. 【未経験でも転職可】30代におすすめプログラミングスクール8選!

      2024.01.26

      【未経験でも転職可】30代におすすめプログラミングスクール8選!

      #プログラミングスクール

    4. 初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      2024.01.26

      初心者必見!独学のJava学習方法とおすすめ本、アプリを詳しく解説

      #JAVA

    5. 忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      2024.01.26

      忙しい社会人におすすめプログラミングスクール15選!失敗しない選び方も詳しく解説

      #プログラミングスクール

    1. 【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      2022.01.06

      【無料あり】大阪のおすすめプログラミングスクール14選!スクール選びのコツも紹介

      #プログラミングスクール

    2. 【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      2024.01.26

      【目的別】東京のおすすめプログラミングスクール20選!スクール選びのコツも徹底解説

      #プログラミングスクール

    3. 【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【無料あり】福岡のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    4. 【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      2024.01.26

      【徹底比較】名古屋のおすすめプログラミングスクール13選!選び方も詳しく解説

      #プログラミングスクール

    5. 【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      2024.01.26

      【徹底比較】おすすめのプログラミングスクール18選!失敗しない選び方も徹底解説

      #プログラミングスクール