- vinext คือ เฟรมเวิร์กที่เข้ากันได้กับ Next.js ที่ AI และวิศวกรหนึ่งคนสร้างขึ้นภายในหนึ่งสัปดาห์ โดยทำงานบน Vite และสามารถดีพลอยไปยัง Cloudflare Workers ได้ด้วยคำสั่งบรรทัดเดียว
- ความเร็วในการบิลด์สูงสุดเร็วขึ้น 4.4 เท่า และ ขนาดไคลเอนต์บันเดิลเล็กลง 57% พร้อมใช้โครงสร้างไดเรกทอรีและการตั้งค่าเดียวกับโปรเจกต์ Next.js เดิมได้ทันที
- ออกแบบมาสำหรับ Cloudflare Workers โดยรองรับ ISR caching บน KV และ Traffic-aware Pre-Rendering หรือ การพรีเรนเดอร์ตามทราฟฟิก
- โค้ดส่วนใหญ่ทั้งหมดถูก AI เขียน และมีการยืนยันคุณภาพผ่านการทดสอบมากกว่า 1,700 รายการและการรีวิวโค้ดอัตโนมัติ
- โปรเจกต์นี้เป็น กรณีศึกษาที่แสดงให้เห็นว่า AI ไปถึงระดับที่สามารถรีอิมพลีเมนต์เฟรมเวิร์กที่ซับซ้อนได้แล้ว และชี้ให้เห็นถึงความเป็นไปได้ของการเปลี่ยนแปลงโครงสร้างการพัฒนาซอฟต์แวร์ในอนาคต
ข้อจำกัดด้านการดีพลอยของ Next.js และการมองเห็นปัญหา
- Next.js เป็นเฟรมเวิร์กหลักบน React แต่ เมื่อต้องดีพลอยในสภาพแวดล้อม serverless จำเป็นต้องมีกระบวนการแปลงผลลัพธ์การบิลด์ที่ซับซ้อน
- หากต้องการดีพลอยไปยัง Cloudflare, Netlify, AWS Lambda ฯลฯ ต้องจัดโครงสร้างผลลัพธ์การบิลด์จาก Turbopack ของ Next.js ใหม่ให้เหมาะกับแต่ละแพลตฟอร์ม
- แม้ OpenNext จะพยายามแก้ปัญหานี้ แต่ก็เกิดความไม่เสถียรในแต่ละเวอร์ชัน เนื่องจาก ข้อจำกัดเชิงโครงสร้างที่ต้องย้อนวิศวกรรมผลลัพธ์การบิลด์ของ Next.js
- แม้ Next.js จะกำลังพัฒนา adapter API อยู่ แต่ก็ยังมีข้อจำกัดว่า โครงสร้าง dev server ที่ผูกกับ Node.js โดยเฉพาะ ทำให้ทดสอบ API ของแต่ละแพลตฟอร์มได้ยาก
โครงสร้างและจุดเด่นของ vinext
- vinext เป็นเฟรมเวิร์กทางเลือกที่ รีอิมพลีเมนต์ API ของ Next.js โดยตรงบน Vite
- หลัง
npm install vinext ก็เพียงเปลี่ยนคำสั่ง next เป็น vinext ก็สามารถรันโปรเจกต์เดิมได้ทันที
- รวมขั้นตอนพัฒนา บิลด์ และดีพลอยไว้ในคำสั่ง
vinext dev, vinext build, vinext deploy
- ฟีเจอร์หลักของ Next.js เช่น routing, server rendering, React Server Components, server actions, caching, middleware ถูกทำเป็น Vite plugin
- ใช้ Vite Environment API เพื่อสร้างผลลัพธ์การบิลด์ที่ไม่ขึ้นกับแพลตฟอร์ม
เบนช์มาร์กด้านประสิทธิภาพ
- เปรียบเทียบกับ Next.js 16 โดยใช้แอปเดียวกันที่มี 33 routes
- เวลาบิลด์: vinext (Vite 8/Rolldown) 1.67 วินาที → เร็วกว่า Next.js 4.4 เท่า
- ขนาดไคลเอนต์บันเดิล: 72.9KB → เล็กกว่า Next.js 57%
- การทดสอบทำบน GitHub CI และ วัดเฉพาะความเร็วในการคอมไพล์และบันเดิล
- Rolldown บันเดลเลอร์ที่พัฒนาด้วย Rust ใน Vite 8 มีส่วนช่วยเพิ่มประสิทธิภาพการบิลด์
การดีพลอยบน Cloudflare Workers
- คำสั่ง
vinext deploy จะทำ การบิลด์และดีพลอยแบบอัตโนมัติ
- รองรับทั้ง App Router และ Pages Router รวมถึง client hydration และ state management
- มี Cloudflare KV cache handler สำหรับ ISR (Incremental Static Regeneration) มาให้โดยตรง
- สามารถเปลี่ยน backend ของแคชได้ และขยายไปใช้ R2 หรือ Cache API ได้
- มีตัวอย่างการทำงานจริงที่เปิดเผยไว้ เช่น App Router Playground และ Hacker News clone
Traffic-aware Pre-Rendering (TPR)
- ปรับปรุง ความไม่มีประสิทธิภาพของการพรีเรนเดอร์แบบสแตติก ที่อิงกับ
generateStaticParams() ของ Next.js เดิม
- ใช้ข้อมูลทราฟฟิกของ Cloudflare เพื่อ พรีเรนเดอร์เฉพาะหน้าที่มีผู้เข้าชมมากในช่วง 24 ชั่วโมงล่าสุด
- ตัวอย่าง: จาก 100,000 หน้า เรนเดอร์เพียง 184 หน้า (คิดเป็น 90% ของทราฟฟิกทั้งหมด) ได้ภายใน 8.3 วินาที
- หน้าที่เหลือจะ SSR เมื่อมีคำขอแล้วจึงแคชแบบ ISR และอัปเดตอัตโนมัติตามรูปแบบทราฟฟิกในแต่ละครั้งที่ดีพลอย
กระบวนการพัฒนาด้วย AI
- โค้ดส่วนใหญ่ของโปรเจกต์ถูก AI เขียน โดยมีต้นทุนรวมประมาณ $1,100
- ผ่านการทดสอบ Vitest 1,700 รายการ และ Playwright 380 รายการ พร้อม ความเข้ากันได้กับ API ของ Next.js ที่ 94%
- ขั้นตอนการพัฒนา
- AI ทำการพัฒนาฟีเจอร์และเขียนเทสต์ → รันเทสต์ → หากล้มเหลวจะรับ feedback ของข้อผิดพลาดแล้วลองใหม่
- AI agent ยังทำ code review และแก้ไขโค้ดอัตโนมัติด้วย โดยมนุษย์ดูแลเพียงทิศทางและโครงสร้าง
- มีการทำเซสชันบน OpenCode มากกว่า 800 ครั้ง โดยใช้โมเดล Claude
ปัจจัยที่ทำให้ AI ทำสิ่งนี้ได้
- เอกสารที่ชัดเจนของ Next.js และ test suite ขนาดใหญ่ ทำให้ AI เรียนรู้ได้อย่างแม่นยำ
- โครงสร้างการบิลด์ที่เสถียรของ Vite ทำหน้าที่เป็นฐานสำคัญ
- โมเดล AI รุ่นใหม่ไปถึงระดับที่สามารถ รักษาความสอดคล้องเชิงโครงสร้างของโค้ดเบสขนาดใหญ่ และ อนุมานปฏิสัมพันธ์ระหว่างโมดูลต่าง ๆ ได้แล้ว
นัยต่อการพัฒนาซอฟต์แวร์
- โครงสร้างเฟรมเวิร์กแบบหลายชั้นในอดีตเป็น ผลลัพธ์จากความพยายามชดเชยข้อจำกัดด้านการรับรู้ของมนุษย์
- AI สามารถเข้าใจทั้งระบบในบริบทและเขียนโค้ดได้โดยตรง จึงทำให้ ความจำเป็นของชั้น abstraction ระหว่างกลางลดลง
- vinext เป็น กรณีพิสูจน์ว่า AI สามารถสร้างเฟรมเวิร์กที่ซับซ้อนได้สำเร็จโดยอาศัยเพียงสเปกและเครื่องมือพื้นฐาน
โอเพนซอร์สและการทำงานร่วมกัน
- ราว 95% ของ vinext ประกอบด้วย โค้ด Vite ที่ไม่ผูกกับ Cloudflare จึงสามารถนำไปใช้กับแพลตฟอร์มโฮสติ้งอื่นได้
- มีการสร้าง PoC บน Vercel สำเร็จภายใน 30 นาที
- โปรเจกต์เปิดเป็นโอเพนซอร์ส และ ยินดีรับ PR สำหรับแพลตฟอร์มอื่นและการเพิ่มเป้าหมายการดีพลอย
สถานะเชิงทดลองและการใช้งานจริง
- vinext ยังอยู่ในขั้นทดลอง และยังไม่ได้ผ่านการพิสูจน์กับทราฟฟิกขนาดใหญ่
- National Design Studio กำลังนำไปใช้จริงกับเว็บไซต์ภาครัฐ CIO.gov และยืนยันว่า เวลาบิลด์และขนาดบันเดิลดีขึ้น
- ใน README มีการระบุ ฟีเจอร์ที่ยังไม่รองรับและข้อจำกัดที่ทราบแล้ว ไว้ชัดเจน
วิธีใช้งาน
- รองรับการย้ายระบบอัตโนมัติในเครื่องมือ AI (เช่น Claude Code, Cursor) ผ่าน Agent Skill
npx skills add cloudflare/vinext → แปลงได้ด้วยคำสั่ง “migrate this project to vinext”
- หากทำเองสามารถใช้
npx vinext init, vinext dev, vinext deploy ได้
- ซอร์สโค้ดเปิดเผยบน GitHub ที่ cloudflare/vinext
คำขอบคุณและเทคโนโลยีพื้นฐาน
- ด้วยการสนับสนุนจาก ทีม Vite และ
@vitejs/plugin-rsc จึงสามารถทำฟีเจอร์ React Server Components ได้
- เอกสารและ test suite ของทีม Next.js เป็นรากฐานสำคัญที่ทำให้โปรเจกต์นี้ประสบความสำเร็จ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
แค่เมื่อเดือนก่อนยังได้ยินคนพูดว่า “ขอตัวอย่างเดียวที่ AI สร้างซอฟต์แวร์ระดับใช้งานเชิงพาณิชย์ได้จริง” แต่ตอนนี้ Cloudflare ก็เผยตัวอย่างออกมาหลายกรณีแล้ว และเมื่อวานนี้ Ladybird ก็ถูกพอร์ตไปเป็น Rust ด้วย AI
จุดร่วมของกรณีเหล่านี้คือมี test suite ที่ดีมากอยู่แล้ว ทำให้งานง่ายขึ้น
บางทีเพราะ AI ก็ได้ ที่ การพัฒนาแบบขับเคลื่อนด้วยการทดสอบ (TDD) อาจกลับมาอีกครั้ง
ฉันชอบ Next มากจริงๆ แต่ก็รัก Vite เหมือนกัน
แต่ทีม Next ให้ความรู้สึกว่าโฟกัสกับฟีเจอร์สำหรับผู้ใช้ 0.1% ของทั้งหมด และเมินผู้ใช้อีก 99.9%
ฟอร์กครั้งนี้ของ Cloudflare ดูเหมือนจะช่วยคลายความไม่พอใจแบบนั้นได้ การปรับปรุงประสิทธิภาพเป็นสิ่งที่ชุมชน Next ต้องการมานาน แต่ทีม Next เพิกเฉย และ Cloudflare กำลังพยายามแก้จุดนั้น
ฉันชอบที่ Vite มอบ core layer ที่ดีกว่า Next มาก แต่ยังคงฟีเจอร์ของ Next เอาไว้
หวังว่าฟอร์กนี้จะสำเร็จจนสามารถใช้ในบริษัทได้
กรณีนี้แสดงให้เห็น แรงจูงใจของโอเพนซอร์ส ในยุค AI ได้ดีมาก
ยิ่งทำเอกสารดีและกำหนดสัญญาการทำงานให้ชัด คนอื่นก็ยิ่ง ทำซ้ำ ได้ง่าย
ถ้า Cloudflare ไม่ได้ใช้การทดสอบของ Next ผลลัพธ์แบบนี้ก็คงเป็นไปไม่ได้
Next ค่อยๆ เติบโตแบบสะสมจนซับซ้อนขึ้น แต่เฟรมเวิร์กใหม่สามารถทำให้ server component เรียบง่ายได้ตั้งแต่แรก
น่าทึ่งที่ตอนนี้ถูกใช้งานอยู่แล้วแม้แต่ในเว็บไซต์รัฐบาลสหรัฐฯ
แม้จะเป็นผลที่ Vercel ทำไว้เอง แต่กระแสแบบนี้อาจเป็นภัยต่อโปรเจกต์โอเพนซอร์สขนาดเล็กได้
ก็สงสัยว่าจะเรียกว่า ‘นำมาเขียนใหม่’ ได้หรือไม่ ถ้ายังทำได้ไม่ถึงระดับ “Hello world”
แถมยังสืบทอด test suite ของต้นฉบับมาตรงๆ และถ้าต้นฉบับรวมอยู่ในข้อมูลฝึก ก็ยากจะเรียกว่าเริ่มทำใหม่จากศูนย์จริงๆ
(หลังจากนี้มีการยกตัวอย่างโดยอ้างประโยคที่มีลิขสิทธิ์ แต่ตัดออก)
สิ่งที่น่าสนใจคือเมื่อเดือนก่อน Cloudflare เพิ่ง ซื้อ Astro ไป
ถ้า AI แทนที่ได้ง่ายขนาดนี้ แล้วทำไมต้องยอมจ่ายแพงเพื่อซื้อ Astro ด้วย?
บางทีในระดับองค์กรอาจยังมองว่าการได้มาซึ่ง วิสัยทัศน์และความเป็นผู้นำ ของเฟรมเวิร์กยังสำคัญอยู่
ส่วน Next.js ผูกกับ Vercel มากกว่า ดังนั้น Cloudflare มีโอกาสสูงที่จะชี้นำให้ลูกค้า ย้าย จาก Next ไป Astro แบบเป็นธรรมชาติ
เราใช้ Astro กับระบบเอกสารภายใน และสำหรับงานแบบนั้นมันยอดเยี่ยมมาก
Next.js เคยมีช่องโหว่ remote code execution (RCE) มาก่อน
เพราะงั้นอย่างน้อยช่วงนี้ฉันคงไม่ใช้เวอร์ชันที่ AI สร้างเด็ดขาด
ถ้า AI สร้างโค้ดเป็นพันบรรทัด บั๊กแบบนี้ก็ยิ่งซ่อนอยู่ได้ง่ายขึ้น
โปรเจกต์นี้เป็นการทดลอง AI ที่น่าสนใจที่สุดเท่าที่ฉันเคยเห็นมา
พอเห็นโค้ดเบสของ Next.js ที่ใหญ่โตมาก แต่การทำครั้งนี้มี ปริมาณโค้ดแค่หนึ่งในร้อย ก็เลยน่าทึ่ง
อยากรู้ว่ามันจัดการ edge case ทุกอย่างได้จริงหรือแค่ผ่านการทดสอบเฉยๆ
ตัวอย่างเช่น ถ้าเทียบ form implementation ของ Next กับ
form implementation ของ Vinext จะเห็นว่าต่างกันโดยสิ้นเชิง
ถึงอย่างนั้นก็ยังเป็นความพยายามที่น่าประทับใจมาก
ตอนนี้ยังอยู่ในช่วงเริ่มต้น จึงอาจมีปัญหาที่ไม่ได้อยู่ในชุดทดสอบ
เหตุผลที่โค้ดน้อยกว่ามากคือมันสร้างอยู่บน Vite และ React RSC plugin
ฉันค่อนข้างสงสัยกับคำพูดแนว “เอา AI มา reimplement X แล้วง่ายมาก”
เป็นไปได้ว่ารายละเอียดและ ประวัติการแก้บั๊ก ถูกละไว้
ถ้าผ่านการทดสอบได้ครบจริงฉันก็ยอมรับ แต่ถ้าไม่ใช่ก็เชื่อยาก
ฉันไม่เห็นด้วยกับคำพูดที่ว่า “abstraction ในซอฟต์แวร์คือสิ่งที่มนุษย์สร้างขึ้นเพื่อรับมือกับความซับซ้อน”
abstraction เป็นเครื่องมือในการจับแก่นของความจริงและเพิ่ม การนำกลับมาใช้ซ้ำ
อีกทั้ง ‘abstraction’ กับ ‘layer’ ก็ไม่เหมือนกัน layer ใกล้เคียงกับ การแยกความรับผิดชอบ มากกว่า และอาจมองได้ว่าเป็นรูปแบบหนึ่งของ abstraction
จุดที่น่าสนใจคือ “ต้นทุนรวมอยู่ที่ประมาณ โทเคนมูลค่า $1,100”