見出し画像

【TECH連載】Python Webフレームワーク FastAPIについて

【TECH連載】では当社エンジニアによるテック関連の情報を中心に記事をお届けします。

こんにちは、AICROSS開発チームの鈴木です。

AI CROSSでは、昨年、"HYOUMAN BOX"という、各個人のヒューマンスキルと組織カルチャーを可視化し、最適な採用・配置・育成の意思決定を支援する、HRTechサービスをリリースしました。

今回は、本サービスの開発で利用したPython Webフレームワーク FastAPIについて書いてみようと思います。

FastAPIとは

Python Webフレームワークとしては、Django, Flaskなどが有名ですが、FastAPIも2018年にリリースされて以来、ぐいぐい人気が上がっているフレームワークです。

HYOUMAN BOXでは、バックエンド開発において、以下の理由でFastAPIを採用しています。

・直感的にコードが書ける
・公式サイトのドキュメントが充実している
・APIとして軽量で高速なフレームワークである
・OpenAPIドキュメント生成機能により開発時のデバッグが効率化できる (ちなみに、フロントエンド側ではopenapi-generator によるコード自動生成を利用しています)

とにかく書きやすくて、生産性の高いフレームワークです。

動かしてみる

ちょっと動かしてみるだけで、FastAPIの生産性の高さがわかります。
まずpython3.6以上の環境でインストール

% pip install fastapi uvicorn

とりあえず下記のようなコードを書いてみます。

このコード例はパスパラメータのgift_idとGETパラメータのmessageの内容をレスポンスで返却するコードになります。

gift.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/gifts/{gift_id}")
def get_gift(gift_id: int, message: str = None):
   return { "gift_id": gift_id, "message": message }

そして実行

% uvicorn gift:app --reload

これでもう

GET http://localhost:8000/gifts/<ギフトID>?message=<メッセージ>

のAPIができています!

FastAPIでは、関数に(上記のサンプルコードでの@app.getのような)デコレータを付けることでAPIを処理する関数と認識され、パスパラメータとGETクエリ文字列を関数の引数にセットしてくれるため、わかりやすく直感的な記述になっています。

curlでコールしてみると、動作が確認できます。

% curl "http://localhost:8000/gifts/40?message=Congratulations"
{"gift_id":40,"message":"Congratulations"}

{"gift_id":40,"message":"Congratulations"} というAPI出力が得られています。

この時点で、APIドキュメントも自動生成できます。
ブラウザで http://localhost:8000/docs を開くと、下記のようなAPIドキュメントが出力されます。

画像1

しかも、この画面の[Try it out]ボタンをクリックすると、APIの動作テストが開始できます。

画像2

[Execute]ボタンで実際にAPIが実行され、結果が出力されます。

本番ではAPIドキュメント出力機能はオフにしますが、開発時のデバッグには超便利!

別フォーマット(見た目がイケてて人気)のReDocドキュメントも http://localhost:8000/redocにて出力してくれます。

画像3


FastAPIでは、型のチェックも可能です。

先ほど作ったAPIでは gift_idの型はint(整数)でしたが、この引数にわざと文字列("aaa")を入れて、curlでコールすると、

% curl "http://localhost:8000/gifts/aaa"
{"detail":[{"loc":["path","gift_id"],"msg":"value is not a valid integer","type":"type_error.integer"}]}

こんな感じでエラー出力してくれます。HTTPステータスコードは422が出力されます。

その他、様々なパターンのパラメータ検証が可能で、公式ドキュメント(https://fastapi.tiangolo.com/ja/tutorial/query-params-str-validations/)に詳しく掲載されています。

いろいろ便利なFastAPI

ちょっと動かしただけでもその素晴らしさがわかるFastAPIですが、
何より素晴らしいのが公式ドキュメントの充実です。

Webアプリケーション開発で出くわす色々な場面、例えば、

CORSの対処 (とっても簡単!)
認証周りの実装方法

などいろいろなシチュエーションに合わせたチュートリアルが公式サイトに載っています。

また、フロントエンドと合わせたフルスタックなプロジェクトを生成してくれるジェネレーターもあり、良いお手本になります。

使ってみてどうだったか

やはりフレームワークの使いやすさは評判通りで、短い期間でテンポよく各機能の実装を進めることができました。

認証やCORS対応など面倒になりがちなところも少ないコードでスッと書けて、より本質的な部分の実装に集中することができました。

Pythonには他にもChaliceなど面白いフレームワークは色々ありますが、FastAPIは、書きやすさ・性能等すべてにおいてバランスがとれているので、今後も積極的にFastAPIを使っていきたいなと思いました。

今回は、モダンで開発者フレンドリーなFastAPIの魅力を、ほんの少しだけ紹介させていただきました。
まだまだ語りきれない魅力があるので、詳細は、ぜひFastAPIの公式サイトをご覧ください。

おわりに

AI CROSSでは、次々に登場する新しい技術やフレームワークも活用しながら、Smart Work, Smart Lifeの実現に向けて、日々SaaSサービスの開発・改善に取り組んでいます。

これからもAI CROSSの活動や、利用・注目している技術の解説などを発信していこうと思います。

それでは今日はこのへんで。

この記事が気に入ったらサポートをしてみませんか?