Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
tRPC入門
Search
is_ryo
May 09, 2024
Technology
1
240
tRPC入門
is_ryo
May 09, 2024
Tweet
Share
More Decks by is_ryo
See All by is_ryo
Unknownのことをちゃんと知りたい_関西フロントエンド忘年会
[email protected]
× KINTOテクノロジーズ
is_ryo
0
18
TypeScriptでWebAssemblyに入門しよう
is_ryo
0
250
Honoが良さそう🔥
is_ryo
1
1.1k
LambdaのNodejsをアップデートしたら困った話
is_ryo
2
1.3k
頑張らないオレオレVuex規約を作った話
is_ryo
4
2.7k
AppSyncで始めるGraphQL
is_ryo
1
600
Other Decks in Technology
See All in Technology
AIにおけるソフトウェアテスト_ver1.00
fumisuke
1
340
Global Azure2025(GitHub Copilot ハンズオン)
tomokusaba
0
210
白金鉱業Meetup_Vol.18_生成AIはデータサイエンティストを代替するのか?
brainpadpr
4
230
Azure Maps Visual in PowerBIで分析しよう
nakasho
0
190
2025-04-14 Data & Analytics 井戸端会議 Multi tenant log platform with Iceberg
kamijin_fanta
0
180
時間がないなら、つくればいい 〜数十人規模のチームが自律性を発揮するために試しているいくつかのこと〜
kakehashi
PRO
11
880
エンジニアリングで組織のアウトカムを最速で最大化する!
ham0215
1
280
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
190
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
8
2.1k
社会人力と研究力ー博士号をキャリアの武器にするー
kentaro
2
100
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
3
540
Oracle Cloud Infrastructure:2025年4月度サービス・アップデート
oracle4engineer
PRO
0
330
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
How to train your dragon (web standard)
notwaldorf
91
6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
690
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
A better future with KSS
kneath
239
17k
The Cost Of JavaScript in 2023
addyosmani
49
7.8k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Transcript
tRPC入門 フロントもバックもTypeScriptならtRPCでスキーマ定義して最高の開発体験を 手に入れよう 2024/05/09 kansai.ts#6
いづりょー #EngineeringManager #SoftwareEngineer #React #TypeScript #Rust入門中 #Sprocket #Web接客 X →
@is_ryo bsky → @is-ryo.bsky.social
今日は tRPC について話します
※tRPC@11-RCのバージョンでのお話に なります
tRPCとは? • tRPCとは、TypeScript Remote Procedure Callの略 • REST APIやGraphQLの代替として注目されている •
ただし、フロントエンドとバックエンドともにTypeScriptを採用する必要がある ◦ 実装言語、フレームワークの自由度が無い • サーバサイドで定義した関数の引数と戻り値がクライアントサイドに自動で共有さ れる ◦ クライアントの実装で型エラーを吐いてくれるので、型安全な実装ができる • バックエンドで関数を定義して、クライアントで呼ぶだけで良い
なぜtRPCなのか? • APIのスキーマ定義としてよく利用されるOpenAPIやGraphQLは何かし らの定義ファイルを間に用意して、フロントとバックでそれぞれ定義ファイ ルを読み込んで、そこから型情報などを生成する • ただこの定義ファイルの取り扱いに難儀することがあると思う(個人的にか なり難儀している) • tRPCではこの定義ファイルを持つ必要がなく、バックエンドのコードそのも
のが定義ファイルの役割をしてくれるという代物
始め方はとても簡 単 • npm init • npm i @trpc/server zod
• touch index.ts • npx ts-node index.ts
フロントで型をどう 扱うか① ※Reactで使う例 バックエンド側のAppRouter をimportして createTRPCReactの GenericsにAppRouterの typeを入れてClientを作る trpc.ts
フロントで型をどう 扱うか② App.tsxでProviderの設定を する。 App.tsx
フロントで型をどう 扱うか③ 作成したClientを使ってQuery したりMutateしたりする。 型補完が効くので、レスポンス の方やリクエストボディの型な どがすぐにわかる。嬉しい。 Index.tsx
フロントで型をどう 扱うか④ レスポンスの型を知りたい時は レスポンスの型を知りたい時は trpc.tsで宣言した RouterOutputsを使うことで、 レスポンスの型を取れる。 PropsにtRPCのレスポンスを 渡したいときに役立つ。嬉し い。
Child.tsx
これでtRPCを利用できる状態になった
なったけど……
認証の仕組みは必須だよね? だから調べてみた
Tokenで認証した い① middlewareを使って認証す ることができる。 こんな風にContextHandler を作って→ context.ts
Tokenで認証した い② middlewareを使って認証す ることができる。 Router起動するところで middlewareに指定する→ ※このときExpressのアダプ ターを使わないといけないので 注意。 index.ts
Tokenで認証した い③ 個別に認証を走らせたい場合 は、procedureを別で用意す ることもできる。 Contextでheaderの値を procedureに渡すようにして→ context.ts
Tokenで認証した い④ 認証をするためのprocedure を作成して、Routerでこの authProcedureを使うことで、 そのエンドポイントでは認証を することができる trpc.ts
Tokenで認証した い⑤ フロントからのリクエストヘッ ダーにTokenを入れたい場合 は、trpcClientを作るところで headersにTokenを入れるよう にできる。 App.tsx
まとめ • tRPCを使うとスキーマファイルの管理から解放される • ただフロントもバックもTSであることという制約がある • 最近フロントもバックもTSでいいのでは?という派閥があるので、その派 閥の方々には特におすすめしたい • React用のエコシステムが整備されているので、とても導入しやすい
• tRPCを動かす環境ごとにアダプターが用意されている ◦ ExpressとかNextとかとか
Thanks!!!