🙄

GPT-4にER図からGraphQLスキーマを生成させてみた

2023/03/17に公開

今日も今日とて猫も杓子もGPT-4ですが、今回はGraphQLスキーマをMermeidで書いたER図から生成するという実験に、GPTさんにお付き合いいただきました。

やったこと

  1. ER図をMermaidで書く
  2. こっからGraphQLスキーマよろ!ってお願いする

インプットのMermaidはこんな感じ

成果

こんな感じでお願いしました。(原文ママ)

このMermaid形式で表現されたエンティティのセットから、GraphQLのスキーマを生成してください。
スキーマはQueryのみで大丈夫です。
erDiagram
    User ||--o{ Assignment : has
    Task ||--o{ Assignment : has
    Organization ||--o{ Group : has
    Group ||--o{ Belonging : has
    User ||--o{ Belonging : has

    User {
        string id
        string name
    }
    
    Task {
        string id
        string description
    }
    
    Assignment {
        string id
        string userId
        string taskId
    }
    
    Organization {
        string id
        string name
    }
    
    Group {
        string id
        string organizationId
        string name
    }
    
    Belonging {
        string id
        string userId
        string groupId
    }

で、結果がこれ。

type Query {
    user(id: ID!): User
    users: [User]
    task(id: ID!): Task
    tasks: [Task]
    assignment(id: ID!): Assignment
    assignments: [Assignment]
    organization(id: ID!): Organization
    organizations: [Organization]
    group(id: ID!): Group
    groups: [Group]
    belonging(id: ID!): Belonging
    belongings: [Belonging]
}

type User {
    id: ID!
    name: String!
    assignments: [Assignment]
    belongings: [Belonging]
}

type Task {
    id: ID!
    description: String!
    assignments: [Assignment]
}

type Assignment {
    id: ID!
    userId: String!
    taskId: String!
    user: User
    task: Task
}

type Organization {
    id: ID!
    name: String!
    groups: [Group]
}

type Group {
    id: ID!
    organizationId: String!
    name: String!
    organization: Organization
    belongings: [Belonging]
}

type Belonging {
    id: ID!
    userId: String!
    groupId: String!
    user: User
    group: Group
}
このスキーマは、各エンティティとそれらのリレーションシップに基づいて定義されています。各エンティティは、対応する型として定義され、リレーションシップはフィールドとして追加されています。また、Query型には、各エンティティの取得メソッドが定義されています。

感想

むやみにnullableになってしまっている以外はほぼ完璧ですね。

  • 入れ子になってるところは、参照の多重性理解している
  • ID型使いこなしてる

これはイケるぜ!ってなったので、もっと色々試してみました(続く)

Discussion