# Unagipy/Python駿河 勉強会 2021/03 [![hackmd-github-sync-badge](https://hackmd.io/PDLySrvvTF-aPu55oXn0dw/badge)](https://hackmd.io/PDLySrvvTF-aPu55oXn0dw) <!-- ここにコラボレーションバッジを載せる --> 開催日: 2021/03/20 20:00 開催場所: オンライン --- - [Python駿河 勉強会 #23 ~FastAPIチュートリアルを頑張る会~ - connpass](https://py-suruga.connpass.com/event/206073/) - [Unagi.py 勉強会39枚目 ~FastAPIチュートリアルを頑張る会~ - connpass](https://unagi-py.connpass.com/event/206261/) --- ## オープニング <!-- logo --> ![pysuruga logo](https://github.com/py-suruga/report/blob/main/assets/img/python-suruga_logo.png?raw=true) ![unagipy logo](https://github.com/py-suruga/report/blob/main/assets/img/unagi-py_logo.png?raw=true) --- ## 目的 - 静岡のPython使いの方々と交流 - 初学者から業務利用の方まで集まれる - コミュニティ運営で毎月何かやるのが目標 - いろんな方に入ってもらって長く続けるのも目標 --- ## 行動規範 [PyCon mini Shizuoka - 行動規範](https://shizuoka.pycon.jp/code-of-conduct/) [行動規範 - PyCon JP 2020](https://pycon.jp/2020/code-of-conduct/) - ハラスメント行為は止めましょう - 気になることがあったらスタッフに遠慮なく連絡ください - Slack DMが利用できます --- ## お子さまペットOK - お子様やペットが移ったり声が入っても気にしません - むしろワイワイやりましょう! - 映りこんではいけないものは各自でお気を付けください - 参加ハードルを下げたい試み --- ## Slackあります ぜひご参加ください - この勉強会の連絡手段はSlackを使います - ハンズオンやトーク時の質問にも利用 - 連絡に限らず、勉強会ネタや技術トピックをシェアしてます [Python駿河 Slack招待URL](https://join.slack.com/t/py-suruga/shared_invite/zt-811b9pwj-R_RbCmlTlV4B5iVKxF5gfA) [Unagi.py Slack招待URL](https://join.slack.com/t/unagi-py/shared_invite/zt-88t327i8-YHsIV~uWX313LPAaJDR9~Q) --- ## ハッシュタグ ツイッターアカウントお持ちの方はぜひ感想などつぶやきお願いします - Python駿河: [#pysuruga - Twitter検索 / Twitter](https://twitter.com/search?q=%23pysuruga&src=typed_query) - Unagi-py: [#unagipy - Twitter検索 / Twitter](https://twitter.com/search?q=%23unagipy&src=typed_query) --- ## hackmdで質問や感想募集 - 本会中の質問や感想を、hackmdで書いてもらえると助かります - (はんなりPythonのやり方をまねてる) - 勉強会の月報を作るときに資料にします - 書き込みにはログイン必要です - GitHubやSNS系でできます Python駿河 月報はこちら -> https://py-suruga.github.io --- 本日もよろしくお願いします! --- ## FastAPIチュートリアルを頑張る会 FastAPIのチュートリアルをみんなでもくもくやりながら、気が付いたところやわからないところをみんなで解決します - もくもく中に疑問になった部分があったら話すorチャットで聞いてもOK - タイミング切って振り返りを行います - 人数が多い場合は部屋(Meetで複数部屋用意) - チュートリアル中に気になった部分や疑問点をそこで話してもOK - 懇親会中にもくもくしててもOKです --- ### タイムスケジュール 多少変わってしまうと思うので 時間|内容 ---|--- 19:40|Meet開けます 20:00|開始予定 20:05|アイスブレイク(1分)スタッフ->初参加->常連さん 20:30~21:40|チュートリアルもくもく会 21:40~22:00|振り返り 22:00|終了 -> 懇親会(1時間程度) --- ## 当日資料 [FastAPI 公式サイト](https://fastapi.tiangolo.com/ja/) チュートリアル開始位置 -> [チュートリアル - ユーザーガイド - はじめに - FastAPI](https://fastapi.tiangolo.com/ja/tutorial/) FastAPIはPythonの型ヒントを扱うので、型ヒントも見ておくといいかも - 英語なので翻訳するとよさそう: [Python Types Intro - FastAPI](https://fastapi.tiangolo.com/ja/python-types/) - [2021年版Pythonの型ヒントの書き方 (for Python 3.9) | フューチャー技術ブログ](https://future-architect.github.io/articles/20201223/) ## 振り返り こちらに気になったことや疑問になった部分を書いてみましょう - FastAPIってどのぐらいFastなの?(hrsano645 - https://www.techempower.com/benchmarks/#section=data-r20&hw=ph&test=composite によると75位、Pythonのフレームワークの中では7番目の模様(takakura) - Flaskと書き方がよく似てる気がする(hrsano645 - uvicornって何? -> https://www.uvicorn.org - ASGI(Asynchronous Server Gateway Interface)というwebサーバーとアプリをつなげるための方法の一つ。非同期処理を行うので効率的っぽい - WSGI(Web Server Gateway Interface)と似てるらしい? - FastAPIの型ヒント、純粋にヒントではなくレスポンスを提示した型に合わせないとエラーになる気がするのだけど、実際のところどうなんでしょう?(dogrunjp - intとアノテーションしただけで、str送ったら https://http.cat/422 Unprocessable Entityになった。すごい(nikkie) - なるほど。 - バリデーション込みなのも嬉しい(takakura) - FastAPIの関数ブロック、async defでもdefでも動くのだけど、明確にasync defにすべきケースは何だろう?(非同期なDBアクセスを利用するときと何かで読んだけど意味がよくわからない)(dogrunjp - https://fastapi.tiangolo.com/ja/async/#in-a-hurry にまとまってますね(TL;DRの部分です)(nikkie) - 👀(hrsano645 - チュートリアルに書かれてるStarletteというライブラリがASGIのフレームワークだからってのもある?(hrsano645) - Swagger って一言で言うと何でしたっけ? (Nakai) - APIのドキュメント兼簡易実行ツール、でよいんでしたっけ?(takakura) - HackMDの編集画面、重い。私だけ...?w (Nakai) - 編集モードで見たほうが軽いかも(hrsano645) - JSONの結果をよく見るので、chromeブラウザお使いの型はJSON Viewを入れておくと便利です(hrsano645) -> https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=ja - swagger表示を停止するオプションってありますか(dogrunjp) - Errorの場合のレスポンスのスキーマは決まっているのですね(swaggerの仕様かFastAPIの仕様か不明ですが) - 普通のチュートリアルかアドバンスの方で、上書きして自分の好みなものに変えるようなセクションがあった気がします。(tmktmk) - `app = FastAPI(docs_url=None, redoc_url=None, openapi_url=None)` のような感じで消せるみたいです(nikkie) - ref: https://fastapi.tiangolo.com/tutorial/metadata/#docs-urls - JSON View使ってみました!ありがとうございます(endo) - 👍(hrsano645) - Swagger標準添付なのがすごく助かります(takakura) - いくつかのドキュメントが同梱されてるのは知らなかった(hrsano645 - 余談ですが、他の言語のフレームワークだと[ASP.NET Core Web APIもSwagger標準添付です](https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/web-api-help-pages-using-swagger?view=aspnetcore-5.0)(takakura) - https://fastapi.tiangolo.com/tutorial/path-params/#order-matters を「順番の問題」と訳しているのはプルリクチャンスですね - 「順番が重要」だと思います。read_userとread_user_meの順番が変わると大変でした(nikkie) - https://fastapi.tiangolo.com/ja/tutorial/query-params/ にもプルリクチャンス。オプショナルのクエリパラメタのコードでハイライトの行が違う(nikkie) -> Issue立てました - 大量のクエリパラメータを利用するときパラメータと関数内の変数のマッピングを苦労した記憶があるのだけど(諸々知識のない状態で)チュートリアル的には解決策あったりするのだろうか?(dogrunjp) - 「オペレーションズ」<=かっこいいw (hrsano645) - enum普段使わないから使いどころがわからない...設定値的なものの定義として使えば良いのだろうか??(dogrunjp) - OpenAPIのパスパラメータのExamleとしてEnumクラスで定義した値が表示される雰囲気。 - FastAPIはとにかくjsonをレスポンスとして返すものとして特化されているらしい(hrsano645) - Pydanticとは?(hrsano645) - https://github.com/samuelcolvin/pydantic バリデーション付きのdataclassというイメージです。チュートリアルでも登場するらしいです(nikkie) - `バリデーション付きのdataclassというイメージ`<-わかりやすい👀(hrsano645) - ドキュメントに小ネタが多いw - 普段はAPI書いてないのでたまに勘が掴めないところがあった(takakura) --- ## 次回の相談 <!-- 次回何をするか相談してこちらに入れておきます --> - LT会? - つまみ食い読書会? - Web系の何かとか