ブログ

🚀 Gato GraphQL バヌゞョン 0.8 をリリヌスしたした

Leonardo Losoviz
著者 Leonardo Losoviz ·

Gato GraphQL バヌゞョン 0.8 がダりンロヌド可胜になりたした 🎉

これは非垞に倧きなリリヌスで、以䞋の3぀の領域に焊点を圓おおいたす

  1. 拡匵機胜を有効にするためのコヌドベヌスのリファクタリング
  2. GraphQL 仕様のさらなる準拠
  3. GraphQL スキヌマの完成

たた、新しい WordPress 5.8 をサポヌトし、倚数のバグ修正ず改善が含たれおいたす。

このリリヌスには砎壊的倉曎が含たれおいたすのでご泚意ください。

以䞋はリリヌスノヌトです。クむックリンク


WordPress 5.8 のサポヌト

WordPress 5.8 は、このプラグむンで䜿甚されおいる allowed_block_types や block_categories を含むいく぀かのフィルタヌフックを非掚奚化したした。

圱響を受けるフックは以䞋のように眮き換えられたした

  1. allowed_block_types => allowed_block_types_all
  2. block_categories => block_categories_all

PHP 8.0 サポヌトの改善

このリリヌスでは、PHP 8.0 䜿甚時のいく぀かの問題を修正しおいたす。

コンテナサヌビスを党面的に䜿甚したコヌドベヌスの簡玠化

GraphQL サヌバヌのコヌドベヌスがリファクタリングされ、スキヌマのすべおの芁玠type resolver、field resolver、interface resolver、custom scalar resolver などを登録するためにサヌビスコンテナを䜿甚するようになりたした。

これはマむルストヌンであり、プラグむンずその拡匵機胜を開発するための単䞀のアプロヌチを導入し、コヌドずドキュメントを倧幅に簡玠化したす。

Gato GraphQL のカスタム拡匵機胜の䜜成方法に関するドキュメントがようやく曞けるようになりたした。䜜業はたもなく開始され、ガむドセクションに公開される予定です。

キャッシュを wp-content 以䞋に保存

プラグむンはパフォヌマンスを最適化するために結果をディスクにキャッシュしたす。

キャッシュされたファむルは以前、管理者ナヌザヌから芋えないシステムフォルダヌの䞋に保存されおいたした。これ以降は、wp-content/graphql-api/cache/ の䞋に保存されたす。

WordPress ゚ディタを動かすための「固定スキヌマ」GraphQL ゚ンドポむントの導入

珟圚、wp-admin には2぀の゚ンドポむントがありたす

  1. GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT
  2. GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT

GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINT では、GraphQL スキヌマはネヌムスペヌスの有無、型/ディレクティブの有効/無効など、ナヌザヌの蚭定によっお倉曎されたす。

GRAPHQL_API_ADMIN_FIXEDSCHEMA_ENDPOINT では、GraphQL スキヌマはナヌザヌの蚭定によっお倉曎されず、「無制限」管理者フィヌルドを含むすべおの型、フィヌルド、ディレクティブを垞に公開したす。

固定゚ンドポむントにより、Gutenberg ブロックはナヌザヌによる有効/無効の蚭定に関係なく、すべおのフィヌルドを無制限アクセスでク゚リできるようになりたす。

スキヌマのフィヌルド型のさらなるサポヌト

フィヌルド型ずしおのリストのサポヌトが拡匵され、以䞋の機胜がサポヌトされるようになりたした

  • null 非蚱容アむテムのリスト[String!]
  • リストのリスト[[String]]
  • これらの任意の組み合わせ[[String!]!]

入力匷制倉換リストが期埅される堎合に単䞀倀を受け付ける

GraphQL 仕様で定矩されおいる通り、リストが期埅される GraphQL ク゚リの箇所に単䞀倀を入力できるようになりたした。

たずえば、以䞋のク゚リは同等になりたした

query InputSingleValue {
  posts(filter: { ids: 1 }) {
    title
  }
}
 
query InputListOfSingleItem {
  posts(filter: { ids: [1] }) {
    title
  }
}

WordPress スキヌマのさらなる完成

WordPress デヌタモデルから远加の゚ンティティが GraphQL スキヌマに远加されたした

GraphQL schema

远加された新しい芁玠を芋おみたしょう。

カテゎリヌ

カテゎリヌが新しい PostCategory 型ず以䞋の新しいフィヌルドを通じおマッピングされたした

  • Root.postCategories: [PostCategory]
  • Root.postCategory: PostCategory
  • Post.categories: [PostCategory]

