メインコンテンツへスキップ
バージョン: 11.x

コンセプト

非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

RPCとは?どのような考え方を持つべきか?

単なる関数呼び出し

RPCは「Remote Procedure Call(リモートプロシージャコール)」の略称です。あるコンピュータ(サーバー)上の関数を別のコンピュータ(クライアント)から呼び出す手法を指します。従来のHTTP/REST APIではURLを呼び出してレスポンスを受け取りますが、RPCでは関数を直接呼び出して結果を得ます。

ts
// HTTP/REST
const res = await fetch('/api/users/1');
const user = await res.json();
// RPC
const user = await api.users.getById({ id: 1 });
ts
// HTTP/REST
const res = await fetch('/api/users/1');
const user = await res.json();
// RPC
const user = await api.users.getById({ id: 1 });

tRPC(TypeScript Remote Procedure Call)はTypeScriptモノレポ向けに設計されたRPCの実装の一つです。独自の特徴を持ちつつも、本質的にはRPCの考え方に基づいています。

HTTP/RESTの実装詳細は考えなくてよい

tRPCアプリのネットワークトラフィックを観察すると、標準的なHTTPリクエストとレスポンスであることがわかります。しかし、アプリケーションコードを書く際にはこれらの実装詳細を考える必要はありません。単に関数を呼び出すだけで、tRPCが残りのすべてを処理します。HTTP動詞のような詳細は無視して構いません。なぜなら、それらはREST APIでは重要な意味を持ちますが、RPCでは代わりに関数名の一部として表現されるからです。例えば、GET /users/:idではなくgetUser(id)のようにします。

用語集

以下にtRPCエコシステムで頻繁に使用される用語を紹介します。ドキュメント全体でこれらの用語を使用しますので、慣れておくことをお勧めします。これらの概念のほとんどには、ドキュメント内で個別の解説ページが用意されています。

用語説明
Procedure ↗APIエンドポイント - querymutationsubscriptionのいずれかを指します。
Queryデータを取得するprocedureです。
Mutationデータの作成・更新・削除を行うprocedureです。
Subscription ↗永続的な接続を確立し変更を監視するprocedureです。
Router ↗共通の名前空間下にprocedures(および他のルーター)をまとめた集合体です。
Context ↗すべてのprocedureがアクセス可能なデータ。セッション状態やデータベース接続などで一般的に使用されます。
Middleware ↗procedureの前後にコードを実行できる関数。contextの変更が可能です。
Validation ↗「入力データは正しい形式か?」