#author("2023-03-13T09:04:35+00:00","default:admin","admin") #author("2023-03-13T09:04:53+00:00","default:admin","admin") [[tRPC:https://trpc.io/]] -[[tRPCの記事 - Zenn:https://zenn.dev/topics/trpc]] -[[ふんわりざっくり大味で gRPC と tRPC の雰囲気を知る:https://zenn.dev/suzuki_hoge/articles/2022-10-grpc-and-trpc-28d3ee273d3dc9]] -[[trpcって知ってますか?:https://zenn.dev/is_ryo/articles/08a9710d9f6ee2]] -[[tRPCとは?TypeScriptでAPIの型安全性を高める注目のRPCフレームワーク:https://tsd.mitsue.co.jp/blog/2022-09-30-what-is-tRPC/]] -[[tRPC これから流行るかもしれないBFFフレームワークの紹介 |Offers Tech Blog:https://zenn.dev/offers/articles/20221020-intro-trpc]] -[[tRPCを動かしてtRPCはどのようなことができるか理解する:https://reffect.co.jp/react/trpc-basic]] -[[tRPC で TODO アプリを作る:https://qiita.com/hitakeuc/items/1e9e132eb1a44256ff1d]] -[[ミニマムで安心の開発環境(tRPC, prisma, turborepo):https://zenn.dev/poteitoo/articles/f220f0e400d098]] -[[T3を支えるTypeScriptのエコシステムと”Typesafe”というAxiom @Quramy:https://techfeed.io/entries/63e213c7e509ce20fb829e30]] *基本事項 [#ie28efb1] -[[ちまたで噂の tRPCとは。:https://qiita.com/yoshii0110/items/c01f2d9e98a1ce575512]] -[[ふんわりざっくり大味で gRPC と tRPC の雰囲気を知る:https://zenn.dev/suzuki_hoge/articles/2022-10-grpc-and-trpc-28d3ee273d3dc9]] **RPC [#y02c09f1] -リモートプロシージャコール の略で、遠隔手続き呼び出しなどと呼ばれるプロトコル、規約のことを指す -RPC では、あるコンピュータからネットワーク越しに別のコンピュータで動作するプログラムをプログラム中の手続きや関数、メソッドなどを呼び出すのと同じ手順で呼び出すものであり、呼び出し時にネットワークレイヤを意識することなく抽象化したものと言える -ネットワーク上で双方で RPC による通信をするために通信規約として RPC プロトコルが定められている -RPC でやり取りをする際のデータフォーマットというのは、いくつかあり、例えば、メッセージを XML で記述する XML-RPC や JSON で記述する JSON-RPC などがある -RPC でやり取りする際に バイナリ形式だとデータの取り扱いが大変だったり、テキストベースのプロトコルだと通信における転送効率が良くないという問題があった **gRPC [#bfd848c8] -そこで登場したのが、gRPC -gRPC は、Googleが開発したRPC 実現のためのプロトコル -gRPC を使うと IDL を使い API 仕様をファイルとし定義でき、そこからサーバーとクライアントに必要なソースコードのひな形を生成することができる -Protocol Buffers を使いデータをシリアライズし、高速な通信を実現できる **tRPC [#be1f10d7] -tRPC は、gRPC のように スキーマを作成し、Protocol Buffers のようにバイナリベースのプロトコルでかつデータをシリアライズし高速化を目指すとかではない -クライアントとサーバーの間で型を直接共有できるための RPC フレームワーク ***特徴 [#zd869735] -TypeScript 限定 (Web や React Native 等での利用が想定されている) -軽量 (公式ページによると 🍃 Light - tRPC has zero deps and a tiny client-side footprint.) -学習コストが低い -GraphQL や gRPC ではクライアント / サーバー間の API 通信を行うために独自のクエリで API を定義する必要がありますが、tRPC ではそのようなことは不要です。そのためサクッと実装することができ、開発体験が非常に良いです。 -ではどのようにしてクライアント・サーバー間で型安全な API 通信を実現しているかというと、具体的には tRPC ではサーバー側で実装した router モジュールの型をエクスポートして、クライアント側で利用します。 ***比較 [#x1e87890] -[[tRPC vs GraphQL: How to choose the best option for your next project:https://cleancommit.io/blog/trpc-vs-graphql-how-to-choose-the-best-option-for-your-next-project/]] -[[Can you compare GraphQL and tRPC?:https://hackteam.io/blog/compare-graphql-and-trpc]] -[[GraphQL の力による tRPC のシンプルさ:https://hackernoon.com/ja/grafql-%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E5%82%99%E3%81%88%E3%81%9F-trpc-%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%95]] *事例 [#ta26ea1b] -[[tRPCを導入したら爆速でWebサービスをリリースできた話:https://zenn.dev/praha/articles/encouragement-trpc]] *関連ライブラリ [#q38dfa8b] **[[zod:https://github.com/colinhacks/zod]] [#n37af008] -zodはTypeScriptによるスキーマの定義と、それをもとにバリデーションができるライブラリ -tRPCではそのスキーマを使用してリクエストを定義します。型が一致しているかはもちろん、詳細なバリデーションもスキーマファーストで行えるため、バリデーションを忘れていないか?変な値がリクエストされてないか?と不安にならずにすみます。 **[[Zodios:https://www.zodios.org/]] [#x963d282] -[[Zod のスキーマが使えるAPIクライアントZodios を紹介したい:https://oisham.hatenablog.com/entry/2022/09/14/210857]]