OpenAPIからGraphQL変換
GraphQL Schema Synthesis

OpenAPI・Swagger GraphQL SDL スキーマ変換ツール

OpenAPI 3.0/3.1およびSwagger 2.0のRESTエンドポイント、リクエストボディ、JSON SchemaをGraphQL SDLの型定義、Query、Mutation、Inputへマッピングする開発者向け技術仕様書。

100% クライアント側プライバシー
サーバー送信ゼロ
プリセット:
SDL オプション:
OpenAPI / Swagger 仕様書 (YAML / JSON)OpenAPI 3.x (YAML)
# ==============================================================================
# GraphQL SDL Schema synthesized from OpenAPI / Swagger
# Title: Swagger Petstore (1.0.0)
# Base Server: https://petstore3.swagger.io/api/v3
# Generated by ToolsAA 100% Client-Side Engine
# ==============================================================================


"""ISO-8601 compliant datetime representation"""
scalar DateTime

"""Arbitrary unstructured JSON object data"""
scalar JSON


schema {
  query: Query
  mutation: Mutation
}


type Query {
  # --- Pets ---
  """List all pets"""
  listPets(status: ListPetsStatusEnum, limit: Int): [Pet!]!

  """Find pet by ID"""
  getPetById(petId: ID!): Pet!
}


type Mutation {
  # --- Pets ---
  """Create a pet"""
  createPet(input: NewPetInput!): Pet!

  """Update an existing pet"""
  updatePet(petId: ID!, input: NewPetInput!): Pet!

  """Deletes a pet"""
  deletePet(petId: ID!): Boolean!
}


enum NewPetStatusEnum {
  AVAILABLE
  PENDING
  SOLD
}


enum PetStatusEnum {
  AVAILABLE
  PENDING
  SOLD
}


enum ListPetsStatusEnum {
  AVAILABLE
  PENDING
  SOLD
}


type Category {
  id: ID!
  name: String!
}


type Tag {
  id: ID!
  name: String!
}


type NewPet {
  name: String!
  category: Category
  photoUrls: [String!]!
  tags: [Tag!]
  status: NewPetStatusEnum
}


type Pet {
  id: ID!
  name: String!
  category: Category
  photoUrls: [String!]!
  tags: [Tag!]
  status: PetStatusEnum!
  createdAt: DateTime
}


input CategoryInput {
  id: ID!
  name: String!
}


input TagInput {
  id: ID!
  name: String!
}


input NewPetInput {
  name: String!
  category: CategoryInput
  photoUrls: [String!]!
  tags: [TagInput!]
  status: NewPetStatusEnum
}
5
解析済みRESTエンドポイント
10
生成GraphQL型・Input総数
1.7 KB
推定SDLスキーマ容量

100% ローカルメモリ安全保証

社外秘のAPI仕様書や内部データモデルを外部サーバーへ一切送信せず、ブラウザ内JavaScriptでのみ高速変換を実行します。

完全な GraphQL SDL 自動合成

GETエンドポイントをQueryフィールドへ、POST/PUT/PATCH/DELETEを型安全なMutationへ自動昇格し、複雑なJSONスキーマをGraphQLオブジェクト型にマッピング。

Apollo Server & Relay 即時互換

Apollo Server、GraphQL Yoga、Nexus、AWS AppSync、Hasura、GraphQL Code Generatorでそのまま即座に利用可能な標準SDLを出力。

技術リファレンス&アーキテクチャガイド

OpenAPI・Swagger GraphQL SDL スキーマ変換 技術リファレンス — リファレンスガイド

OpenAPI 3.0/3.1およびSwagger 2.0のRESTエンドポイント、リクエストボディ、JSON SchemaをGraphQL SDLの型定義、Query、Mutation、Inputへマッピングする開発者向け技術仕様書。

主要パラメータ&設定項目

operationMapping'query-mutation' | 'query-only'

HTTPメソッドをQueryとMutationへ適切に振り分けるか、すべてQueryとして出力するかを制御。

初期値: 'query-mutation'
inputNamingConvention'suffix-input' | 'prefix-input' | 'exact'

リクエストボディから生成されるGraphQL input型に付与する命名規則(例: Suffixとして'Input'を付与)。

初期値: 'suffix-input'
idFieldMapping'ID' | 'String' | 'Int'

パスパラメータやエンティティ識別子フィールドをGraphQLのIDスカラーまたはString/Intにマッピングする設定。

初期値: 'ID'
nullableMode'strict-non-null' | 'optional'

OpenAPIの必須プロパティ(required)およびパスパラメータをGraphQLの非Null制約(!)として厳密に出力するかどうか。

初期値: 'strict-non-null'
customScalars'enabled' | 'string-only'

date-timeやuuidなどのOpenAPI文字列フォーマットに対し、カスタムスカラー(DateTime、UUID、JSON)を自動宣言するか。

初期値: 'enabled'

プロの活用テクニック&推奨設定

リクエスト用Input型の分離

