スキル一覧に戻る

graphql-schema-generator

ntaksh42 / agents

0🍴 1📅 2026年1月17日

Generate GraphQL schemas, resolvers, and type definitions. Use when designing GraphQL APIs or documenting GraphQL schemas.

SKILL.md

---
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

```graphql
# 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)

```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