Générateur de schéma GraphQL

Génère des schémas GraphQL, des resolvers et des définitions de types. Inclut les meilleures pratiques pour la pagination, la gestion des erreurs et la documentation.

Spar Skills Guide Bot
DeveloppementIntermédiaire
0003/08/2026
Claude CodeCursorWindsurfCopilotCodex
#graphql#schema-generation#resolver#api-design#code-generation

Recommandé pour


name: graphql-schema-generator description: Generate GraphQL schemas, resolvers, and type definitions. Use when designing GraphQL APIs or documenting GraphQL schemas.

GraphQL Schema Generator Skill

GraphQLスキーマを生成するスキルです。

概要

データモデルからGraphQLスキーマ、リゾルバーを自動生成します。

主な機能

  • スキーマ定義: Type、Query、Mutation
  • リゾルバー生成: 実装テンプレート
  • ベストプラクティス: ページネーション、エラーハンドリング
  • ドキュメント: 自動生成

生成例

Schema

# Types
type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
  createdAt: DateTime!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  published: Boolean!
  createdAt: DateTime!
  updatedAt: DateTime!
}

type Query {
  user(id: ID!): User
  users(first: Int = 10, after: String): UserConnection!
  post(id: ID!): Post
  posts(published: Boolean): [Post!]!
}

type Mutation {
  createUser(input: CreateUserInput!): User!
  updateUser(id: ID!, input: UpdateUserInput!): User!
  deleteUser(id: ID!): Boolean!
  createPost(input: CreatePostInput!): Post!
  publishPost(id: ID!): Post!
}

# Inputs
input CreateUserInput {
  name: String!
  email: String!
  password: String!
}

input UpdateUserInput {
  name: String
  email: String
}

input CreatePostInput {
  title: String!
  content: String!
  authorId: ID!
}

# Pagination
type UserConnection {
  edges: [UserEdge!]!
  pageInfo: PageInfo!
  totalCount: Int!
}

type UserEdge {
  node: User!
  cursor: String!
}

type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}

# Custom Scalars
scalar DateTime

Resolvers (JavaScript)

const resolvers = {
  Query: {
    user: async (parent, { id }, { dataSources }) => {
      return dataSources.userAPI.getUserById(id);
    },
    users: async (parent, { first, after }, { dataSources }) => {
      return dataSources.userAPI.getUsers({ first, after });
    },
    post: async (parent, { id }, { dataSources }) => {
      return dataSources.postAPI.getPostById(id);
    },
    posts: async (parent, { published }, { dataSources }) => {
      return dataSources.postAPI.getPosts({ published });
    }
  },

  Mutation: {
    createUser: async (parent, { input }, { dataSources }) => {
      return dataSources.userAPI.createUser(input);
    },
    updateUser: async (parent, { id, input }, { dataSources }) => {
      return dataSources.userAPI.updateUser(id, input);
    },
    deleteUser: async (parent, { id }, { dataSources }) => {
      return dataSources.userAPI.deleteUser(id);
    },
    createPost: async (parent, { input }, { dataSources, user }) => {
      if (!user) throw new Error('Unauthorized');
      return dataSources.postAPI.createPost(input);
    },
    publishPost: async (parent, { id }, { dataSources, user }) => {
      if (!user) throw new Error('Unauthorized');
      return dataSources.postAPI.publishPost(id);
    }
  },

  User: {
    posts: async (parent, args, { dataSources }) => {
      return dataSources.postAPI.getPostsByAuthor(parent.id);
    }
  },

  Post: {
    author: async (parent, args, { dataSources }) => {
      return dataSources.userAPI.getUserById(parent.authorId);
    }
  }
};

バージョン情報

  • スキルバージョン: 1.0.0
Skills similaires