Upgrade to Pro — share decks privately, control downloads, hide ads and more …

tRPCの紹介

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 tRPCの紹介

tRPCの紹介

Avatar for Yohei Iino

Yohei Iino

June 06, 2023
Tweet

More Decks by Yohei Iino

Other Decks in Technology

Transcript

  1. 自己紹介 📝 飯野陽平(wheatandcat ) 🏢 法人設立(合同会社UNICORN 代表社員) 💻 Work: シェアフル株式会社CTO

    📚 Blog: https://www.wheatandcat.me/ 🛠 今までに作ったもの memoir ペペロミア MarkyLinky Atomic Design Check List
  2. そもそもRPC とは? RPC ( Remote Procedure Call ) とは、ネットワークで繋がっている別のコンピュータのプログラムを実行 できるようにする技術

    クライアント側からサーバー側への疎通を行う際に、具体的な通信手段やプロトコルを意識することな く、関数の呼び出しを行うことがでやり取りが行える仕組み Google が開発したRPC のプロトコルなので、gRPC という命名になっている tRPC のt はTypeScript を表している
  3. サーバー側の実装 参考:quickstart import { createHTTPServer } from "@trpc/server/adapters/standalone"; import {

    initTRPC } from "@trpc/server" const t = initTRPC.create(); const appRouter = t.router({ helloWorld: t.procedure.query(() => { return "Hello World"; }), }); export type AppRouter = typeof appRouter; const server = createHTTPServer({ router: appRouter, }); server.listen(8000);
  4. クライアント側の実装(スクリプト) import { createTRPCProxyClient, httpBatchLink } from "@trpc/client"; import type

    { AppRouter } from "./server"; const trpc = createTRPCProxyClient<AppRouter>({ links: [ httpBatchLink({ url: "http://localhost:3000", }), ], }); trpc.helloWorld.query().then((res) => { // output "Hello World" console.log(res); });
  5. クライアント側の実装(React) ▪ containers/Trpc.tsx import { useState } from "react"; import

    { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { httpBatchLink } from "@trpc/client"; import { trpc } from "../utils/trpc"; type Props = { children: React.ReactNode; }; function Trpc(props: Props) { const [queryClient] = useState(() => new QueryClient()); const [trpcClient] = useState(() => trpc.createClient({ links: [ httpBatchLink({ url: "http://localhost:8080", }), ], }) ); return ( <trpc.Provider client={trpcClient} queryClient={queryClient}> <QueryClientProvider client={queryClient}> {props.children} </QueryClientProvider> </trpc.Provider> );
  6. クライアント側の実装(React) ▪ Page.tsx import { trpc } from "./utils/trpc"; export

    default function IndexPage() { const userQuery = trpc.helloWorld.useQuery(); return <div>{userQuery.data}</div>; }
  7. デモ: React + tRPC + Prisma で実装 ▪ GitHub https://github.com/wheatandcat/tRPC-demo/tree/main/trpc-react-prisma

    デモを見せながらコードを解説 Prisma でDB の定義を行う server/prisma/schema.prisma tRPC とPrisma の連携 server/src/router.ts React との連携 client/src/Page.tsx
  8. 補足: Deno + tRPC を試す ▪ GitHub https://github.com/wheatandcat/deno-trpc-demo モチベーション 何だかんだでTypeScript

    をデプロイするのが面倒だったので、Deno で行けたら1 つで全て済むと思 って試してみた 結果 tRPC の実装はできるけど、Deno で実装したファイルをimport できるのはDeno のみなので、結果フ ロントエンドもDeno で実装する必要がある こうなってくると旨味が薄れるので、まだ実用段階ではなかったなという感想
  9. 補足: 手軽にtRPC を試すならCreate T3 App がおすすめ T3 Stack のdemo アプリを簡単に作成できる

    フロントエンド界隈で新しく提唱されているT3 Stack について調べてみた 実行方法は以下を参照 Introduction • Create T3 App