Slide 1

Slide 1 text

tRPC入門 フロントもバックもTypeScriptならtRPCでスキーマ定義して最高の開発体験を 手に入れよう 2024/05/09 kansai.ts#6

Slide 2

Slide 2 text

いづりょー #EngineeringManager #SoftwareEngineer #React #TypeScript #Rust入門中 #Sprocket #Web接客 X → @is_ryo bsky → @is-ryo.bsky.social

Slide 3

Slide 3 text

今日は tRPC について話します

Slide 4

Slide 4 text

※tRPC@11-RCのバージョンでのお話に なります

Slide 5

Slide 5 text

tRPCとは? ● tRPCとは、TypeScript Remote Procedure Callの略 ● REST APIやGraphQLの代替として注目されている ● ただし、フロントエンドとバックエンドともにTypeScriptを採用する必要がある ○ 実装言語、フレームワークの自由度が無い ● サーバサイドで定義した関数の引数と戻り値がクライアントサイドに自動で共有さ れる ○ クライアントの実装で型エラーを吐いてくれるので、型安全な実装ができる ● バックエンドで関数を定義して、クライアントで呼ぶだけで良い

Slide 6

Slide 6 text

なぜtRPCなのか? ● APIのスキーマ定義としてよく利用されるOpenAPIやGraphQLは何かし らの定義ファイルを間に用意して、フロントとバックでそれぞれ定義ファイ ルを読み込んで、そこから型情報などを生成する ● ただこの定義ファイルの取り扱いに難儀することがあると思う(個人的にか なり難儀している) ● tRPCではこの定義ファイルを持つ必要がなく、バックエンドのコードそのも のが定義ファイルの役割をしてくれるという代物

Slide 7

Slide 7 text

始め方はとても簡 単 ● npm init ● npm i @trpc/server zod ● touch index.ts ● npx ts-node index.ts

Slide 8

Slide 8 text

フロントで型をどう 扱うか① ※Reactで使う例 バックエンド側のAppRouter をimportして createTRPCReactの GenericsにAppRouterの typeを入れてClientを作る trpc.ts

Slide 9

Slide 9 text

フロントで型をどう 扱うか② App.tsxでProviderの設定を する。 App.tsx

Slide 10

Slide 10 text

フロントで型をどう 扱うか③ 作成したClientを使ってQuery したりMutateしたりする。 型補完が効くので、レスポンス の方やリクエストボディの型な どがすぐにわかる。嬉しい。 Index.tsx

Slide 11

Slide 11 text

フロントで型をどう 扱うか④ レスポンスの型を知りたい時は レスポンスの型を知りたい時は trpc.tsで宣言した RouterOutputsを使うことで、 レスポンスの型を取れる。 PropsにtRPCのレスポンスを 渡したいときに役立つ。嬉し い。 Child.tsx

Slide 12

Slide 12 text

これでtRPCを利用できる状態になった

Slide 13

Slide 13 text

なったけど……

Slide 14

Slide 14 text

認証の仕組みは必須だよね? だから調べてみた

Slide 15

Slide 15 text

Tokenで認証した い① middlewareを使って認証す ることができる。 こんな風にContextHandler を作って→ context.ts

Slide 16

Slide 16 text

Tokenで認証した い② middlewareを使って認証す ることができる。 Router起動するところで middlewareに指定する→ ※このときExpressのアダプ ターを使わないといけないので 注意。 index.ts

Slide 17

Slide 17 text

Tokenで認証した い③ 個別に認証を走らせたい場合 は、procedureを別で用意す ることもできる。 Contextでheaderの値を procedureに渡すようにして→ context.ts

Slide 18

Slide 18 text

Tokenで認証した い④ 認証をするためのprocedure を作成して、Routerでこの authProcedureを使うことで、 そのエンドポイントでは認証を することができる trpc.ts

Slide 19

Slide 19 text

Tokenで認証した い⑤ フロントからのリクエストヘッ ダーにTokenを入れたい場合 は、trpcClientを作るところで headersにTokenを入れるよう にできる。 App.tsx

Slide 20

Slide 20 text

まとめ ● tRPCを使うとスキーマファイルの管理から解放される ● ただフロントもバックもTSであることという制約がある ● 最近フロントもバックもTSでいいのでは?という派閥があるので、その派 閥の方々には特におすすめしたい ● React用のエコシステムが整備されているので、とても導入しやすい ● tRPCを動かす環境ごとにアダプターが用意されている ○ ExpressとかNextとかとか

Slide 21

Slide 21 text

Thanks!!!