👷🏽♂️ การสร้าง Gato GraphQL อย่างเปิดเผย #1 (มีนาคม '21)
ยินดีต้อนรับสู่ฉบับแรกของจดหมายข่าว "Building in the Open"!
นี่คือช่องทางในการแบ่งปันข่าวสารเกี่ยวกับการพัฒนา Gato GraphQL กับชุมชน ส่งในสัปดาห์แรกของทุกเดือน
ผ่านพื้นที่นี้ เราจะได้เรียนรู้ทุกสิ่งที่เกิดขึ้นในเดือนที่ผ่านมา รวมถึง:
✅ สิ่งที่เราทำงานอยู่ และฟีเจอร์ใหม่ที่เปิดตัว
✅ สิ่งที่เราจะทำงานในเดือนหน้า
✅ ปริมาณการเข้าชมเว็บไซต์
✅ ผลการดำเนินงานของปลั๊กอิน: จำนวนดาวน์โหลด, การสมัครสมาชิกจดหมายข่าว, GitHub stars
✅ ความคืบหน้าในการบรรลุความยั่งยืนทางการเงิน
✅ คู่มือที่เพิ่งเผยแพร่ใหม่
✅ สรุปบทความบล็อกที่เพิ่งเผยแพร่
✅ การเข้าถึง / การกล่าวถึงปลั๊กอิน
✅ ข่าวทั่วไป
หากคุณสนุกกับจดหมายข่าวนี้ โปรดชวนเพื่อนๆ มาสมัครสมาชิกด้วย
เริ่มกันเลย!
หมายเหตุ: จดหมายข่าวนี้เป็นช่องทางสื่อสารสองทาง หากมีสิ่งใดที่คุณอยากบอก ยินดีให้เพิ่มความคิดเห็น (ที่ด้านล่างของบทความบล็อก)

สิ่งที่เราทำงานโค้ดอยู่
หากคุณดูคู่มือ จะพบว่าส่วน "Extending Gato GraphQL" ยังค่อนข้างว่างเปล่า:

