Next.js · Supabase · shadcn/ui · Vercel · Git · Superpowers
สำหรับคนที่สร้างแอปด้วย AI ได้แล้ว แต่ยังไม่รู้ว่าข้างในทำงานยังไง
กดปุ่ม T ได้ทุกเมื่อ เพื่อกลับมาหน้าสารบัญนี้ ทั้งตอนเลื่อนอ่านปกติและตอนนำเสนอเต็มจอ
ก่อนรู้จักเครื่องมือแต่ละตัว ต้องเห็นก่อนว่าข้อมูลหนึ่งก้อนเดินจากหน้าจอไปถึงฐานข้อมูลผ่านอะไรบ้าง เพราะทุกเครื่องมือในเล่มนี้ยืนอยู่คนละจุดบนเส้นทางเดียวกัน
คุณพิมพ์สั่ง AI ว่า “สร้างปุ่มบันทึกข้อมูล” แล้วได้ปุ่มที่ใช้งานได้จริงในไม่กี่วินาที
ใต้ปุ่มนั้นมีชิ้นส่วนหลายตัวทำงานต่อกันเป็นทอด ๆ โดยอัตโนมัติ วันนี้เราจะเปิดฝาดูข้างใน
ทุกคำศัพท์ที่ AI พ่นใส่คุณ มีที่อยู่ของมันในร้านอาหารร้านนี้
| ศัพท์เทคนิค | ความหมาย | เทียบกับร้านอาหาร |
|---|---|---|
| Client | อุปกรณ์ฝั่งผู้ใช้ หรือเว็บเบราว์เซอร์ | ลูกค้าที่นั่งอยู่ที่โต๊ะ |
| Frontend | ส่วนหน้าบ้านที่ผู้ใช้เห็นและกดได้ | หน้าเมนู จานชาม บรรยากาศร้าน |
| API | ช่องทางรับส่งข้อมูลระหว่างหน้าบ้านกับหลังบ้าน | พนักงานเสิร์ฟที่เดินเข้าออกครัว |
| Backend | ส่วนหลังบ้านที่ประมวลผลและตัดสินใจ | ห้องครัวและหัวหน้าเชฟ |
| Server | เครื่องคอมพิวเตอร์ที่รัน backend | ตัวอาคารครัวและเตา |
| Database | ระบบฐานข้อมูลที่เก็บข้อมูลถาวร | ห้องเก็บวัตถุดิบที่ล็อกกุญแจ |
| Request | คำขอที่ส่งจากผู้ใช้ไปหลังบ้าน | ใบสั่งอาหาร |
| Response | ข้อมูลที่หลังบ้านส่งกลับมา | จานอาหารที่เสิร์ฟกลับมา |
ช่องโหว่ที่พบมากที่สุด คือตารางใน Supabase ที่กฎกรองข้อมูลหลวมเกินไป คีย์ฝั่งหน้าเว็บฝังอยู่ในหน้าเว็บอยู่แล้ว ใครคัดไปก็ยิงตรงเข้า API อ่านข้อมูลของคนอื่นได้
เครื่องมือที่ AI เลือกให้บ่อยที่สุด และเป็นตัวที่ทำให้หน้าบ้านกับหลังบ้านอยู่ในโปรเจ็คเดียวกัน รู้โครงของมันแล้วจะอ่านออกว่า AI วางไฟล์อะไรไว้ตรงไหน
React Framework ที่ทีมส่วนใหญ่เลือกใช้เมื่อจะทำเว็บจริง และเป็นตัวที่ AI เจนออกมาให้บ่อยที่สุด ออกแบบมาให้เขียนเว็บครบวงจรจบในโปรเจ็คเดียว
// โฟลเดอร์ app/blog/ กลายเป็น URL /blog app/ ├── layout.tsx โครงร่างร่วมทุกหน้า ├── page.tsx เนื้อหาหน้าแรก ├── loading.tsx หน้าจอรอโหลด ├── error.tsx หน้าจอเมื่อพัง ├── blog/ │ └── page.tsx หน้า /blog └── api/ └── route.ts จุดรับส่งข้อมูล
| ไฟล์ | หน้าที่ |
|---|---|
page.tsx | เนื้อหาหลักของหน้านั้น โฟลเดอร์ไหนมีไฟล์นี้ URL นั้นถึงจะเปิดได้ |
layout.tsx | โครงร่างร่วม เช่น แถบเมนู ไม่ประมวลผลซ้ำเวลาเปลี่ยนหน้า |
loading.tsx | หน้าจอรอโหลด ระบบเอามาโชว์ให้เองระหว่างดึงข้อมูล ไม่ต้องสั่ง |
error.tsx | รับมือ error เฉพาะจุด ไม่ให้เว็บดับทั้งหน้า |
route.ts | API endpoint รับส่งข้อมูลดิบแบบ JSON ไม่มีหน้าจอ |
หน้าเว็บใน Next.js มีสองแบบ ค่าเริ่มต้นคือแบบที่ประกอบเสร็จบนเซิร์ฟเวอร์ ส่วนชิ้นที่ต้องตอบสนองคนใช้ ต้องบอกระบบว่าให้ส่งไปทำงานในเบราว์เซอร์
"use client" บรรทัดแรกของไฟล์
// error ที่จะได้เห็นบ่อยที่สุด You're importing a component that needs useState. This React Hook only works in a Client Component. To fix, mark the file with the "use client" directive.
เมื่อก่อนต้องสร้างช่องทางรับคำสั่งไว้อีกไฟล์ แล้วเขียนโค้ดสองฝั่งให้คุยกันเอง ตอนนี้เขียนฟังก์ชันเดียวแล้วผูกกับฟอร์มได้เลย
// lib/actions/user.ts 'use server'; // ทั้งไฟล์รันบนเซิร์ฟเวอร์ export async function saveProfile(formData) { … }
'use server' คือฝั่งที่คนดูซอร์สเว็บมองไม่เห็น เป็นที่เดียวที่ใส่คีย์ลับและต่อ Database ตรงได้อย่างปลอดภัย
สั่ง AI ให้เก็บไฟล์กลุ่มนี้ไว้ที่ /lib/actions/ ตั้งชื่อตามเรื่องที่มันดูแล เช่น auth.ts user.ts billing.ts จะหาเจอตอนต้องแก้
AI มักเจนโค้ดยุค Pages Router ปนมากับ App Router ทำให้โปรเจ็ครันไม่ผ่าน คุณต้องดูออกเอง
| จุดสังเกต | App Router (ปัจจุบัน) | Pages Router (เก่า) |
|---|---|---|
| โฟลเดอร์ | /app | /pages |
| ชื่อไฟล์ | ตายตัว page.tsx layout.tsx | ตั้งชื่อตาม URL เช่น about.tsx |
| การดึงข้อมูล | async/await ในตัวหน้าเอง | getServerSideProps |
Conflicting app and page file was found แล้ว build ไม่ผ่านpages/ หรือ getServerSideProps และจัดการข้อมูลผ่าน Server Actions”
โค้ดต้องผ่านสองด่านที่เข้มไม่เท่ากัน ด่านแรกคือตอนแก้งานในเครื่อง ผ่อนปรนให้ทำงานต่อได้ ด่านสองคือตอนแปลงเป็นเว็บจริง เข้มงวดกว่ามาก และเป็นด่านที่ Vercel รันทุกครั้งที่คุณ push
| หัวข้อ | npm run dev — ตอนแก้งาน | npm run build — ตอนขึ้นเว็บ |
|---|---|---|
| ประมวลผลกี่หน้า | เฉพาะหน้าที่เปิดดูอยู่ | ทุกหน้าในโปรเจ็ค |
| เจอโค้ดผิดชนิดข้อมูล | เตือนไว้ แต่ยังเปิดเว็บต่อได้ | หยุดทันที ไม่ได้ไฟล์เว็บออกมา |
| หน้าที่ยังไม่เคยเปิดดู | ไม่มีใครรู้ว่าพัง | เจอทันทีในรอบเดียว |
| ใครรันด่านนี้ | คุณ ตอนนั่งทำงาน | Vercel ทุกครั้งที่ push |
npm run build ให้ผ่านก่อน ถ้าไม่ผ่านให้แก้จนผ่าน แล้วค่อยบอกว่าเสร็จ” จะเจอปัญหาในเครื่องตัวเอง แทนที่จะไปเจอตอนเว็บขึ้นไม่ได้
หลังบ้านสำเร็จรูปที่ให้ฐานข้อมูล ระบบสมาชิก และที่เก็บไฟล์มาในกล่องเดียว พร้อมสวิตช์ความปลอดภัยหนึ่งตัวที่ถ้าลืมเปิด ข้อมูลทั้งตารางเปิดสู่อินเทอร์เน็ตทันที
แพลตฟอร์มแบบ Backend-as-a-Service ที่เปิดซอร์สโค้ด สร้างบนฐาน PostgreSQL ที่นักพัฒนาทั่วโลกใช้จริง ไม่ใช่ฐานข้อมูลจำลอง
| งาน | สมัยก่อน | ตอนนี้ |
|---|---|---|
| ฐานข้อมูล | เช่าเซิร์ฟเวอร์ ติดตั้ง ตั้งค่าเอง | กดสร้างโปรเจ็ค เสร็จใน 2 นาที |
| API | เขียนโค้ดเองทุกเส้นทาง | สร้างอัตโนมัติจากตาราง |
| ระบบสมาชิก | เขียนสมัคร ล็อกอิน เข้ารหัสเอง | เปิดใช้ได้ทันที |
| อัปโหลดไฟล์ | สร้างระบบเก็บไฟล์เอง | Storage พร้อมใช้ |
กฎความปลอดภัยที่ทำงานอยู่ในตัวฐานข้อมูลเอง คอยเติมเงื่อนไขเข้าไปในทุกคำสั่งอ่านข้อมูลอัตโนมัติ เพื่อกรองให้เห็นเฉพาะแถวที่ผู้ใช้คนนั้นมีสิทธิ์
การเขียนโค้ดกรองที่หน้าจอไม่ช่วย เพราะคนร้ายยิงตรงเข้า API ได้เลยโดยไม่ผ่านหน้าเว็บของคุณ
-- แบบที่ AI เขียนให้บ่อย เปิด RLS จริง แต่ไม่กรอง create policy "Enable read for authenticated" on projects for select to authenticated using ( true ); -- ล็อกอินแล้วเห็นทุกแถว
-- แบบที่ต้องการจริง เห็นเฉพาะของตัวเอง using ( user_id = auth.uid() );
user_id ตรงกับรหัสของคนที่ล็อกอินอยู่ ถ้าเห็นคำว่า true ตรงนี้ ให้สั่ง AI แก้ทันที
| คีย์ | ใส่ในโค้ดหน้าบ้านได้ไหม | ทำอะไรได้ |
|---|---|---|
sb_publishable_…โปรเจ็คเก่าเรียก anon key | ได้ | ทำงานภายใต้กฎ RLS เสมอ ปลอดภัยก็ต่อเมื่อคุณตั้ง RLS ไว้ดีแล้วเท่านั้น |
sb_secret_…โปรเจ็คเก่าเรียก service_role key | ห้ามเด็ดขาด | ข้ามกฎ RLS ทั้งหมด ใช้ได้เฉพาะฝั่งเซิร์ฟเวอร์ |
service_role key หลุดไปอยู่ในโค้ดหน้าบ้าน ใครก็ตามที่เปิดดูซอร์สโค้ดหน้าเว็บจะขโมยคีย์ไปอ่านหรือลบข้อมูลทั้งหมดได้ชื่อคีย์กำลังเปลี่ยน — Supabase ประกาศเลิกใช้ชื่อ anon กับ service_role ภายในสิ้นปี 2026 ระหว่างนี้ทั้งสองชุดใช้งานพร้อมกันได้ โปรเจ็คใหม่จะเห็นชื่อขึ้นต้นด้วย sb_ หลักการแบ่งฝั่งยังเหมือนเดิมทุกอย่าง
ไม่ใช่เหตุผลให้เลี่ยง Supabase ยังเป็นตัวที่ควรเริ่มสำหรับงานเกือบทั้งหมดในเล่มนี้ แต่รู้ไว้ก่อนแล้วจะไม่ตกใจตอนเจอ
นี่ไม่ใช่ช่องโหว่ของ Supabase แต่เป็นการตั้งค่าที่ผู้สร้างลืมทำ
จากโค้ดในเครื่อง ถึงเว็บที่คนอื่นเปิดได้ พร้อมเรื่องที่ต้องเข้าใจก่อนกดขึ้นจริง ทั้งค่าบริการที่คิดตามการใช้งาน และคีย์ที่เผลอส่งไปอยู่หน้าบ้าน
| หัวข้อ | component library ทั่วไป | shadcn/ui |
|---|---|---|
| โค้ดอยู่ที่ไหน | ใน node_modules นอกโปรเจ็ค | ใน components/ui/ ของเราเอง |
| แก้ไส้ในได้ไหม | ไม่ได้ | ได้ทั้งหมด |
| มีโค้ดที่มองไม่เห็นไหม | มี | ไม่มี |
| อัปเกรดเวอร์ชัน | รันคำสั่งอัปเดต ง่าย | รันคำสั่งเขียนทับไฟล์ อาจทับส่วนที่เราแก้ไว้ |
แปลว่าไม่ใช่เซิร์ฟเวอร์ของคุณ เครื่องยังมีอยู่ แต่คนอื่นเปิดปิดและดูแลให้ คุณจ่ายเฉพาะวินาทีที่โค้ดทำงานจริง
| หัวข้อ | เช่าเซิร์ฟเวอร์แบบเดิม | Serverless |
|---|---|---|
| เปิดทิ้งไว้ไหม | เปิดตลอด 24 ชั่วโมง | ตื่นตอนมีคนเรียก แล้วดับ |
| คิดเงินยังไง | รายเดือน ใช้หรือไม่ใช้ก็จ่าย | ตามจำนวนครั้งและเวลาที่รัน |
| คนเข้าพุ่งกะทันหัน | ต้องสั่งเพิ่มเครื่องเอง | เพิ่มให้เองอัตโนมัติ |
| ใครอัปเดตความปลอดภัย | คุณ | ผู้ให้บริการ |
Vercel รันโค้ดแบบ serverless ทั้งหมด ส่วน Supabase เป็นแบบผสม ฐานข้อมูลเป็นเครื่องที่เปิดค้างไว้ให้ แต่ส่วนที่เหลือคิดตามการใช้งาน ทั้งคู่คือเหตุผลที่คนเดียวดูแลระบบที่มีผู้ใช้หลักหมื่นได้
npm run build ตัวเดียวกับที่รันในเครื่องได้ เปิดแท็บ Deployments กดรอบที่แดง เลื่อนหาบรรทัดแรกที่ขึ้นคำว่า Error คัดตั้งแต่บรรทัดนั้นลงไปสักสิบบรรทัดส่งให้ AI ทั้งก้อน อย่าเล่าด้วยคำพูดตัวเอง เว็บเดิมยังออนไลน์ปกติ รอบที่ build ไม่ผ่านจะไม่ถูกนำขึ้นแทนเรื่องที่คนพลาดกันมาก — แพ็กเกจฟรีของ Vercel อนุญาตเฉพาะงานส่วนตัวที่ไม่หารายได้ ถ้าเว็บมีการขายของ รับเงิน หรือทำให้ธุรกิจ ต้องขยับเป็นแพ็กเกจเสียเงินตั้งแต่ต้น ไม่ใช่รอให้คนใช้เยอะก่อน
ทุกครั้งที่แก้โค้ดในสาขาอื่นหรือเปิด pull request Vercel สร้างเว็บจำลองพร้อม URL เฉพาะขึ้นมาแยกจากเว็บจริง
| ประเภท | เกิดเมื่อไหร่ |
|---|---|
| Production deployment | push เข้าสาขาหลัก |
| Preview deployment | push เข้าสาขาอื่นหรือเปิด pull request |
| Rollback | กดย้อนกลับเมื่อไหร่ก็ได้ |
NEXT_PUBLIC_ตัวแปรที่ขึ้นต้นด้วยคำนี้จะถูกฝังลงในโค้ดที่ส่งไปรันบนเบราว์เซอร์ ใครเปิดดูซอร์สหน้าเว็บก็เห็น
sb_secret_ หรือชื่อเดิม service_role · คีย์ระบบชำระเงิน · รหัสผู้ดูแลระบบ| Environment | ใช้กับอะไร |
|---|---|
| Production | ฐานข้อมูลจริง คีย์จริง |
| Preview | ฐานข้อมูลทดสอบ คีย์ทดสอบ |
| Development | เครื่องตัวเอง |
ข้อผิดพลาดที่พบบ่อย — commit คีย์จริงลง GitHub แทนที่จะตั้งใน Vercel · ใช้ค่าตัวแปรชุดเดียวกันทั้ง Production กับ Preview จนข้อมูลทดสอบหลุดไปอยู่ในเว็บจริง · แก้ค่าตัวแปรใน Vercel แล้วคิดว่าเว็บเปลี่ยนตามทันที ต้องสั่ง deploy ใหม่อีกรอบเสมอ
| ประเภทโดเมน | ตัวอย่าง | ตั้ง DNS แบบไหน |
|---|---|---|
| Apex domain ไม่มี www | myweb.com | A record ชี้ไปที่หมายเลขที่ Vercel แสดง |
| Subdomain มีส่วนขยายหน้า | www.myweb.com | CNAME record ชี้ไปที่ค่าเฉพาะของโปรเจ็คคุณ |
https:// ได้ทันที ไม่มีค่าใช้จ่ายเพิ่มอย่าจำค่า DNS จากบทความในเน็ต ค่าที่ถูกคือค่าที่หน้า Domains ของโปรเจ็คคุณแสดงอยู่ตอนนั้น คัดลอกจากตรงนั้นเสมอ · ถ้าใช้ทั้งสองแบบ ให้ตั้ง redirect ไปทางเดียว กันเนื้อหาซ้ำในสายตา Google
เครื่องมือ AI แต่ละกลุ่มเหมาะกับคนละงาน และลำดับการสร้างที่ผิดทำให้ต้องรื้อทีหลัง บทนี้รวมสิ่งที่ควรตัดสินใจให้จบก่อนพิมพ์พรอมป์ตแรก
เครื่องมือทุกตัวสร้างแอปได้เหมือนกัน สิ่งที่ต่างคือคุณต้องรู้เรื่องเทคนิคแค่ไหน และงานจะโตไปถึงระดับไหน
เส้นทางที่พบบ่อยคือเริ่มที่ Prompt-to-App เพราะเห็นผลเร็ว แล้วย้ายขึ้นมา Terminal Agents ตอนโปรเจ็คเริ่มโตจนแก้ผ่านหน้าจอเดียวไม่ไหว ทั้งเล่มนี้สอนสิ่งที่คุณต้องรู้เพื่อข้ามเส้นนั้น
| ประเภทโปรเจ็ค | Next.js | Supabase | shadcn/ui | Vercel | ต้องเพิ่มอะไร |
|---|---|---|---|---|---|
| Landing page แนะนำสินค้า | ใช่ | ไม่ | ใช่ | ใช่ | ไม่มี ยกเว้นมีฟอร์มติดต่อ |
| เว็บที่มีระบบสมาชิก | ใช่ | ใช่ | ใช่ | ใช่ | ไม่มี ใช้ของ Supabase ครบ |
| ร้านค้าออนไลน์ | ใช่ | ใช่ | ใช่ | ใช่ | ระบบชำระเงิน เช่น Stripe |
| Dashboard ภายในองค์กร | ใช่ | ใช่ | ใช่ | ใช่ | SSO ลงชื่อเข้าใช้ด้วยบัญชีองค์กร และ audit log |
| แอปมือถือ | ไม่ | ใช่ | ไม่ | ไม่ | React Native และ Expo |
| เครื่องมือ AI | ใช่ | ใช่ | ใช่ | ใช่ | LLM API และ pgvector |
Next.js ทำแอปมือถือแบบ native ไม่ได้ ต้องใช้ React Native กับ Expo แต่หลังบ้านยังใช้ Supabase ตัวเดิมได้
| เครื่องมือ | กลุ่ม | Stack ที่ได้ | เหมาะกับใคร | ข้อจำกัด | เริ่มต้น/เดือน |
|---|---|---|---|---|---|
| Lovable | Prompt-to-App | React + Supabase | เขียนโค้ดไม่เป็นเลย | ล็อกกับ React ไม่ทำแอปมือถือ | $25 |
| Bolt.new | Prompt-to-App | Next.js, Vue, Svelte, Expo | อยากลองไอเดียให้เห็นผลเร็ว | โปรเจ็คโตแล้วโค้ดเริ่มสับสน | $25 |
| v0 | Prompt-to-App | Next.js + shadcn/ui | เน้นงานหน้าจอเป็นหลัก | ผูกกับระบบนิเวศของ Vercel | $20 |
| Cursor | AI IDE | ทุกภาษา | มีพื้นฐาน อยากเห็นไฟล์ | ต้องลงโปรแกรม ไม่มีโฮสติ้ง | $20 |
| Claude Code · Codex | Terminal Agent | ทุกภาษา | โปรเจ็คระยะยาว แก้ข้ามไฟล์ | สั่งด้วยการพิมพ์ ไม่มีหน้าจอไล่ไฟล์ | $20 ขึ้นไป |
ราคาเป็นระดับเริ่มต้นโดยประมาณ ทุกเจ้าปรับบ่อยและมีแพ็กเกจสูงกว่านี้ ตรวจจากเว็บผู้ให้บริการก่อนตัดสินใจเสมอ
หกระดับของการใช้ AI เขียนโค้ด เรียงตามว่าใครถือพวงมาลัย
| ระดับ | ชื่อ | รูปแบบ | เครื่องมือตัวอย่าง |
|---|---|---|---|
| 0 | เขียนเองล้วน | มนุษย์พิมพ์ทุกบรรทัด | ไม่มี |
| 1 | AI ช่วยเติมประโยค | คนเขียนหลัก AI แนะนำคำสั่งถัดไป | GitHub Copilot |
| 2 | สั่งเจนทีละชิ้นส่วน | สั่งทำหน้าจอหรือ component เฉพาะจุด | v0 |
| 3 | สั่งสร้างแอปทั้งตัวจากแชท | AI ทำทั้งหน้าบ้านและตั้งฐานข้อมูลให้ | Lovable, Bolt.new |
| 4 | สั่งแก้ข้ามไฟล์ทั้งโปรเจ็ค | AI อ่านทั้งโปรเจ็ค รันโค้ด รันเทสต์ แก้เอง | Cursor, Claude Code |
| 5 | เอเจนต์ทำงานอัตโนมัติ | หลายเอเจนต์วางแผน เขียน ตรวจความปลอดภัย ขึ้นระบบเอง | ระบบ multi-agent |
ทำผิดลำดับแล้วเจ็บตัว — ถ้าปล่อยให้ AI สร้างตารางเยอะ ๆ ก่อนแล้วค่อยมาตั้ง RLS ทีหลัง มักลืมบางตาราง
sb_secret_ ข้าม RLS ทุกข้อ หลุดเมื่อไหร่ข้อมูลทั้งหมดเสียALTER TABLE … ENABLE ROW LEVEL SECURITY;sb_secret_ หรือชื่อเดิม service_role อยู่ฝั่งเซิร์ฟเวอร์เท่านั้นauth.uid() = user_id และฝั่งเขียนข้อมูลใส่ WITH CHECK เสมอuser_id กันระบบช้าเมื่อข้อมูลโตระบบที่ทำให้ย้อนกลับได้เมื่อ AI แก้จนพัง และเป็นทางเดียวที่โค้ดจะขึ้นเว็บจริงได้ ไม่ใช่เรื่องของทีมใหญ่เท่านั้น คนทำคนเดียวยิ่งต้องมี
ความสับสนเรื่อง Git เกือบทั้งหมด มาจากไม่รู้ว่างานอยู่ตรงไหน คำสั่งทุกตัวคือการย้ายงานจากที่หนึ่งไปอีกที่
สี่คำสั่งนี้ครอบคลุมงานราว 90% ของการใช้ Git ในชีวิตจริง
# ดึงของใหม่ลงมาก่อนเริ่มงาน git pull # ดูว่าตอนนี้แก้อะไรไปบ้าง git status # เลือกไฟล์เข้ากองรอบันทึก จุดคือทุกไฟล์ git add . # บันทึกพร้อมข้อความ git commit -m "เพิ่มหน้าล็อกอินด้วย Supabase" # ส่งขึ้น GitHub git push
"แก้ bug ตะกร้าสินค้าคำนวณราคาผิด" ไม่ใช่ "update files" เพราะสามเดือนหลังจากนี้คุณจะอ่านมันเพื่อหาจุดที่พังแยกเลนออกไปลองของใหม่ ถ้าเวิร์กก็รวมกลับ ถ้าไม่เวิร์กก็ลบทิ้ง ของบน main ไม่เคยพัง
git checkout -b feat/login แตกเลนใหม่แล้วย้ายไปอยู่บนนั้นทันที · git checkout main ย้ายกลับมาเลนหลักfeat/ สำหรับของใหม่ fix/ สำหรับแก้ bug ตามด้วยชื่อสิ่งที่ทำ เช่น fix/checkout-totalPR คือการยื่นเรื่องขอรวม branch ของคุณเข้า main คนทำงานคนเดียวก็ควรเปิด เพราะสิ่งที่ได้ไม่ใช่การรีวิวจากเพื่อนร่วมงาน
ไฟล์ชื่อ .gitignore บอก Git ว่าอะไรห้ามเก็บ ห้ามส่งขึ้นคลาวด์ ทุกโปรเจ็คต้องมี
# คีย์ลับทั้งหมด ห้ามขึ้น GitHub เด็ดขาด .env .env.local # โฟลเดอร์ที่สร้างใหม่ได้เสมอ ไม่ต้องเก็บ node_modules/ .next/ dist/ .DS_Store
ลบไฟล์แล้ว commit ใหม่ ไม่พอ เพราะคีย์ยังอยู่ในประวัติ ทำสามข้อนี้ตามลำดับ
เกิดเมื่อสองฝั่งแก้บรรทัดเดียวกันคนละแบบ Git ตัดสินใจแทนไม่ได้ จึงหยุดแล้วถามคุณว่าจะเอาอันไหน
<<<<<<< HEAD <h1>ยินดีต้อนรับ</h1> // ของในเครื่องคุณ ======= <h1>สวัสดีครับ</h1> // ของที่ดึงมาจากคลาวด์ >>>>>>> main
<<< === >>> ต้องไม่เหลือในไฟล์นี่คือเหตุผลที่แท้จริงที่คุณต้องใช้ Git จำสองตัวพอ ตัวหนึ่งปลอดภัยเสมอ อีกตัวลบงานถาวร
| คำสั่ง | ทำอะไร | ใช้ตอนไหน | ปลอดภัยไหม |
|---|---|---|---|
git revert | สร้าง commit ใหม่ที่ย้อนผลของ commit เก่า ประวัติเดิมยังอยู่ครบ | ของขึ้น production แล้วพัง ต้องย้อนด่วน หรือ push ไปแล้ว | ปลอดภัยเสมอ ใช้ตัวนี้เป็นหลัก |
git stash | เก็บงานที่ค้างอยู่พักไว้ในลิ้นชัก โฟลเดอร์กลับไปสะอาด | ทำอยู่ครึ่งทางแล้วต้องรีบไปแก้ bug ด่วนที่ branch อื่น | ปลอดภัย เรียกคืนด้วย git stash pop |
git reset --hard | ย้อนสภาพกลับไปจุดเดิม ทิ้งงานที่ยังไม่ commit ทั้งหมด | AI แก้จนพังเละ ยังไม่ได้ commit อยากล้างกลับจุดสะอาด | ลบถาวร เอาคืนไม่ได้ |
git checkout . | ทิ้งการแก้ในไฟล์ทั้งหมด กลับไปเท่า commit ล่าสุด | ลองอะไรไปแล้วไม่เอา อยากเริ่มใหม่จากจุดเดิม | ลบถาวร เฉพาะที่ยังไม่ commit |
revert เท่านั้น · ถ้ายังอยู่ในเครื่องและแน่ใจว่าไม่เอางานนั้นแล้ว ค่อยใช้ reset --hard ได้ · ไม่แน่ใจเมื่อไหร่ ให้ commit ไว้ก่อน เพราะสิ่งที่ commit แล้วเอากลับมาได้เกือบเสมอชุดวิธีทำงานที่บังคับให้ AI คิดให้จบ เขียนแผน แล้วค่อยลงมือ ช้าลงในหนึ่งฟีเจอร์ แลกกับการไม่ต้องรื้อทั้งโปรเจ็คตอนสัปดาห์ที่สาม
สามวันแรกงานเดินฉิว พอโปรเจ็คโตขึ้นกลับช้าลงเรื่อย ๆ จนแก้อะไรก็พังอย่างอื่น สาเหตุไม่ได้อยู่ที่ AI เก่งไม่พอ
obra/superpowers ใช้ได้ทั้ง Claude Code และ CodexAI จะหยิบขั้นที่ตรงกับสถานการณ์มาใช้เอง คุณไม่ต้องสั่งทีละขั้น หน้าที่คุณคือรู้ว่าตอนนี้อยู่ขั้นไหน และตอบคำถามที่มันถาม
สองในสามของขั้นตอนทั้งหมด เกิดขึ้นก่อนที่โค้ดบรรทัดแรกจะถูกเขียน นี่คือส่วนที่ทำให้ผลลัพธ์ต่างจากการสั่งลอย ๆ
บทที่แล้วเราสอนว่า branch คือเลนทดลอง worktree คือการเอาเลนนั้นไปกางเป็นโฟลเดอร์แยกอีกอันบนเครื่อง
# Superpowers สั่งให้เอง ไม่ต้องพิมพ์ git worktree add \ ../myapp-feat-login \ -b feat/login # รันเทสต์เดิมก่อนเริ่ม # ต้องเขียวก่อน ถึงจะลงมือ npm test
# รอบแรก ต้องแดงก่อน ✗ login rejects wrong password Expected 401, received 200 Tests: 1 failed, 4 passed # เขียนโค้ดแล้วรันใหม่ ต้องเขียว ✓ login rejects wrong password Tests: 5 passed, 0 failed
| ระดับ | แปลว่า | คุณต้องทำอะไร |
|---|---|---|
| Critical | ของพัง หรือมีช่องโหว่ความปลอดภัย | หยุด ต้องแก้ก่อนไปต่อเสมอ |
| Important | ทำงานได้ แต่จะสร้างปัญหาภายหลัง | สั่งแก้ ถ้าไม่รีบส่งงานวันนี้ |
| Minor | เรื่องความเรียบร้อยของโค้ด | ข้ามได้ ไม่ต้องแก้ทุกข้อ |
# Claude Code /plugin install superpowers@claude-plugins-official # Codex CLI · เปิดหน้าค้นหาปลั๊กอิน /plugins # พิมพ์ค้น superpowers แล้วกด Install Plugin
"ช่วย brainstorm ฟีเจอร์ระบบจองคิวก่อน อย่าเพิ่งเขียนโค้ด" "เขียนแผนงานย่อยจากดีไซน์ที่ตกลงกันไว้" "ขอ code review ของงานชิ้นนี้เทียบกับแผน"
ที่มา github.com/obra/superpowers · ของฟรี เปิดโค้ด อัปเดตบ่อย คำสั่งติดตั้งอาจเปลี่ยนได้
เพราะ AI เขียนโค้ดให้ทำงานสำเร็จ ไม่ได้เขียนให้ปลอดภัย
คนสั่งจึงต้องเป็นคนที่รู้ว่าต้องตรวจอะไร