Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
tRPCの紹介
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yohei Iino
June 06, 2023
Technology
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
tRPCの紹介
tRPCの紹介
Yohei Iino
June 06, 2023
More Decks by Yohei Iino
See All by Yohei Iino
1年半放置したExpo製アプリを最新化してみた
wheatandcat
0
120
作成中のFlutterアプリの中間発表
wheatandcat
0
97
最近読んだ技術書を簡単紹介
wheatandcat
0
120
ユニバーサルリンク/アプリリンクを使ってQRコードでゲストログインできるようにする
wheatandcat
0
390
Firebase App Checkを実装したので紹介
wheatandcat
0
360
PlanetScaleの無料プランがなくなるので、NeonとTiDBを試してみた
wheatandcat
0
440
Flutter HooksとRiverpodの解説
wheatandcat
0
610
T3 Stack(応用編: Next Auth & SSRの実装紹介)
wheatandcat
1
420
App Routerの紹介
wheatandcat
0
170
Other Decks in Technology
See All in Technology
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
250
The kernel report
ennael
PRO
1
150
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
380
Harness Engineering on Rails
joelq
0
760
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
190
手を動かして実感する、Kiro が変える開発体験
inariku
0
420
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
260
形式手法を使って仕様をコーディングしよう
mikanichinose
0
140
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
480
プラットフォームを「作る」、 チームに「入り込む」
sansantech
PRO
0
400
猫でもわかるKiro Web
kentapapa
1
160
AI coding 整合正規方法
philipz
0
580
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Between Models and Reality
mayunak
4
470
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Building AI with AI
inesmontani
PRO
1
1.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
290
Practical Orchestrator
shlominoach
192
12k
Navigating Weather and Climate Data
rabernat
0
540
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
KATA
mclloyd
PRO
35
16k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
240
Transcript
tRPC の紹介 Press Space for next page
自己紹介 📝 飯野陽平(wheatandcat ) 🏢 法人設立(合同会社UNICORN 代表社員) 💻 Work: シェアフル株式会社CTO
📚 Blog: https://www.wheatandcat.me/ 🛠 今までに作ったもの memoir ペペロミア MarkyLinky Atomic Design Check List
tRPC とは? スキーマやコード生成なしで型安全なAPI の連携が行えるPRC フレームワーク 比較対象としては、GraphQL やOpenAPI などの技術に該当 TypeScript に特化しており、非常にシンプルに実装できる
BFF として利用されることも多い
そもそもRPC とは? RPC ( Remote Procedure Call ) とは、ネットワークで繋がっている別のコンピュータのプログラムを実行 できるようにする技術
クライアント側からサーバー側への疎通を行う際に、具体的な通信手段やプロトコルを意識することな く、関数の呼び出しを行うことがでやり取りが行える仕組み Google が開発したRPC のプロトコルなので、gRPC という命名になっている tRPC のt はTypeScript を表している
学ぶモチベーション OpenAPI やGraphQL だとスキーマ定義が必須でコード以外の実装が入りファットになりがち またフロントエンド側を型安全にするためには、さらに別途でコード生成の対応が必要 気軽にかつ型安全を保ちながらAPI を実装したい なので、tRPC を使ってみた
サーバー側の実装 参考: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);
クライアント側の実装(スクリプト) 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); });
クライアント側の実装(スクリプト) コードでは以下のように補完が表示される
クライアント側の実装(React) 公式でHooks が提供されているので使用して実装 https://trpc.io/docs/reactjs/setup
クライアント側の実装(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> );
クライアント側の実装(React) ▪ Page.tsx import { trpc } from "./utils/trpc"; export
default function IndexPage() { const userQuery = trpc.helloWorld.useQuery(); return <div>{userQuery.data}</div>; }
デモ: 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
補足: Deno + tRPC を試す ▪ GitHub https://github.com/wheatandcat/deno-trpc-demo モチベーション 何だかんだでTypeScript
をデプロイするのが面倒だったので、Deno で行けたら1 つで全て済むと思 って試してみた 結果 tRPC の実装はできるけど、Deno で実装したファイルをimport できるのはDeno のみなので、結果フ ロントエンドもDeno で実装する必要がある こうなってくると旨味が薄れるので、まだ実用段階ではなかったなという感想
補足: 手軽にtRPC を試すならCreate T3 App がおすすめ T3 Stack のdemo アプリを簡単に作成できる
フロントエンド界隈で新しく提唱されているT3 Stack について調べてみた 実行方法は以下を参照 Introduction • Create T3 App
まとめ コードジェネートして型安全をする方法に慣れきっていたが、tRPC はコードジェネートしなくても型安 全が実現できるので手軽感がかなりある TypeScript 周りのツールも大分充実してきて書きやすいので、tRPC を使っていくのも全然有り BFF 構成なら、GraphQL より筋が良さそう
ご清聴ありがとうございました 🎉