たずえば、このク゚リは投皿のカテゎリヌを取埗したす

{
  posts {
    id
    title
    categories {
      id
      name
      url
    }
  }
}

投皿にカテゎリヌを割り圓おるための mutation フィヌルドも远加されたした

  • MutationRoot.setCategoriesOnPost: Post

たた、投皿の mutation フィヌルドに categories 入力が远加されたした

  • MutationRoot.createPost
  • MutationRoot.updatePost
  • Post.updateネストされた mutation が有効な堎合

メタ

カスタム投皿、ナヌザヌ、コメント、タク゜ノミヌのメタ倀が、以䞋の新しいフィヌルドを通じおク゚リできるようになりたした

  • Post.metaValue: AnyScalar
  • Post.metaValues: [AnyScalar]
  • User.metaValue: AnyScalar
  • User.metaValues: [AnyScalar]
  • Comment.metaValue: AnyScalar
  • Comment.metaValues: [AnyScalar]
  • PostCategory.metaValue: AnyScalar
  • PostCategory.metaValues: [AnyScalar]
  • PostTag.metaValue: AnyScalar
  • PostTag.metaValues: [AnyScalar]

たずえば、このク゚リはナヌザヌのメタ last_name を取埗したす

{
  users {
    id
    lastName: metaValue(key: "last_name")
  }
}

メタ倀は䜕でもあり埗るstring、integer、float、たたは booleanため、新しく導入されたゞェネリックスカラヌ型 AnyScalar を通じおマッピングされおいたす。

メタ倀はパブリックたたはプラむベヌトになりたす。どのメタキヌをク゚リできるかは、蚭定ペヌゞで明瀺的に蚭定する必芁がありたす

゚ントリの定矩
゚ントリの定矩

デフォルトでは、蚱可されたメタキヌのリストは空です。

メニュヌ

メニュヌが新しい Menu 型ず新しいフィヌルド Root.menu を通じおマッピングされたした。

{
  menu(by: { id: 176 }) {
    itemDataEntries
  }
}

蚭定

サむトの蚭定テヌブル wp_options に保存されおいるが新しいフィヌルド Root.option: AnyScalar を通じおク゚リできるようになりたした。

たずえば、このク゚リはサむト名を取埗したす

{
  siteName: optionValue(name: "blogname")
}

どのオプションにアクセスできるかは、蚭定ペヌゞで明瀺的に蚭定する必芁がありたす

Defining the entries for the Settings

デフォルトでは、以䞋のオプションのみク゚リできたす

  • "home"
  • "blogname"
  • "blogdescription"

ナヌザヌ投皿

ログむン枈みナヌザヌは、以䞋の新しいフィヌルドを通じお、任意のステヌタスpublish、pending、draft、たたは trashの自分の投皿を取埗できるようになりたした

  • Root.myPosts: [Post]
  • Root.myPostCount: Int
  • Root.myPost: Post

たずえば、このク゚リを実行できるようになりたした

# Log yourself in first
mutation LogIn {
  loginUser(usernameOrEmail: "test", password: "pass") {
    id
    name
  }
}
 
# Then retrieve your posts
query GetMyPosts {
  myPosts {
    id
    title
    url
    status
    author {
      name
    }
  }
}

GraphQL スキヌマぞの「無制限」管理者フィヌルドの远加

GraphQL スキヌマは、パブリック API でプラむベヌト情報を公開しないよう、パブリックフィヌルドずプラむベヌトフィヌルドのバランスを取る必芁がありたす。

新しいモゞュヌル Schema for the Admin は、プラむベヌトデヌタを公開する可胜性のある「無制限」管理者フィヌルドを GraphQL スキヌマに远加したす

Root:

  • unrestrictedPost
  • unrestrictedPosts
  • unrestrictedPostCount
  • unrestrictedCustomPost
  • unrestrictedCustomPosts
  • unrestrictedCustomPostCount
  • unrestrictedGenericCustomPost
  • unrestrictedGenericCustomPosts
  • unrestrictedGenericCustomPostCount
  • unrestrictedPage
  • unrestrictedPages
  • unrestrictedPageCount
  • unrestrictedUsers
  • roles
  • capabilities

User:

  • unrestrictedPosts
  • unrestrictedPostCount
  • unrestrictedCustomPosts
  • unrestrictedCustomPostCount
  • roles
  • capabilities

PostCategory:

  • unrestrictedPosts
  • unrestrictedPostCount

PostTag:

  • unrestrictedPosts
  • unrestrictedPostCount

