ð Gato GraphQL ããŒãžã§ã³ 0.8 ããªãªãŒã¹ããŸããïŒ
Gato GraphQL ããŒãžã§ã³ 0.8 ãããŠã³ããŒãå¯èœã«ãªããŸããïŒ ð
ããã¯éåžžã«å€§ããªãªãªãŒã¹ã§ã以äžã®3ã€ã®é åã«çŠç¹ãåœãŠãŠããŸãïŒ
- æ¡åŒµæ©èœãæå¹ã«ããããã®ã³ãŒãããŒã¹ã®ãªãã¡ã¯ã¿ãªã³ã°
- GraphQL 仿§ã®ãããªãæºæ
- GraphQL ã¹ããŒãã®å®æ
ãŸããæ°ãã WordPress 5.8 ããµããŒããã倿°ã®ãã°ä¿®æ£ãšæ¹åãå«ãŸããŠããŸãã
ãã®ãªãªãŒã¹ã«ã¯ç Žå£ç倿Žãå«ãŸããŠããŸãã®ã§ã泚æãã ããã
以äžã¯ãªãªãŒã¹ããŒãã§ããã¯ã€ãã¯ãªã³ã¯ïŒ
- WordPress 5.8 ã®ãµããŒã
- PHP 8.0 ãµããŒãã®æ¹å
- ã³ã³ãããµãŒãã¹ãå šé¢çã«äœ¿çšããã³ãŒãããŒã¹ã®ç°¡çŽ å
- ãã£ãã·ã¥ã
wp-content以äžã«ä¿å - WordPress ãšãã£ã¿ãåããããã®ãåºå®ã¹ããŒããGraphQL ãšã³ããã€ã³ãã®å°å ¥
- ã¹ããŒãã®ãã£ãŒã«ãåã®ãããªããµããŒã
- å ¥å匷å¶å€æïŒãªã¹ããæåŸ ãããå Žåã«åäžå€ãåãä»ãã
- WordPress ã¹ããŒãã®ãããªã宿
- GraphQL ã¹ããŒããžã®ãç¡å¶éã管çè ãã£ãŒã«ãã®è¿œå
- ã¹ã«ã©ãŒå
AnyScalarã®å°å ¥ - é·åœ¢åŒã®èšå®
- ç Žå£ç倿Ž
- ä»åŸã®ããŒãããã
- åé¡ãçºçããŸãããïŒ
WordPress 5.8 ã®ãµããŒã
WordPress 5.8 ã¯ããã®ãã©ã°ã€ã³ã§äœ¿çšãããŠãã allowed_block_types ã block_categories ãå«ãããã€ãã®ãã£ã«ã¿ãŒããã¯ãéæšå¥šåããŸããã
圱é¿ãåããããã¯ã¯ä»¥äžã®ããã«çœ®ãæããããŸããïŒ
allowed_block_types=>allowed_block_types_allblock_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ã€ã®ãšã³ããã€ã³ãããããŸãïŒ
GRAPHQL_API_ADMIN_CONFIGURABLESCHEMA_ENDPOINTGRAPHQL_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 ã¹ããŒãã«è¿œå ãããŸããïŒ

远å ãããæ°ããèŠçŽ ãèŠãŠã¿ãŸãããã
ã«ããŽãªãŒ
ã«ããŽãªãŒãæ°ãã PostCategory åãšä»¥äžã®æ°ãããã£ãŒã«ããéããŠãããã³ã°ãããŸããïŒ
Root.postCategories: [PostCategory]Root.postCategory: PostCategoryPost.categories: [PostCategory]
ããšãã°ããã®ã¯ãšãªã¯æçš¿ã®ã«ããŽãªãŒãååŸããŸãïŒ
{
posts {
id
title
categories {
id
name
url
}
}
}æçš¿ã«ã«ããŽãªãŒãå²ãåœãŠãããã® mutation ãã£ãŒã«ãã远å ãããŸããïŒ
MutationRoot.setCategoriesOnPost: Post
ãŸããæçš¿ã® mutation ãã£ãŒã«ãã« categories å
¥åã远å ãããŸããïŒ
MutationRoot.createPostMutationRoot.updatePostPost.updateïŒãã¹ãããã mutation ãæå¹ãªå ŽåïŒ
ã¡ã¿
ã«ã¹ã¿ã æçš¿ããŠãŒã¶ãŒãã³ã¡ã³ããã¿ã¯ãœãããŒã®ã¡ã¿å€ãã以äžã®æ°ãããã£ãŒã«ããéããŠã¯ãšãªã§ããããã«ãªããŸããïŒ
Post.metaValue: AnyScalarPost.metaValues: [AnyScalar]User.metaValue: AnyScalarUser.metaValues: [AnyScalar]Comment.metaValue: AnyScalarComment.metaValues: [AnyScalar]PostCategory.metaValue: AnyScalarPostCategory.metaValues: [AnyScalar]PostTag.metaValue: AnyScalarPostTag.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")
}ã©ã®ãªãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ãããã¯ãèšå®ããŒãžã§æç€ºçã«èšå®ããå¿ èŠããããŸãïŒ