ลำดับความสำคัญของผมคือการทำคู่มือเหล่านี้ให้เสร็จสมบูรณ์ แต่ก่อนที่จะทำเช่นนั้น ผมต้องการให้โค้ดของปลั๊กอินง่ายที่สุดเท่าที่จะเป็นไปได้ ยิ่งง่ายเท่าไหร่ ก็ยิ่งต้องการเอกสารน้อยลง และยิ่งมีคนเข้าใจได้มากขึ้นเท่านั้น
ด้วยแนวคิดนี้ ผมจึงตัดสินใจ refactor โค้ดให้ใช้ Symfony's DependencyInjection Component อย่างสมบูรณ์
แนวคิดคือการขยายปลั๊กอิน (เช่น TypeResolver, FieldResolver หรือ DirectiveResolver แบบกำหนดเอง) เพียงแค่กำหนดเป็น service ใน container และ service จะถูกตั้งค่าโดยอัตโนมัติผ่าน Compiler passes
การพึ่งพา dependency injection ของ Symfony อย่างสมบูรณ์มีข้อดีหลายประการ:
✅ มีวิธีที่สม่ำเสมอและเป็นหนึ่งเดียวในการสร้าง extensions
✅ เพียงแค่สร้าง PHP class ที่ implement interface บางอย่างก็เสร็จงาน และนักพัฒนาไม่จำเป็นต้องรู้รายละเอียดปลีกย่อย
✅ เอกสารของ Symfony ครอบคลุมมากๆ การชี้นักพัฒนาไปที่นั่น คือเอกสารที่ผมไม่จำเป็นต้องเขียน
สนใจในโค้ดไหม? ดู PR ที่ merge ล่าสุดของผม (#453, #452, #449 และอีกหลายรายการ)
ผมจะทำงานกับโค้ดนี้ต่อไปในอีกไม่กี่สัปดาห์ข้างหน้า จนกว่าการ migration จะเสร็จสมบูรณ์ 100% และผมได้เขียนคู่มือที่ยังขาดอยู่
การเข้าชม gatographql.com
ขอชัดเจนในเรื่องนี้: ผมสนใจว่ามีคนเข้าชมเว็บไซต์ของปลั๊กอินกี่คน ในฐานะตัวชี้วัดแทนว่ามีคนรู้จักปลั๊กอินกี่คน
ผมไม่มีเงินทุนมากพอที่จะโปรโมตปลั๊กอิน และแม้ว่าจะมี ผมก็ไม่อยากใช้เงินในการโปรโมต เพราะมันขัดกับจิตวิญญาณของ open source (สิ่งนี้จะต่างออกไปหาก open source เป็นเพียงช่องทางในการขายผลิตภัณฑ์หรือบริการบางอย่าง แต่นั่นไม่ใช่กรณีของผม)
นั่นหมายความว่าผมพึ่งพาการบอกต่อเป็นหลักในการโปรโมต ด้วยเหตุนี้ ผมจึงทุ่มเทความพยายามอย่างมากในการเขียนเนื้อหาคุณภาพสูงสำหรับบล็อกของปลั๊กอิน โดยหวังว่าเนื้อหาเหล่านี้จะได้รับการแบ่งปัน และเข้าถึงผู้คนที่อาจไม่รู้จักปลั๊กอินมาก่อน
และจนถึงตอนนี้ ผมค่อนข้างพอใจกับผลลัพธ์
ในเดือนที่ผ่านมา มีผู้เข้าชม 4,500 คน และ 6,000 pageviews:

มาแจกแจงสถิติเหล่านี้กัน
ผู้เข้าชมส่วนใหญ่มาจาก Hacker News ที่ผมสามารถขึ้นหน้าแรก "Show HN" ได้หลายครั้ง และจาก Reddit ส่วนใหญ่มาจาก /r/PHP และ /r/graphql (ที่ที่ผมแบ่งปันบทความอยู่เสมอ)
ผมสามารถติดอันดับ #1 บน Google เมื่อค้นหา "wordpress core graphql" ซึ่งนำทราฟฟิกมามากมาย แต่น่าเสียดายที่มันเป็นเพียงครั้งเดียว: หลังจาก 24 ชั่วโมง มันก็หายไปอย่างฉับพลันเหมือนที่มันมา นอกจากนั้น ในวันปกติผมได้รับผู้เข้าชมจาก Google ระหว่าง 3 ถึง 10 คน
Twitter และ Facebook นำทราฟฟิกมาพอสมควร แต่ผมไม่รู้ว่าจากใคร (ไม่ใช่จากผม เพราะผมแย่มากในการใช้โซเชียลมีเดีย) ผมแบ่งปันบทความบน Twitter แต่แทบไม่เคยถูก retweet และผมไม่ใช้ 👎🏾 Facebook
(อนึ่ง สำหรับผู้ที่แบ่งปันบทความของผมบนโซเชียลมีเดีย ขอบคุณมากๆ ❤️)
ผมได้รับทราฟฟิกที่ไม่มากแต่สม่ำเสมอจากรายชื่อ GraphQL servers ใน PHP บน graphql.org และจากบทความที่ผมเผยแพร่บน dev.to ซึ่งติดอันดับ #1 เมื่อค้นหา "graphql execute multiple queries" บน Google
สุดท้าย บทความของผมปรากฏในจดหมายข่าวหลักของ WordPress อย่างสม่ำเสมอ (รวมถึง WP Owls, wpMail.me, Post Status, WP Builds, และ The WP Weekly) ผมไม่รู้แน่ชัดว่าแต่ละฉบับนำทราฟฟิกมาเท่าไหร่ เพราะ referrer จะแสดงเป็น Gmail และที่อื่นๆ ที่คล้ายกัน อย่างไรก็ตาม เมื่อรวมกันแล้ว จดหมายข่าวเหล่านี้สร้างผู้เข้าชมได้จำนวนมากพอสมควร
บทความในบล็อกของผมเป็นเนื้อหาที่ได้รับความนิยมมากที่สุดอย่างเห็นได้ชัด โดยสามบทความล่าสุด (บทความนี้, บทความนี้ และ บทความนี้) แต่ละบทความนำผู้เข้าชมมากกว่า 1,000 คน
ตัวเลขเหล่านี้ดูดีมากทีเดียว โดยเฉพาะเมื่อพิจารณาว่าเว็บไซต์เพิ่งเปิดตัวได้ไม่ถึง 2 เดือน อย่างไรก็ตาม ไม่ใช่ทุกอย่างจะดี: อัตรา bounce rate ที่ 88% นั้นค่อนข้างสูง ผมต้องแก้ไขตรงนั้น
Metrics
ทราฟฟิกของเว็บไซต์เป็นเพียงตัวชี้วัดเสริมเพื่อประเมินการรับรู้ถึงปลั๊กอิน แต่คำถามที่สำคัญกว่ามากคือ: มีคนเริ่มใช้ปลั๊กอินในเดือนที่ผ่านมากี่คน?

ในเดือนที่ผ่านมา ปลั๊กอินมีผลการดำเนินงานดังนี้:
🎯 จำนวนดาวน์โหลดปลั๊กอิน: 170
⭐️ GitHub stars: 27
จำนวนดาวน์โหลดสามารถดึงข้อมูลได้จาก GitHub API โดยส่ง param per_page=3 เพื่อรวมเฉพาะ 3 releases ที่สร้างในเดือนที่ผ่านมา:
curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/GatoGraphQL/GatoGraphQL/releases?per_page=3 | grep "download_count"ผมไม่ได้รู้สึกดีใจหรือไม่พอใจกับตัวเลขเหล่านี้ มันไม่ดีเลิศ (และผมหวังว่าจะดีกว่านี้) แต่มันเป็นจุดเริ่มต้นที่ดี
เกี่ยวกับดาวน์โหลด มีคนกล่าวว่าการหาผู้ใช้คนแรกเป็นงานที่ยากที่สุด เพียงหลังจากที่มีคนไม่กี่คนเริ่มใช้ปลั๊กอินและเริ่มพูดถึงมัน การใช้งานจึงจะแพร่หลายมากขึ้น ผมยังอยู่ในช่วงเริ่มต้นของการหาผู้ใช้กลุ่มแรกที่มีความผูกพัน
เกี่ยวกับGitHub stars ต้องบอกว่ามันดูค่อนข้างคงที่: เฉลี่ยประมาณ 1 star ต่อวัน นี่ไม่ใช่สิ่งที่ยอดเยี่ยมเลย หากคุณชอบสิ่งที่ผมสร้างด้วย Gato GraphQL และไม่รังเกียจที่จะแสดงความ ❤️ รัก โปรดพิจารณาให้ ⭐️ star บน GitHub
ความยั่งยืนทางการเงิน
นี่คือปัญหาที่ยาก: โปรเจกต์ต้องยั่งยืนทางการเงิน มันต้องสร้างรายได้บ้าง ไม่เช่นนั้นจะอยู่ไม่ได้นาน

หากผมสามารถสร้างรายได้ให้ตัวเองได้ ผมก็สามารถทำงานต่อไปเท่าที่จำเป็น นั่นคือสิ่งที่ผมต้องการ: รายได้ ไม่ใช่นักลงทุนที่เคาะประตูหาล้านๆ เพียงสองสามพันต่อเดือนเพื่อจ่ายค่าที่พักอาศัย
เป้าหมายของผมคือการรักษาปลั๊กอินให้เป็น open source อย่างสมบูรณ์ ด้วยเหตุนี้ ผมกำลังติดต่อกับผู้มีโอกาสเป็น sponsors สองสามรายเพื่อถามว่าพวกเขาต้องการช่วยเหลือทางการเงินในการพัฒนาปลั๊กอินหรือไม่ มันจะเป็นสถานการณ์ที่ทั้งสองฝ่ายได้ประโยชน์
ทำไมผมถึงหันหา sponsors "ใหญ่" แทนที่จะพึ่งพา sponsorship ปกติจากทุกคนในชุมชน?
ใช่ ผมลองทำแบบนั้นด้วย: ผมอยู่บน GitHub Sponsors อย่างไรก็ตาม มันไม่ค่อยได้ผลเว้นแต่คุณจะมีผู้ใช้, ผู้ติดตาม หรือคนสมัครรับข่าวสารหลายพันคนอยู่แล้ว ที่คุณสามารถติดต่อและคาดหวังให้หลายคนสนับสนุนคุณ
ตัวอย่างเช่น หากขอ $5 หรือ $10 ต่อเดือน ผมต้องการผู้สนับสนุนหลายร้อยคนสำหรับแนวทางนี้จะครอบคลุมงานของผม และผมยังห่างไกลจากจุดนั้นมาก
แต่มากกว่านั้น ใครบ้างที่ประสบความสำเร็จจริงๆ ด้วยแนวทางนี้? Caleb Porzio (ผู้สร้าง Livewire) ทำสำเร็จ และตอนนี้มี sponsors มากกว่า 1,350 ราย! แต่นั่นเป็นข้อยกเว้น ไม่ใช่บรรทัดฐาน
ลองดู Composer เป็นตัวอย่าง Composer เปลี่ยนวิธีที่เราพัฒนาแอปพลิเคชัน PHP อย่างพื้นฐาน แต่มี sponsors เพียงประมาณ 90 ราย ผมจะคาดหวังได้อย่างไรว่าจะได้รับ sponsors มากกว่า Composer?
นั่นคือเหตุผลที่แนวทางปัจจุบันของผมคือการสร้างสถานการณ์ที่ win-win สำหรับโปรเจกต์และบริษัทไม่กี่แห่งที่ยินดีจะ sponsor มัน หวังว่ามันจะได้ผล และ Gato GraphQL จะฟรีสำหรับทุกคน สำหรับทุกฟีเจอร์ และผมไม่จำเป็นต้องล็อคสิ่งดีๆ ไว้หลัง paywall
(หากคุณอยากทราบว่ามันเป็น win-win อย่างไร โปรดส่งอีเมลถึงผม หรือDM บางทีบริษัทของคุณอาจสนใจด้วย?)
ผมจะให้เวลาแนวทางนี้สองสามเดือน หวังว่าจะทำให้มันเกิดขึ้นได้ หากไม่สำเร็จ ในตอนนั้นผมจะต้องพิจารณาสร้างปลั๊กอินเวอร์ชัน PRO และจำกัดบางฟีเจอร์สำหรับเวอร์ชันที่ต้องชำระเงิน (ใช่ มันคงแย่ ดังนั้นผมหวังว่าจะหลีกเลี่ยงขั้นตอนนั้นได้)
ในจดหมายข่าวฉบับต่อๆ ไป ผมจะอัปเดตว่าผมได้รับ sponsors หรือไม่
บทความบล็อก
บทความบล็อกเป็นสิ่งที่ผมภาคภูมิใจและดีใจอย่างยิ่ง
หมายเหตุ: คุณทราบไหมว่าเว็บไซต์มีRSS feed? คุณสามารถสมัครรับบทความบล็อกทั้งหมดของผม และอ่านบน reader ที่คุณชื่นชอบ
ในเดือนที่ผ่านมา ผมสามารถเผยแพร่บทความบล็อกคุณภาพสูงได้ทุกสัปดาห์:
🛠 WordPress ควรมี GraphQL API ใน core หรือไม่? นำเสนอเหตุผลว่า WordPress อาจได้รับประโยชน์จาก GraphQL เนื่องจาก WP REST API ได้รับฟังก์ชันใหม่ใน WordPress 5.6 (batch operations) ซึ่ง GraphQL API สามารถส่งมอบได้โดยธรรมชาติ
🥊 Gato GraphQL vs WPGraphQL: การต่อสู้! เปรียบเทียบปลั๊กอินของผมกับ WPGraphQL ในการปะทะที่จะถูกจดจำไปชั่วกาลนาน และทำให้แฟนมวยอยากได้ยินต่อ
👶🏻 Rejuvenating WordPress ผ่าน GraphQL แสดงให้เห็นว่า headless WordPress สามารถแยกออกจาก WordPress codebase ได้อย่างไร เปิดโอกาสในการแก้ไข (หรืออย่างน้อยหลีกเลี่ยง) หนี้ทางเทคนิคที่สะสม
🍾 Gato GraphQL ได้รับการ scope แล้ว ขอบคุณ PHP-Scoper! อธิบายกลยุทธ์ในการ scope ปลั๊กอิน WordPress โดยใช้ PHP-Scoper เพื่อหลีกเลี่ยงความขัดแย้งกับปลั๊กอินอื่นๆ
การเข้าถึง / การกล่าวถึงปลั๊กอิน
ผมยินดีมากที่ปลั๊กอินได้รับการนำเสนอในหลายสถานที่
✅ ผมได้บรรยาย "Intro to Gato GraphQL" ใน WordCamp India 2021 โดยทำ demo ปลั๊กอิน และ (ซึ่งน่าแปลกใจสำหรับการ demo) ทุกอย่างออกมาสมบูรณ์แบบ! ดูวิดีโอ YouTube
✅ Joe Howard ได้สัมภาษณ์ผมสำหรับpodcast WPMRR การบันทึกเสียงจะออกในเร็วๆ นี้
✅ Chris Coyier นำเสนอปลั๊กอินของผมในจดหมายข่าว CSS-Tricks #239!

เรื่องราวต่างๆ
ข่าวทั่วไปเกี่ยวกับสิ่งต่างๆ ที่เกิดขึ้นในเดือนที่ผ่านมา
Jason Bahl เข้าร่วม WP Engine
ขอแสดงความยินดีกับJason ที่เข้าร่วม WP Engine! ผมหวังว่าเขาจะยังคงสร้างผลงานยอดเยี่ยมต่อไป เหมือนที่เขาทำมาสำหรับ WPGraphQL
อนึ่ง ความจริงที่ว่าเราเป็นคู่แข่ง (เอาจริงๆ ผมเป็นฝ่ายแข่งกับเขา เขาอยู่ข้างหน้าผมไกลมาก) ไม่ได้หมายความว่าเราจะเป็นเพื่อนกันไม่ได้ หรือร่วมมือกันเพื่อพัฒนาโปรเจกต์ของกันและกันไม่ได้ ความจริงแล้ว เราทั้งสองมีเป้าหมายเดียวกัน: นำ GraphQL มาสู่ WordPress (แม้ว่าเราจะมีความคิดต่างกันว่าควรทำอย่างไร)
แต่ผมเชื่อว่าการแข่งขันเป็นสิ่งดี และมันจะเป็นประโยชน์ต่อทุกคน

WP Engine เปิดตัว Atlas และอ้างว่ารู้ทุกอย่างเกี่ยวกับ headless (จริงหรือ?)
ผมขอแสดงความยินดีกับ WP Engine สำหรับการเปิดตัว Atlas ซึ่งเป็นโซลูชัน headless WordPress ใหม่
น่าเสียดายที่พวกเขาระบุข้อมูลที่ไม่ถูกต้อง:
บริษัทที่ใช้โซลูชัน headless อย่างสมบูรณ์มักจะโฮสต์แอปพลิเคชัน JavaScript แยกต่างหากสำหรับ front end ซึ่งดึงข้อมูล WordPress ที่เจาะจงผ่าน APIs — WordPress REST API หรือปลั๊กอิน WPGraphQL
ใช่แล้ว Gato GraphQL ไม่มีอยู่จริง ใช่ไหม?

โดยปกติผมจะไม่วิตกกังวลเรื่องนี้ เนื่องจากผมไม่คาดหวังว่าทุกคนจะรู้จักปลั๊กอินของผม แต่ผมเชื่อว่าพวกเขารู้จักโปรเจกต์ของผม และดูเหมือนว่าพวกเขาจงใจเพิกเฉยต่อมัน
หลังจากที่พวกเขาเปิดตัว developers.wpengine.com ("ศูนย์รวมทุกสิ่งสำหรับ best practices, tutorials, blogs, และเอกสารสำหรับ headless WordPress") ผมได้ติดต่อพวกเขา:
- Matt Landers, Developer Relations ที่ WP Engine สำหรับ Headless WordPress, บน Twitter
- ทีมพัฒนา, บน headless framework GitHub repo ของพวกเขา
- บางคนจาก Torque (นิตยสารที่ WP Engine เป็นเจ้าของ) ผ่าน DMs กับ @TheTorqueMag
ผมเดาว่าพวกเขาไม่ได้จริงจังกับโปรเจกต์ของผม หรืออาจไม่แคร์ เพราะพวกเขาลงทุนอย่างเต็มที่กับ WPGraphQL
ผมโอเคหากพวกเขาไม่อยากกล่าวถึงปลั๊กอินของผม อย่างไรก็ตาม การระบุว่า WP REST API และ WPGraphQL เป็นเพียงสองตัวเลือกนั้นทำให้เข้าใจผิดอย่างมาก ผลที่ตามมาคือปลั๊กอินของผมได้รับความเสียหาย และชุมชนนักพัฒนาเกิดความสับสน
ดังนั้น ใช่ ผมต้องยอมรับว่าผมรู้สึกรำคาญ นี่ไม่ดีเลยทีเดียว ผมหวังว่าพวกเขาจะแก้ไขข้อมูลที่ไม่ถูกต้อง (ผมส่งอีเมลถึงพวกเขาแล้ว)
สรุป
นั่นคือจุดสิ้นสุดของ "Building Gato GraphQL in the Open" ครั้งแรก
คุณชอบมันอย่างไร? ยินดีให้แบ่งปันความคิดของคุณในความคิดเห็น
หากคุณชอบมัน ผมจะขอบคุณมากหากคุณสามารถแบ่งปันจดหมายข่าวกับเพื่อนๆ ของคุณ (หรือดีกว่านั้น ชวนพวกเขามาสมัครสมาชิก)
แล้วพบกันเดือนหน้า!