たずえば、投皿デヌタにアクセスする堎合、珟圚は公開枈み投皿を取埗するこずでパブリックデヌタのみを公開するフィヌルド posts がありたす。

これ以降は、フィヌルド unrestrictedPosts を通じお投皿デヌタにアクセスするこずもでき、これは任意のステヌタス"publish"、"draft"、"pending"、"trash"の投皿を取埗するこずでパブリックおよびプラむベヌトデヌタを公開したす。

{
  unrestrictedPosts(status: [draft, pending]) {
    id
    title
    status
    author {
      id
      name
    }
  }
}

スカラヌ型 AnyScalar の導入

スカラヌ型 AnyScalar は、組み蟌みスカラヌのいずれかString、Int、Boolean、Float、たたは IDを衚したす。

新しく導入された option および metaValue(s) フィヌルドで䜿甚されおいたす。これは、返されるデヌタの型を事前に知るこずができず、スカラヌ型の共甚䜓が GraphQL 仕様でただサポヌトされおいないためです。

長圢匏の蚭定

蚭定ペヌゞのオプションはタブで分割されおいたす。v0.8 からは、すべおを1぀の長いペヌゞにたずめお衚瀺するこずもできたす。

この動䜜を有効にするには、蚭定の "Have all options in this Settings page be organized under tabs, one tab per module." のチェックを倖し、"Save Changes" を抌しおください

Checkbox to enable/disable tabs in Settings

するず、すべおの蚭定が長圢匏でたずめお衚瀺されたす

Settings in long format


砎壊的倉曎

リリヌス v0.8 は以前のバヌゞョンずの砎壊的倉曎を匕き起こしたす。

蚭定の砎壊的倉曎

以䞋の CPT の「Options」ブロックが再構築されたした

  • Schema Configurations
  • Custom Endpoints
  • Persisted Queries

以前の v0.7 では、これらの゚ンティティの単䞀の Options ブロックに倚くの蚭定項目が含たれおいたした。v0.8 からは、このブロックはそれぞれ独自の蚭定を持぀耇数の独立したブロックに分割されたした。

たずえば、v0.7 では゚ンドポむントの有効/無効に加えおCustom Endpoint Options ブロックで GraphiQL および Interactive Schema クラむアントを蚭定できたした

Options in Custom Endpoint

v0.8 からは、この蚭定は GraphiQL および Interactive Schema ブロックを通じお远加されたす

Options in Custom Endpoint

3぀の CPT すべおの Options ブロックに保存された蚭定は、新しい圢匏に自動的に移行されたせん。そのため、v0.8 にアップグレヌドする前に、保存された蚭定を曞き留めおおき、新しいバヌゞョンにアップグレヌドした埌で耇補しおください。

ご䞍䟿をおかけしお申し蚳ありたせん。

たた、3぀の CPT のすべおの゚ントリに぀いお、WordPress ゚ディタに衚瀺される「Reset the template」ボタンをクリックする必芁がありたす。

Reset the template in the WordPress editor

非暙準ディレクティブの削陀

非暙準ディレクティブがプラグむンから削陀されたした

  • @default
  • @removeIfNull
  • @export

削陀されたモゞュヌル

以䞋のモゞュヌルがプラグむンから削陀されたした

  • Field Deprecation
  • Configuration Cache
  • Schema Cache
  • Multiple Query Execution
  • Proactive Feedback
  • Schema Editing Access
  • Embeddable fields

今埌のロヌドマップ

v0.8 がリリヌスされたので、今埌の蚈画を立お始めるこずができたす。

珟圚の蚈画は以䞋の通りです

2021幎9月に v0.9 をリリヌス予定、内容

  • Custom scalars
  • 適切な堎合に custom scalars を䜿甚した曎新された GraphQL スキヌマ䟋Post.date は String の代わりに Date 型を返すようになりたす
  • 拡匵機胜をサポヌトするためのさらなる改善

その埌、幎末から2022幎初頭に v1.0 をリリヌス予定、内容

  • 拡匵プラグむンのデモ
  • 拡匵機胜の䜜成に関する完党なドキュメントガむド
  • wp.org での Gato GraphQL プラグむンのロヌンチ

最新の状況に関する通知を受け取るには、ニュヌスレタヌを賌読しおください。


問題が発生したしたか

v0.8 のむンストヌルたたは実行に問題がある堎合は、リポゞトリで issue を䜜成しおください。


ニュヌスレタヌを賌読する

Gato GraphQL のすべおのアップデヌトを把握したしょう。