ããã©ã«ãã§ã¯ã以äžã®ãªãã·ã§ã³ã®ã¿ã¯ãšãªã§ããŸãïŒ
"home""blogname""blogdescription"
ãŠãŒã¶ãŒæçš¿
ãã°ã€ã³æžã¿ãŠãŒã¶ãŒã¯ã以äžã®æ°ãããã£ãŒã«ããéããŠãä»»æã®ã¹ããŒã¿ã¹ïŒpublishãpendingãdraftããŸã㯠trashïŒã®èªåã®æçš¿ãååŸã§ããããã«ãªããŸããïŒ
Root.myPosts: [Post]Root.myPostCount: IntRoot.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:
unrestrictedPostunrestrictedPostsunrestrictedPostCountunrestrictedCustomPostunrestrictedCustomPostsunrestrictedCustomPostCountunrestrictedGenericCustomPostunrestrictedGenericCustomPostsunrestrictedGenericCustomPostCountunrestrictedPageunrestrictedPagesunrestrictedPageCountunrestrictedUsersrolescapabilities
User:
unrestrictedPostsunrestrictedPostCountunrestrictedCustomPostsunrestrictedCustomPostCountrolescapabilities
PostCategory:
unrestrictedPostsunrestrictedPostCount
PostTag:
unrestrictedPostsunrestrictedPostCount
ããšãã°ãæçš¿ããŒã¿ã«ã¢ã¯ã»ã¹ããå ŽåãçŸåšã¯å
¬éæžã¿æçš¿ãååŸããããšã§ãããªãã¯ããŒã¿ã®ã¿ãå
¬éãããã£ãŒã«ã 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" ãæŒããŠãã ããïŒ

ãããšããã¹ãŠã®èšå®ãé·åœ¢åŒã§ãŸãšããŠè¡šç€ºãããŸãïŒ

ç Žå£ç倿Ž
ãªãªãŒã¹ v0.8 ã¯ä»¥åã®ããŒãžã§ã³ãšã®ç Žå£ç倿ŽãåŒãèµ·ãããŸãã
èšå®ã®ç Žå£ç倿Ž
以äžã® CPT ã®ãOptionsããããã¯ãåæ§ç¯ãããŸããïŒ
- Schema Configurations
- Custom Endpoints
- Persisted Queries
以åã® v0.7 ã§ã¯ããããã®ãšã³ãã£ãã£ã®åäžã® Options ãããã¯ã«å€ãã®èšå®é
ç®ãå«ãŸããŠããŸãããv0.8 ããã¯ããã®ãããã¯ã¯ããããç¬èªã®èšå®ãæã€è€æ°ã®ç¬ç«ãããããã¯ã«åå²ãããŸããã
ããšãã°ãv0.7 ã§ã¯ïŒãšã³ããã€ã³ãã®æå¹/ç¡å¹ã«å ããŠïŒCustom Endpoint Options ãããã¯ã§ GraphiQL ããã³ Interactive Schema ã¯ã©ã€ã¢ã³ããèšå®ã§ããŸããïŒ

v0.8 ããã¯ããã®èšå®ã¯ GraphiQL ããã³ Interactive Schema ãããã¯ãéããŠè¿œå ãããŸãïŒ

3ã€ã® CPT ãã¹ãŠã® Options ãããã¯ã«ä¿åãããèšå®ã¯ãæ°ãã圢åŒã«èªåçã«ç§»è¡ãããŸããããã®ãããv0.8 ã«ã¢ããã°ã¬ãŒãããåã«ãä¿åãããèšå®ãæžãçããŠãããæ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããåŸã§è€è£œããŠãã ããã
ãäžäŸ¿ããããããŠç³ãèš³ãããŸããã
ãŸãã3ã€ã® CPT ã®ãã¹ãŠã®ãšã³ããªã«ã€ããŠãWordPress ãšãã£ã¿ã«è¡šç€ºããããReset the templateããã¿ã³ãã¯ãªãã¯ããå¿ èŠããããŸãã

éæšæºãã£ã¬ã¯ãã£ãã®åé€
éæšæºãã£ã¬ã¯ãã£ãããã©ã°ã€ã³ããåé€ãããŸããïŒ
@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 ãäœæããŠãã ããã