【Python】@app.get()とは?使い方や引数のオプション、活用シーンまで徹底解説!

B!

PythonでWebアプリケーションを構築する際に、APIエンドポイントの定義に便利なのが @app.get() デコレーターです。

特に FastAPI で使用されるこの構文は、HTTP GET リクエストを受け取るルーティングを簡潔に定義できるという特徴があります。

この記事では、@app.get() の基本的な意味から使い方、引数のオプション、活用シーン、注意点までをわかりやすく丁寧に解説します。

@app.get とは?

@app.get() は、「このURLにアクセスされたら、この関数を実行してください」 というルールを作るための仕組みです。

Webアプリは、ブラウザやアプリから送られてくるリクエストを受け取り、その内容に応じて処理を返します。

@app.get() を関数の直前に書いておくと、その関数は HTTP GETリクエスト専用の入り口 になります。

たとえば「住所を指定したらその場所にあるお店を案内する地図アプリ」のように、

「このURL(住所)にアクセスされたら、この処理を実行」という道しるべを作るイメージです。

基本の使い方

FastAPIでの最も基本的な使い方は以下の通りです。

このコードの意味は次の通りです:

  • app = FastAPI():FastAPIのアプリケーションインスタンスを作成
  • @app.get("/"):ルートパス(/)へのGETリクエストが来たら read_root() を呼び出す
  • return された値がJSONとしてレスポンスになる

このように非常に簡潔な構文でAPIサーバーが構築できます。

具体例①:クエリパラメータの利用

この例では /items/?q=example のように q というクエリパラメータを受け取って、その値を返しています。

read_item 関数の引数 q: str = None が、クエリパラメータを受け取る部分です。

例えば /items/?q=example にアクセスすると、q には "example" という文字列が入ります。

もしクエリパラメータが指定されなければ、デフォルトの None になります。

つまり

  • q: str = None → URLから渡された q というキーの値を受け取る
  • return {"q": q} → 受け取った値をそのままレスポンスとして返す

という流れになっています。

具体例②:パスパラメータの利用

このようにURLの一部(パス)を変数として受け取り、関数内で利用することも可能です。

このコードでは @app.get("/users/{user_id}"){user_id} がパスパラメータを示しています。

アクセス例 /users/10 の場合:

  • URLの 10user_id に渡される

  • user_id: int と型を指定しているので、自動的に整数に変換される

  • 関数内で {"user_id": user_id} を返すので、結果は {"user_id": 10} になる

FastAPIが「URLの一部 {user_id} と関数の引数 user_id を自動で対応付けて」くれる仕組みです。

@app.get の主なオプション引数

@app.get() では、エンドポイントに関する色々な設定をすることができます。

「このURLで呼ばれたときにどう動くか」「ドキュメントにどう表示されるか」を調整するためのものです。

代表的なものを説明すると次の通りです。

オプション名 説明
path エンドポイントのURLパスを指定する /items/ と書けば、http://localhost:8000/items/(ローカル開発環境の場合)にアクセスしたときに関数が呼ばれます。
response_model 返すデータの「型」を指定(pydanticモデル)レスポンス形式を自動検証&ドキュメントに反映 response_model=Item
tags Swagger UI でカテゴリ分けするラベル tags=["user"] → ドキュメントで「user」カテゴリにまとめられる
summary エンドポイントの一言説明。Swagger UI の見出しに表示される summary="商品情報の取得"
description 詳しい説明。Markdown対応で箇条書きやコード例も書ける description="1つの商品情報を返します"
status_code デフォルトで返すHTTPステータスコードを指定 status_code=201 → 成功時に 201 Created を返す

以下はそれらを組み合わせた例です:

この例では response_modelsummarydescription などのオプションを同時に指定しています。

  • response_model=Item
    Item という pydanticモデル を指定しています。これにより、返すデータが必ず {"name": str, "price": float} という形式になることが保証されます。
    型が違う値を返そうとするとエラーになるので、安全で信頼性の高いAPIを作れます。

  • summary="商品情報の取得"
    → APIの概要説明で、Swagger UI の一覧に「商品情報の取得」と表示されます。

  • description="1つの商品情報を返します"
    → より詳細な説明を記載できます。Markdown対応なので改行や箇条書きも可能です。

このようにオプションを付けることで、 Swagger UI(自動生成されるドキュメント) で分かりやすいAPI仕様書が出来上がります。

開発者同士の共有や外部公開APIの設計にとても便利です。

活用シーン

@app.get() は、Web API の開発でとても多くの場面で使われます。具体的には次のようなケースです。

  • APIサーバーのGETエンドポイント実装
  • 外部サービスからのWebhookやPing応答
  • スマホアプリやフロントエンドからのデータ取得要求に応じる
  • クエリパラメータでフィルタ検索を行う
  • curlブラウザのURL入力 から直接テスト可能

このように、 シンプルにデータを取得したいときの基本構文 として使えます。

@app.get() を使うことでエンドポイントが非常に簡潔に実装でき、デバッグや保守もしやすくなります。

注意点

便利な @app.get() ですが、使うときにはいくつか気をつけるべきポイントがあります。

  • 同じURLパスに対して @app.get@app.post を混在させる場合、HTTPメソッドの違いに注意が必要です。
  • 複数のルートで同じパスやパラメータ名を使うとバッティングすることがあるため、ルーティング設計は慎重に行いましょう。
  • クエリパラメータとパスパラメータは同時に使うことも可能ですが、意図しない挙動にならないように検証が必要です。
  • 関数の戻り値は、基本的にJSONとして自動変換されます。Pythonの辞書やpydanticモデルを返すのが推奨されます。

使いやすいけど、設計を誤ると混乱しやすいので、URL設計やパラメータの扱いはきちんと整理して使うことが大切です。

まとめ

今回は主に FastAPI でよく使われる @app.get() の基本と応用について解説しました。

まとめると、次のポイントが大事です。

  • @app.get() は「GETリクエストに対応する関数を登録するための仕組み」
  • URLと処理を簡単に結びつけることができる
  • クエリパラメータやパスパラメータを受け取ることもできる
  • 返すデータの型(モデル)を指定できて、ドキュメントにも自動で反映される
  • APIの説明書(Swagger UI)が自動生成されるので、作ったAPIをすぐ確認できる

@app.get() を使えば、「このURLにアクセスしたら、この処理をする」というルールを数行で書ける ようになります。

難しい設定なしで、すぐにWeb APIを作って試せるのが大きな魅力です。

初心者の方も、まずは「@app.get() でURLと関数をつなげる」ことから始めると、Webサービス作りの流れが理解しやすくなりますよ!

最新の記事はこちらから