エンドツーエンドの型安全性:スキーマファーストのワークフロー
スキーマからクライアントまで単一の信頼できる情報源を維持します。
「エンドツーエンドの型安全性:スキーマファーストのワークフロー」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。
スキーマファーストとは
スキーマファーストとは、GraphQLスキーマを唯一の情報源とする考え方です。フロントエンドの型、バックエンドのリゾルバー、APIコントラクトのすべてをスキーマから生成するため、どの層も同期がずれることを防げます。
# The workflow:
# 1. Define schema (.graphql or SDL)
# 2. Generate server resolver types
# 3. Generate client operation types
# 4. Both sides automatically stay in syncスキーマの定義
GraphQLスキーマをSDL(.graphqlファイル)で記述し、クライアントとサーバー間のコントラクトとしてリポジトリにコミットします。
# schema.graphql
type User {
id: ID!
name: String!
email: String!
}
type Query {
user(id: ID!): User
}サーバー:リゾルバーの型を生成する
typescript-resolversプラグインを使ってcodegenを実行し、スキーマから型付きのリゾルバーシグネチャを生成します。
# Server codegen step
npx graphql-codegen --config codegen.server.ymlクライアント:オペレーションの型を生成する
typescript-operationsとApollo/urqlのプラグインを使ってcodegenを実行し、.graphqlのオペレーションファイルから型付きフックを生成します。
# Client codegen step
npx graphql-codegen --config codegen.client.yml破壊的変更の検出
graphql-inspectorを使って、破壊的なスキーマ変更(フィールドの削除や型の変更)を本番環境に反映する前に検出します。
npx graphql-inspector diff ./api/schema.graphql ./api/schema.new.graphql
# Reports: BREAKING: Field 'User.email' was removedスキーマレジストリ
スキーマレジストリ(Apollo Studio、Hive)はスキーマのバージョンを保存し、時間の経過に伴う変更を追跡して、CIで破壊的な変更を通知します。
# Push schema to Apollo Studio:
npx apollo schema:push --endpoint https://api.example.com/graphqlスキーマを使ったモック
スキーマを使って、実際のサーバーなしでクライアント開発用のモックデータを生成します。これにより、モックをスキーマに正確に合わせられます。
import { buildClientSchema, introspectionFromSchema } from "graphql";
import { addMocksToSchema } from "@graphql-tools/mock";
const schema = buildClientSchema(introspectionResult);
const mockedSchema = addMocksToSchema({ schema });代替手段としてのtRPC
TypeScriptだけを使うプロジェクトでは、tRPCによってスキーマ言語なしでエンドツーエンドの型安全性を実現できます。サーバーのルーター型そのものがクライアントのコントラクトになります。
// Server: router infers types
const router = t.router({ getUser: t.procedure.query(() => fetchUser()) });
// Client: types flow automatically via inference
const { data } = trpc.getUser.useQuery();検証のためのZod + tRPC
ZodのスキーマとtRPCの入力バリデーターを組み合わせると、単一の定義から実行時検証とコンパイル時の型を得られます。
const createUser = t.procedure
.input(z.object({ name: z.string(), email: z.string().email() }))
.mutation(({ input }) => saveUser(input));
// input: { name: string; email: string } — from Zod schemaCI:完全なスキーマ安全性パイプライン
スキーマファーストの安全性を実現する完全なCIパイプラインは、スキーマのlint → 破壊的変更の確認 → codegenの実行 → 型チェック → テストの実行という流れになります。
# .github/workflows/schema.yml
- run: npx graphql-inspector validate ...
- run: npx graphql-codegen --check
- run: npx tsc --noEmit
- run: npm testまとめ:スキーマファーストのワークフロー
スキーマファーストのTypeScriptでは、SDLを定義 → サーバーのリゾルバー型を生成 → クライアントのオペレーション型を生成 → CIで破壊的変更を検出、という流れで進めます。スキーマが、すべての型安全性の層における唯一の情報源です。
確認問題
スキーマファーストのワークフローにおいて、GraphQLスキーマはどのような役割を果たしますか。
学習内容
スキーマファーストのTypeScriptワークフローでは、すべての型をGraphQLスキーマから生成します。サーバー用のリゾルバー型とクライアント用のオペレーション型を生成し、CIで破壊的変更を検出して、すべての層のコントラクトとしてスキーマを維持します。
よくある質問
「エンドツーエンドの型安全性:スキーマファーストのワークフロー」レッスンは無料ですか?
はい。「エンドツーエンドの型安全性:スキーマファーストのワークフロー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。
「エンドツーエンドの型安全性:スキーマファーストのワークフロー」で何を学びますか?
スキーマからクライアントまで単一の信頼できる情報源を維持します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
TypeScript Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「エンドツーエンドの型安全性:スキーマファーストのワークフロー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このTypeScript Academyレッスンでコードを書いて実行できますか?
はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GraphQLスキーマからTypeScript型へ
- GraphQL Code Generatorによる型付きResolver
- Apolloとurqlによる型付きGraphQLクライアント
- エンドツーエンドの型安全性:スキーマファーストのワークフロー