GraphQLでは出力用オブジェクト型(type)をミューテーションの引数(input)として使い回せません。OpenAPIのリクエストボディには必ず専用のInput型を割り当ててスキーマの整合性を維持してください。

@restディレクティブの活用

@rest(path: "/users/{id}", method: "GET") のようなカスタムスキーマディレクティブを付与することで、Apollo Server RESTDataSourceやGraphQL Meshでのエンドポイント自動解決が容易になります。

oneOfスキーマのUnion型変換

discriminatorプロパティを持つoneOfスキーマはGraphQLのunion型へ変換します。プリミティブ値を含む分岐はラッパーオブジェクト型にカプセル化することで仕様違反を防ぎます。

共有スキーマの型重複排除

#/components/schemasで定義された共通モデルをトップレベルのGraphQL SDL型として定義することで、エンドポイント間での重複を完全に排除したクリーンなスキーマが構築できます。

よくあるトラブルと解決策

リクエスト用スキーマとレスポンス用スキーマの同名衝突エラー

GraphQLでは同じ名前にtypeとinputを重複定義できません。入力型の命名規則で'Input'サフィックス(例: CreateUserInput)を有効にし、出力型(User)と名前を分離してください。

oneOfに文字列や数値などプリミティブ型が含まれGraphQLで構文エラーになる

GraphQLのunion型はオブジェクト型のみをメンバーに持てます。プリミティブ値を持つ分岐は{ value: String }のような合成ラッパー型を作成してスキーマを構成してください。

200/201レスポンス定義の欠落による戻り値型の未定義構文エラー

対象エンドポイントのOpenAPI定義に200系レスポンススキーマが記述されているか確認してください。スキーマレスな場合は汎用ステータス型(StatusPayload)を代替指定します。

よくある質問 (FAQ)

RESTの各HTTPメソッドはGraphQLのルート型へどのように変換されますか?▼

GETエンドポイントはルートQueryフィールドに変換され、POST、PUT、PATCH、DELETEはMutationフィールドに変換されます。パスパラメータやクエリ文字列は引数として型定義されます。

OpenAPIの共通コンポーネント($ref参照)はどのように解決されますか?▼

components/schemasやdefinitions配下の共有スキーマは自動解決され、GraphQL SDL上で再利用可能なtypeおよびinputとして定義されるため、インライン重複定義は発生しません。

OpenAPIのoneOfやanyOfなどのポリモーフィックなスキーマに対応していますか?▼

はい。discriminatorプロパティを備えたオブジェクト構成のoneOfはGraphQLのunion型またはinterface定義へ変換されます。スカラー値の混在は専用ラッパー型で解決します。

入力したAPI仕様書が外部サーバーへ送信・保存されることはありますか?▼

一切ありません。OpenAPI仕様書のパースからGraphQL SDL構文木の生成まで、すべての処理はお使いのブラウザ内メモリで100%完結します。

生成されたGraphQL SDLはどのサーバー実装やツールで利用できますか?▼

公式GraphQL仕様(2021年10月版以降)に準拠した標準SDL形式で出力されるため、Apollo Server、GraphQL Yoga、AWS AppSync、Nexus、GraphQL Meshなどでそのままご利用いただけます。

関連するおすすめ開発ツール

すべてのツール →
SQL DDLからTypeBox TypeScriptスキーマへの変換ツール開発ツール

SQLのCREATE TABLE文を解析し、Type.Object、Type.String、Type.Number、Type.Optionalを用いた@sinclair/typeboxランタイム検証スキーマとStatic型定義へ高速変換します。

ツールを開く→
cURL から Rust (reqwest & tokio) コードジェネレーター開発ツール

cURL コマンドを、reqwest、serde_json、カスタムヘッダー、Tokio 非同期ランタイムを活用した慣用的で安全な Rust HTTP クライアントコードへ瞬時に変換します。

ツールを開く→
cURL to Ruby (Net::HTTP & Faraday) コード生成ツール開発ツール

cURLコマンドをNet::HTTP、URI、Faraday、JSON解析を活用したクリーンで慣用的なRubyコードへ瞬時に変換します。

ツールを開く→
Kubernetes NetworkPolicy 生成ツール開発ツール

宣言的Kubernetes NetworkPolicyマニフェスト、ゼロトラストPod分離、名前空間インgress/egressルール、CIDR ipBlock、複数ポート定義を生成するための開発者向けガイド。

ツールを開く→
Kubernetes RBAC Role & ClusterRoleBinding YAML 生成ツール開発ツール

APIグループ、リソース操作(verbs)、Subject(ServiceAccount/User/Group)を指定して、Kubernetes RBACのRole、ClusterRole、RoleBinding、ClusterRoleBindingマニフェストを迅速に設計・生成します。

ツールを開く→
Kubernetes StatefulSet&Headless Service YAML ビルダー開発ツール

コンパニオン Headless Service、永続ボリュームテンプレート(volumeClaimTemplates)、レプリカ数、podManagementPolicy を備えた本番仕様の Kubernetes StatefulSet マニフェストを生成します。

ツールを開く→