伊藤 泰 (Yasushi Itoh)

伊藤 泰 (Yasushi Itoh)

FastAPIの魔法をgRPC/Connect RPCへ -- Pydanticモデル駆動RPC開発

ダリア1#pyconjp_2中級日本語
11:15 - 11:4530min
DAY 1
09/26
FRI

FastAPIは「Pydanticモデル+デコレータ=型安全なREST API」という魔法のような開発体験を実現し、Python Web開発に革命をもたらしました。この「型を書けば全てが自動化される」という開発体験を、gRPC/Connect RPCの世界に転写するとどうなるでしょうか?

本セッションでは、その思考実験に基づき「Pydanticによる型駆動開発」をgRPC/Connect RPCへ応用した拙作 pydantic-rpc (https://github.com/i2y/pydantic-rpc) を通じて、最新のRPC技術Pythonの型システムを橋渡しします。難解に思われがちなgRPCやConnect RPCを、FastAPIやPydanticを少し知っている程度の方ならどなたでも理解できる形で解説し、protoファイルなしで今すぐ始められる方法を実演します。

参加者が持ち帰る3点

  1. 最新RPC技術への橋渡し:gRPC/Connect RPCを、FastAPIの知識から理解する方法
  2. 実践的な始め方:protoファイル不要で、Pydanticモデルから直接RPC開発を始める手順
  3. 技術選択の指針:REST(FastAPI)とRPC、それぞれが輝く場面の見極め方

聞き手と得られるもの

  • これからgRPCを学びたいPython開発者:FastAPIの知識を活かして、最新のRPC技術にスムーズに入門できます
  • FastAPIユーザー:慣れ親しんだPydanticモデルで、マイクロサービス間通信の新しい選択肢を得られます
  • API設計に悩む開発者:REST vs RPCの実践的な使い分け基準を理解できます

トーク詳細 / Description

FastAPIは「Pydanticモデル+デコレータ=型安全なREST API」という魔法のような開発体験を実現し、Python Web開発に革命をもたらしました。この「型を書けば全てが自動化される」という開発体験を、gRPC/Connect RPCの世界に転写するとどうなるでしょうか?

本セッションでは、その思考実験に基づき「Pydanticによる型駆動開発」をgRPC/Connect RPCへ応用した拙作 pydantic-rpc (https://github.com/i2y/pydantic-rpc) を通じて、最新のRPC技術Pythonの型システムを橋渡しします。難解に思われがちなgRPCやConnect RPCを、FastAPIやPydanticを少し知っている程度の方ならどなたでも理解できる形で解説し、protoファイルなしで今すぐ始められる方法を実演します。

参加者が持ち帰る3点

  1. 最新RPC技術への橋渡し:gRPC/Connect RPCを、FastAPIの知識から理解する方法
  2. 実践的な始め方:protoファイル不要で、Pydanticモデルから直接RPC開発を始める手順
  3. 技術選択の指針:REST(FastAPI)とRPC、それぞれが輝く場面の見極め方

聞き手と得られるもの

  • これからgRPCを学びたいPython開発者:Pythonの型ヒントやFastAPI/Pydanticの知識を活かして、最新のRPC技術にスムーズに入門できます
  • FastAPIユーザー:慣れ親しんだPydanticモデルで、マイクロサービス間通信の新しい選択肢を得られます
  • API設計に悩む開発者:REST vs RPCの実践的な使い分け基準を理解できます

タイムテーブル暫定案

| 分 | 内容 | |---|---| | 0–5 | なぜ今、RPCなのか?<br>• マイクロサービス時代のAPI通信の課題<br>• FastAPIが示した「型駆動開発」の価値を振り返る | | 5–12 | ライブコーディング:FastAPIの感覚でgRPC開発<br>① おなじみのPydanticモデル定義(User, Task)<br>② pydantic-rpcでRPCサービス化(5行のコード)<br>③ 実行して動作確認(grpcurl & Pythonクライアント) | | 12–18 | 裏側で何が起きているか<br>• Pydantic→Protobuf自動変換の仕組み<br>• 型安全性がもたらす開発者体験の向上<br>• つまずきポイントと解決策の共有 | | 18–24 | 実践での使い分け<br>• いつREST?いつRPC?実例で理解する判断基準<br>• 同じPydanticモデルで両方のAPIを提供する設計パターン<br>• Connect RPCでブラウザから直接呼び出せるRPCの実現 | | 24–30 | まとめ & Q&A ―「Pythonで最新のAPI技術を使いこなすために」 |

なぜこの発表をしたいのか

gRPCは高性能で型安全なRPC技術として注目され続けていますが、「protoファイルの記述が面倒」「学習コストが高い」という理由で敬遠されがちです。Connect RPCはgRPCをWebフレンドリーにした技術ですが、やはりprotoファイルは必要です。一方で、FastAPIの登場により、多くのPython開発者が型駆動開発の恩恵を実感しています。

この二つの世界を橋渡しすることで、より多くのPython開発者が最新のRPC技術(gRPC/Connect RPC)を活用できるようになると信じています。pydantic-rpcの開発を通じて得た知見を共有し、皆さまのAPI開発選択肢の拡大に貢献できれば幸いです。


この題材を選んだ理由やきっかけ

gRPCは高性能で型安全なRPC技術として注目され続けていますが、「protoファイルの記述が面倒」「学習コストが高い」という理由で敬遠されがちです。Connect RPCはgRPCをWebフレンドリーにした技術ですが、やはりprotoファイルは必要です。一方で、FastAPIの登場により、多くのPython開発者が型駆動開発の恩恵を実感しています。

この二つの世界を橋渡しすることで、より多くのPython開発者が最新のRPC技術(gRPC/Connect RPC)を活用できるようになると信じています。pydantic-rpcの開発を通じて得た知見を共有し、皆さまのAPI開発選択肢の拡大に貢献できれば幸いです。


オーディエンスが持って帰れる具体的な知識やノウハウ

参加者が持ち帰る3点

  1. 最新RPC技術への橋渡し:gRPC/Connect RPCを、FastAPIの知識から理解する方法
  2. 実践的な始め方:protoファイル不要で、Pydanticモデルから直接RPC開発を始める手順
  3. 技術選択の指針:REST(FastAPI)とRPC、それぞれが輝く場面の見極め方

聞き手と得られるもの

  • これからgRPCを学びたいPython開発者:Pythonの型ヒントやFastAPI/Pydanticの知識を活かして、最新のRPC技術にスムーズに入門できます
  • FastAPIユーザー:慣れ親しんだPydanticモデルで、マイクロサービス間通信の新しい選択肢を得られます
  • API設計に悩む開発者:REST vs RPCの実践的な使い分け基準を理解できます

オーディエンスに求める前提知識

最低限必要な知識

  1. Pythonの基礎知識

    • 関数、クラスの基本的な書き方
    • 型ヒント(type hints)の基本的な理解
  2. Web APIの基本概念

    • HTTPリクエスト/レスポンスの仕組み
    • JSONデータのやり取り
    • REST APIが何かをざっくり理解

あると理解が深まる知識(必須ではない)

  1. FastAPIの経験(触ったことがある程度)

    • デコレータを使ったエンドポイント定義
    • 自動ドキュメント生成を見たことがある
  2. Pydanticの基礎(使ったことがある程度)

    • BaseModelを継承したクラス定義
    • バリデーションが自動で行われることを知っている
  3. RPC(Remote Procedure Call)の概念

    • 知らなくても、セッション内で説明予定

明示的に不要な知識

  • gRPC/Connect RPCの経験(これから学ぶ人が対象)
  • protoファイルの書き方
  • マイクロサービスアーキテクチャの詳細
伊藤 泰 (Yasushi Itoh)

伊藤 泰 (Yasushi Itoh)

プロフィール

2023年より株式会社MonotaRO にて開発者体験の向上に取り組む。現在は、現場と基盤の「橋渡し役」として、ソフトウェア開発の知見を、協働の仕組みづくりに応用し、Internal Developer Platform(IDP)の設計とインナーソース文化の醸成を推進している。

Python OSS文脈では、過去にPython VMで動作する言語開発PyCon APAC 2022 登壇 を行っており、最近は今回のトーク内容とも関係する PythonのConnect RPC実装 の開発を行っている。