graphql-schema

作成者: apollographql

直感的で高性能かつ保守可能なGraphQLスキーマを設計するための業界ベストプラクティスガイド。クライアント中心の型構成、明示的なnull許容パターン、後方互換性のある進化戦略を含む中核設計原則を網羅。型、命名規則、カーソルベースのページネーション、エラーモデリング、セキュリティ考慮事項に関するリファレンスドキュメントを提供。インターフェース、ユニオン、入力型、ミューテーション、ID戦略に関する実践的なパターンをコード例とともに収録...

npx skills add https://github.com/apollographql/skills --skill graphql-schema

GraphQL Schema Design Guide

This guide covers best practices for designing GraphQL schemas that are intuitive, performant, and maintainable. Schema design is primarily a server-side concern that directly impacts API usability.

Schema Design Principles

1. Design for Client Needs

  • Think about what queries clients will write
  • Organize types around use cases, not database tables
  • Expose capabilities, not implementation details

2. Be Explicit

  • Use clear, descriptive names
  • Make nullability intentional
  • Document with descriptions

3. Design for Evolution

  • Plan for backwards compatibility
  • Use deprecation before removal
  • Avoid breaking changes

Quick Reference

Type Definition Syntax

"""
A user in the system.
"""
type User {
  id: ID!
  email: String!
  name: String
  posts(first: Int = 10, after: String): PostConnection!
  createdAt: DateTime!
}

Nullability Rules

PatternMeaning
StringNullable - may be null
String!Non-null - always has value
[String]Nullable list, nullable items
[String!]Nullable list, non-null items
[String]!Non-null list, nullable items
[String!]!Non-null list, non-null items

Best Practice: Use [Type!]! for lists - empty list over null, no null items.

Input vs Output Types

# Output type - what clients receive
type User {
  id: ID!
  email: String!
  createdAt: DateTime!
}

# Input type - what clients send
input CreateUserInput {
  email: String!
  name: String
}

# Mutation using input type
type Mutation {
  createUser(input: CreateUserInput!): User!
}

Interface Pattern

interface Node {
  id: ID!
}

type User implements Node {
  id: ID!
  email: String!
}

type Post implements Node {
  id: ID!
  title: String!
}

Union Pattern

union SearchResult = User | Post | Comment

type Query {
  search(query: String!): [SearchResult!]!
}

Reference Files

Detailed documentation for specific topics:

  • Types - Type design patterns, interfaces, unions, and custom scalars
  • Naming - Naming conventions for types, fields, and arguments
  • Pagination - Connection pattern and cursor-based pagination
  • Errors - Error modeling and result types
  • Security - Security best practices for schema design

Key Rules

Type Design

  • Define types based on domain concepts, not data storage
  • Use interfaces for shared fields across types
  • Use unions for mutually exclusive types
  • Keep types focused (single responsibility)
  • Avoid deep nesting - flatten when possible

Field Design

  • Fields should be named from client's perspective
  • Return the most specific type possible
  • Make expensive fields explicit (consider arguments)
  • Use arguments for filtering, sorting, pagination

Mutation Design

  • Use single input argument pattern: mutation(input: InputType!)
  • Return affected objects in mutation responses
  • Model mutations around business operations, not CRUD
  • Consider returning a union of success/error types

ID Strategy

  • Use globally unique IDs when possible
  • Implement Node interface for refetchability
  • Base64-encode compound IDs if needed

Ground Rules

  • ALWAYS add descriptions to types and fields
  • ALWAYS use non-null (!) for fields that cannot be null
  • ALWAYS use [Type!]! pattern for lists
  • NEVER expose database internals in schema
  • NEVER break backwards compatibility without deprecation
  • PREFER dedicated input types over many arguments
  • PREFER enums over arbitrary strings for fixed values
  • USE ID type for identifiers, not String or Int
  • USE custom scalars for domain-specific values (DateTime, Email, URL)

apollographqlのその他のスキル

apollo-client
apollographql
Apollo Clientは、GraphQLを使用してローカルデータとリモートデータの両方を管理できる、JavaScript向けの包括的な状態管理ライブラリです。バージョン4.xでは、キャッシュの改善、TypeScriptサポートの強化、React 19との互換性がもたらされています。
official
apollo-client
apollographql
We need to translate the given text from English to Japanese. The text is a description of an agent skill for apollo-client. We must preserve the name "apollo-client" if it appears, but it does not appear in the text. The text mentions "Apollo Client 4.x" - that should be preserved as is. Also preserve technical terms like useQuery, useLazyQuery, useMutation, useSuspenseQuery, useBackgroundQuery, Vite, CRA, Next.js App Router, React Server Components, React Router 7, streaming SSR, TanStack Start, React 18+, 19. Also preserve numbers and URLs (none here). Do not add any extra commentary or labels. Just translate the text. The text: "Comprehensive guide for building React applications with Apollo Client 4.x, covering queries, mutations, caching, and state management. Supports multiple React frameworks and setups: client-side apps (Vite, CRA), Next.js App Router with React Server Components, React Router 7 with streaming SSR, and TanStack Start Includes hooks
official
apollo-connectors
apollographql
REST APIを@sourceおよび@connectディレクティブを使用してGraphQLスーパーグラフに統合します。構造化された5ステップのプロセスを提供:API構造の調査、ディレクティブを使用したスキーマの実装、rover supergraph composeによる検証、コネクタの実行、テストカバレッジ。ヘッダー、ボディペイロード、N+1パターンのバッチ処理、$envによる環境変数インジェクションを含むリクエスト設定をサポート。フィールド選択、エイリアス、ネストデータのサブセレクション、エンティティ...によるレスポンスマッピングを処理します。
official
apollo-federation
apollographql
Apollo Federationは、複数のGraphQL API(サブグラフ)を統合されたスーパーグラフに構成することを可能にします。
official
apollo-ios
apollographql
Apollo iOSは、Appleプラットフォーム向けの強く型付けされたGraphQLクライアントです。GraphQLの操作とスキーマからSwiftの型を生成し、async/awaitクライアント、正規化キャッシュ(インメモリまたはSQLite対応)、クエリ、ミューテーション、マルチパートサブスクリプションを処理するプラグ可能なインターセプターベースのHTTPトランスポート、および任意の操作タイプを伝送可能なオプションのWebSocketトランスポート(graphql-transport-ws)を搭載しています。
official
apollo-kotlin
apollographql
Apollo Kotlinは、GraphQLの操作とスキーマからKotlinモデルを生成する、強い型付けのGraphQLクライアントであり、Android、JVM、Kotlin Multiplatformプロジェクトで使用できます。
official
apollo-mcp-server
apollographql
Model Context Protocolを通じてAIエージェントをGraphQL APIに接続し、内蔵のイントロスペクションおよび操作ツールを提供します。GraphQL操作をMCPツールとして公開し、ローカルファイル、GraphOS Studioコレクション、永続化クエリマニフェストの3つの操作ソースをサポートします。スキーマ探索やアドホッククエリテストのための4つのイントロスペクションツール(introspect、search、validate、execute)を提供し、ミニフィケーションモードではコンパクトな表記でトークン使用量を削減します。静的ヘッダーを介した設定可能な認証、...
official
apollo-router
apollographql
Apollo Routerは、Apollo Federation 2のスーパーグラフを実行するためにRustで書かれた高性能なグラフルーターです。サブグラフの前に配置され、クエリの計画、実行、レスポンスの合成を処理します。
official