ZeroTool Workbench
GraphQL フォーマッター
無料オンライン GraphQL フォーマッター。ブラウザで query / mutation / SDL スキーマを整形・圧縮・検証し、構文エラーを行と列で特定。アップロード不要・登録不要。
使い方
- GraphQL query、mutation、subscription、SDL スキーマを入力欄に貼り付けるか、サンプルを読み込む から例を起点にしてください。
- 整形 で美化、圧縮 で短縮、検証 で構文のみ確認できます。
- インデントは 2 または 4 スペースを切り替え可能。デフォルト 2 は graphql-js のネイティブ出力と同じです。
- コピー や .graphql をダウンロード で結果を持ち帰り。Cmd/Ctrl + Enter でキーボードから整形できます。
実例
整形前
query GetUser($id:ID!,$withPosts:Boolean!){user(id:$id){id name email posts @include(if:$withPosts){...PostSummary}}} fragment PostSummary on Post{id title publishedAt}
整形後
query GetUser($id: ID!, $withPosts: Boolean!) {
user(id: $id) {
id
name
email
posts @include(if: $withPosts) {
...PostSummary
}
}
}
fragment PostSummary on Post {
id
title
publishedAt
}
SDL スキーマ
type Post {
id: ID!
title: String!
publishedAt: DateTime
author: User!
}
type Query {
post(id: ID!): Post
posts(authorId: ID, limit: Int = 20): [Post!]!
}
なぜ GraphQL を整形するのか
一貫した GraphQL の整形は、コードレビュー、スキーマ diff、.graphql ファイルの保管に直結します。永続化クエリを使えない環境では minify によって通信量を減らせます。整形されたクエリは PR 上で読みやすく、クエリを単体で検証することで fragment 名のタイプミスをリクエストを送る前に発見できます。
内部の仕組み
本ツールはブラウザ内で graphql-js(GraphQL Foundation 管理の公式リファレンス実装)を動かします。parse() がテキストから AST を構築し、最初の構文エラーを行・列で報告。print() が AST を規範的な GraphQL に再シリアライズ。stripIgnoredCharacters() が spec で ignored とされるトークンをすべて除去して圧縮版を返します。ネットワーク往復ゼロ、データは端末内に留まります。
FAQ
サポートする GraphQL 構文は?
query、mutation、subscription、fragment、inline fragment、variable、directive(@include / @skip / @deprecated とカスタム)、SDL 型システム定義(type / interface / union / enum / input / scalar / extend / schema)に対応。内部で公式 `graphql` リファレンス実装を使用しており、graphql-js が受け付けるものはすべて受け付けます。
スキーマやクエリはサーバーに送られますか?
送られません。パース・出力・検証はすべてブラウザタブ内で完結し、データは端末から出ません。本ツールは設計上、アップロードエンドポイントを持ちません。
リモートスキーマに対して型チェックできますか?
構文レベルの検証のみです。GraphQL の文法として正しいかは確認しますが、特定スキーマにフィールドが存在するかは検証しません。型チェックが必要な場合はローカルで `graphql-cli`、`apollo client:check`、`graphql-inspector` をエンドポイントに対して実行してください。
入力サイズの上限は?
10 MB のハード上限です。GraphQL operation がこの大きさになることは稀で、ほとんどはスキーマ introspection ダンプです。その場合はローカルで `prettier --parser graphql` を使ってください。
Minify と Format の違いは?
Minify は graphql-js の `stripIgnoredCharacters` を使い、GraphQL spec で ignored とされる空白・コメントをすべて削除します(通信向け)。Format は AST を 2 または 4 スペースのインデントで再出力し、人間が読むためのものです。