Gato GraphQL vs WPGraphQL
Gato GraphQLとWPGraphQLの比較


ヘッドレスWordPressサイトを構築して静的にデプロイするだけであれば、現在WPGraphQLを使用していても、Gato GraphQLに切り替えても大きな違いはありません。
それ以外の場合、Gato GraphQLへの切り替えには多くの利点があります。以下は、Gato GraphQL+全拡張機能が提供する機能で、WPGraphQLでは利用できないものです。
比較表
| 機能 | Gato GraphQL | WPGraphQL |
|---|---|---|
| N+1クエリ問題 | アーキテクチャ設計により問題が発生しない | 適切に処理しないと問題になる可能性があり、開発者の注意が必要 |
| セキュリティ:エンドポイントの無効化 | persisted queriesでシングルエンドポイントを完全に無効化可能(PRO) | 未提供 |
| アクセス制御 | UIによるロール/capability/IPを使ったフィールド単位の検証(PRO) | フィールドレベルではなく、粒度が低い |
| キャッシュ制御 | クエリのmax-ageを自動計算(PRO) | 自動キャッシュ制御なし |
| カスタムエンドポイント | パスワード保護/カスタマイズ可能な複数エンドポイント、エンドポイント階層をサポート(PRO) | シングルエンドポイント、カスタマイズ制限あり |
| 一括更新・検索/置換 | GraphQL経由での一括削除、タグ付け、置換(regex対応)(PRO) | 未提供 |
| カスタム/実験的GraphQL機能 | ネストされたmutation、スキーマのnamespacing、oneOf input object | ほぼ標準GraphQL仕様に準拠 |
| Multiple Query Execution(コンポーザビリティ) | 1つのドキュメントで複数クエリを実行、@exportで状態を共有 | クエリのバッチ処理(1リクエストに複数)、ただし状態の共有は不可 |
| 内部/プライベートエンドポイント | バックエンド/PHPのみのプライベートエンドポイント、ユーザーには非公開(PRO) | 利用不可 |
| リッチなデータmutation | 1つのドキュメントでデータの取得・変更・保存が可能(PRO) | 未対応 |
| コンテンツの同期と配信 | GraphQL、RSS、CSV、REST APIによるインポート/エクスポート(PRO) | 未提供 |
| Webサービス連携 | アウトバウンド/インバウンドAPI呼び出しとwebhook(PRO) | 未対応 |
| 自動化(フック/ワークフロー) | GraphQLをワークフロー自動化として活用(PRO/UIエディタ) | 利用不可 |
| 使いやすさ(UI統合) | GraphQLクエリの構築・管理のための豊富なUI機能 | より基本的な管理UI |
| バッチ処理/コンポーザビリティ | フィールド/ディレクティブの合成、再利用可能なリゾルバロジック(PRO) | 未対応 |
| Multiple Query Execution | 対応、状態共有と依存関係あり | 対応、状態共有なし |
| 標準ヘッドレス/静的利用 | 両方とも同等の機能を持つ | 両方とも同等の機能を持つ |
ラベル:
- (PRO):Gato GraphQLの有料/プロバージョン/拡張機能が必要な機能を示します。
主なポイントの概要:
- Gato GraphQLは高度な開発、自動化、セキュリティのための重要な追加機能を提供します
- 両プラグインは基本的な静的/ヘッドレスWordPressインストールに対して同等です
- Gato GraphQLの高度な機能は以下に焦点を当てています:
- きめ細かな制御
- ワークフローの自動化
- リッチな統合機能
- 最新のGraphQL実験的機能
開発のしやすさ
開発者は「n+1」クエリ問題を心配する必要はありません。GraphQLサーバーのアーキテクチャ設計により、そもそも問題が発生しません。
セキュリティ
persisted queriesを使って事前定義済みのデータを公開する場合、GraphQLのシングルエンドポイントを完全に無効化し、認証済みユーザーでもアクセスできないようにすることができます。

アクセス制御
ログイン済みユーザー、特定のロールやcapabilityを持つユーザー、または特定のIP範囲からの訪問者のみがデータにアクセスできるよう、フィールド単位で検証することができます(PRO)。

キャッシュ制御
標準のHTTPキャッシングを使ってGraphQLレスポンスをキャッシュする場合、GraphQLクエリに含まれるすべてのフィールドをもとにmax-ageヘッダーが自動的に計算されます(PRO)。

エンドポイントのカスタマイズと管理
特定の顧客やアプリケーション向けにカスタマイズした複数のカスタムエンドポイントを提供し、パスワードで保護することができます。
さらに、カスタムカテゴリを追加したり、階層構造を持たせることもできます(例:/graphql/customers/some-customerや/graphql/customers/another-customer)。

