TypeScript Academy · レッスン

tRPCのアーキテクチャ

tRPCがAPIスキーマの重複をなくす仕組みを学びます。

レッスン 1/413 ステップ

「tRPCのアーキテクチャ」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

エンドツーエンドの課題

一般的な Web アプリでは、サーバーが API を定義し、クライアントがそれを呼び出します。しかし、両者の型を同期させ続けるのは困難です。サーバー上のフィールドを変更すると、クライアントが実行時まで気付かれずに壊れることがあります。tRPCは、コード生成なしで型を直接共有することで、この問題を解決します。

// Server: returns { id: number; name: string }
// Client: must know that shape exactly
// Without sync: runtime errors when they drift

tRPC とは

tRPC は、TypeScript で完全に型付けされた APIを構築するためのライブラリです。サーバーがプロシージャを定義し、クライアントはそれらをローカル関数のように呼び出せます。サーバーコードから推論された型に基づいて、完全な自動補完と型チェックを利用できます。

// Client call looks like a local function:
// const user = await client.user.byId.query(1);
// user is typed automatically from the server

コード生成なし

GraphQL や OpenAPI のワークフローとは異なり、tRPC にはコード生成のステップが不要です。コンパイルするスキーマファイルも、生成されたクライアントもありません。型は、コンパイル時の TypeScript の推論だけによってサーバーからクライアントへ伝わります。

// No .graphql files, no generated SDK
// Just import a type from the server package

ルーターが契約になる

tRPC の中心にあるのはルーターです。これはプロシージャ(クエリとミューテーション)のツリーです。サーバー上のルーターオブジェクト、特にそこから推論された型が、クライアントと共有する唯一の信頼できる情報源になります。

// appRouter (server) defines every procedure
// type AppRouter = typeof appRouter is the contract

型の共有方法

サーバーがエクスポートするのはルーターの型だけであり、実装はエクスポートしません。クライアントはその型をインポートして、プロキシクライアントの型付けに使用します。ブラウザーに配信されるサーバーコードはなく、ビルド時に消去される型だけが共有されます。

// server.ts
export type AppRouter = typeof appRouter;

// client.ts
import type { AppRouter } from '../server';

クエリとミューテーション

プロシージャには主に2種類あります。クエリはデータを読み取り、通常は冪等です。ミューテーションはデータを変更します。この違いはキャッシュやHTTPのセマンティクスに対応し、クライアントからの呼び出し方にも影響します。

// client.user.list.query()      -> read
// client.user.create.mutate(...) -> write

実行時と型

tRPCには2つの層があります。実行時には、アダプターが処理するHTTP経由のJSONとして呼び出しが行われます。コンパイル時には、共有されたAppRouter型によってすべての呼び出しが完全にチェックされます。実行時の仕組みは薄く、型安全性こそが価値です。

// Runtime: POST /trpc/user.byId  body: {"input":1}
// Types: client.user.byId.query(1) is checked end to end

なぜ推論がコード生成に勝るのか

型が推論されるため、忘れてしまうような同期手順がありません。プロシージャを編集すると、呼び出しが一致しなくなった箇所に赤い波線が表示され、クライアントにもすぐ変更が反映されます。このフィードバックは瞬時に得られ、エディター上で確認できます。

// Add a required input field on the server
// -> every client call missing it becomes a type error

tRPCの位置づけ

tRPCは、クライアントとサーバーが同じコードベースを共有するフルスタックTypeScriptのモノレポ、たとえばNext.jsアプリで特に力を発揮します。他の言語から利用されるパブリックAPI向けではありません。その場合は、OpenAPIやGraphQLのような言語に依存しないスキーマを使用します。

// Great: Next.js app, shared types, internal API
// Not ideal: public API for non-TS consumers

全体像

流れは次のとおりです。ルーター上でプロシージャを定義し、ルーター型をエクスポートし、HTTPアダプターを接続して、その型から型付きクライアントを作成します。生成コードなしで、すべての呼び出しがサーバーのコントラクトに対してチェックされます。次のレッスンでは各要素を構築します。

// Roadmap:
// 1. initTRPC + procedures + appRouter
// 2. export AppRouter, create typed client
// 3. context + middleware for auth

コンパイラーを信頼する

考え方を変えましょう。APIコントラクトは、ドキュメントや実行時の検証だけにあるのではなく、型に定義され、コンパイラーによって強制されます。コンパイルが通れば、クライアントとサーバーは合意しています。この保証が「エンドツーエンドの型安全性」の意味です。

// If client.ts compiles, it matches the current server.

確認テスト

tRPCのアーキテクチャについての理解度を確認します。

まとめ

tRPCのモデルを学びました。

  • ルーターがコントラクトであり、その型が唯一の信頼できる情報源です。
  • サーバーがエクスポートするのはAppRouter型だけで、コードはエクスポートしません。
  • クエリは読み取り、ミューテーションは書き込みを行い、実行時にはHTTP経由のJSONが使われます。
  • 型安全性は推論によって実現され、コード生成の手順は必要ありません。

次は、ルーターとプロシージャの定義です。

無料で開始

AI チューターと学ぶ TypeScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
101
レッスン
352

よくある質問

「tRPCのアーキテクチャ」レッスンは無料ですか?

はい。「tRPCのアーキテクチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「tRPCのアーキテクチャ」で何を学びますか?

tRPCがAPIスキーマの重複をなくす仕組みを学びます。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「tRPCのアーキテクチャ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. tRPCのアーキテクチャ
  2. ルーターとプロシージャの定義
  3. クライアントとサーバー間の型推論
  4. ミドルウェアとコンテキスト
← TypeScript Academyに戻る