🙄
GPT-4にER図からGraphQLスキーマを生成させてみた
今日も今日とて猫も杓子もGPT-4ですが、今回はGraphQLスキーマをMermeidで書いたER図から生成するという実験に、GPTさんにお付き合いいただきました。
やったこと
- ER図をMermaidで書く
- こっから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