一括更新
更新を一括で実行できます。たとえば、サイト上のすべてのコメントを削除したり、すべての投稿にタグやカテゴリを割り当てたりすることができます。
また、数百の投稿にわたって文字列を検索・置換することも可能です。たとえば、古いドメインを新しいドメインに置換することや、regexを使った置換も行えます(PRO)。
カスタムGraphQL機能
仕様として提案されているが未リリースの新しいGraphQL機能にアクセスできます。ネストされたmutation、スキーマのnamespacing、および'oneOf' Input Objectが含まれます。

Multiple Query Execution
WPGraphQLはクエリのバッチ処理を許可しており、1つのHTTPリクエスト内で複数のGraphQLクエリを解決できます。
Gato GraphQLはMultiple Query Executionを提供しており、1つのGraphQLドキュメントで複数のオペレーションを実行できます。
Multiple Query Executionはクエリのバッチ処理の改善版であり、@exportディレクティブを通じてオペレーション間で状態を共有できます。
たとえば、投稿を複製するには、queryオペレーションで投稿データを取得し、そのデータをmutationオペレーションに渡して新しい投稿を作成します:
query GetPostAndExportData($postId: ID!)
{
post(by: { id: $postId }, status: any) {
author {
id @export(as: "authorID")
}
categories {
id @export(as: "categoryIDs", type: LIST)
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage {
id @export(as: "featuredImageID")
}
tags {
id @export(as: "tagIDs", type: LIST)
}
rawTitle @export(as: "title")
}
}
mutation DuplicatePost
@depends(on: "GetPostAndExportData")
{
createPost(input: {
status: draft,
authorBy: {
id: $authorID
},
categoriesBy: {
ids: $categoryIDs
},
contentAs: {
html: $rawContent
},
excerpt: $excerpt
featuredImageBy: {
id: $featuredImageID
},
tagsBy: {
ids: $tagIDs
},
title: $title
}) {
postID
}
}コンポーザビリティ
フィールドを合成する機能を利用できます。あるフィールドの値を同じクエリ内の別のフィールドへの入力として提供でき、基本的なフィールドリゾルバのセットで無限のユースケースに対応できます(PRO)。
たとえば、Post.hasExcerptフィールドを新たに作成する代わりに、Post.excerptに_notEmptyフィールドを適用して同じ値を生成できます:
query {
post(by: { id: 1 }) {
excerpt
hasExcerpt: _notEmpty(value: $__excerpt)
}
}同様に、ディレクティブを合成することもでき、ディレクティブをフィールドの値の内部プロパティに適用することができます。
たとえば、次のクエリは投稿のカテゴリ名を別の言語に翻訳します:
query {
post(by: { id: 1 }) {
title
categoryNames
frenchCategoryNames: categoryNames
@underEachArrayItem
@strTranslate(
from: "en",
to: "fr"
)
}
}GraphQLサーバーの可用性
Gutenbergブロックを動かすためのプライベートエンドポイントを公開できます。また、公開向けエンドポイントを一切公開せずに、PHPコードを使ってアプリケーションのデータを取得するためのプライベートGraphQLサーバーにアクセスできます(PRO)。
データmutationの汎用性
GraphQLを使って、サイトのコンテンツを取得・変更・再保存するすべての操作を1つのGraphQLドキュメント内で実行できます(PRO)。
たとえば、投稿内のすべてのGutenbergブロックを取得し、プロパティを抽出し、Google Translate APIでそれらの文字列を翻訳し、文字列をブロックに戻し、投稿を再保存することができます。
コンテンツの同期と配信
GraphQLを使って、別のWordPressサイトから投稿をインポートする、RSSフィードからインポートする、CSVからインポートする、またはREST APIやGraphQL APIからインポートすることができます(PRO)。
別のWordPressサイトにコンテンツをエクスポートし、JSONやCSVとして保存することもできます(PRO)。
Webサービス連携
HTTPクライアントを使って任意の外部サービスのAPIを呼び出せます(PRO)。たとえば、WordPressユーザーをMailchimpのメーリングリストに登録することができます。
また、専用のwebhookを通じて任意のサービスからの受信データを受け取り処理することもできます(PRO)。たとえば、InstaWPサンドボックスサイトに登録されたニュースレターのメールアドレスを取得し、自動的にMailchimpに送信することができます。
自動化
GraphQLを使ってタスクやコンテンツワークフローを自動化できます(PRO)。
たとえば、新しい投稿が作成されたとき(フックdraft_postのイベント経由)、投稿にサムネイルがないかどうかを確認するpersisted queryを実行し、ない場合はStable Diffusion APIを呼び出して画像を生成し、TinyPngで圧縮して、最終的にその画像を投稿のアイキャッチ画像として設定することができます。

使いやすさ
これらすべての追加ユースケースは、PHPコードをデプロイすることなく、ユーザーインターフェースでGraphQLクエリを入力することで、wp-admin内から直接実現できます。
