← กลับไปหน้าบทความ
ขั้นสูง (MarTech)

ส่งโค้ดวันละกว่ายี่สิบ Pull Request แล้วมีวิธีให้ Lint กับ Test รันเองก่อนไหม

ทีมบรรณาธิการ linli12 ส.ค. 04:52อัปเดต 12 ส.ค. 04:52อ่าน 3 นาที
ส่งโค้ดวันละกว่ายี่สิบ Pull Request แล้วมีวิธีให้ Lint กับ Test รันเองก่อนไหม
บทความนี้จัดทำเพื่อความรู้ ชื่อธุรกิจ ตัวเลข หรือบทสนทนาที่ไม่มีแหล่งอ้างอิงกำกับเป็นกรณีตัวอย่างเพื่ออธิบายแนวคิด ดูรายละเอียดที่ นโยบายกองบรรณาธิการ

สรุปสั้น ๆ

Claude Code Hooks คือจุดเชื่อมที่ให้ทีมกำหนดคำสั่งอัตโนมัติที่ต้องรันก่อนหรือหลังเหตุการณ์บางอย่าง เช่นก่อนแก้ไฟล์หรือหลังเขียนโค้ดเสร็จ ใช้บังคับให้ lint, test หรือ format รันจริงทุกครั้งโดยไม่ต้องพึ่งความจำของคนหรือ Agent ว่าต้องทำขั้นตอนนี้เอง

ทีมที่ส่งโค้ดถี่ วันหนึ่งอาจมี Pull Request เปิด-ปิดกันมากกว่ายี่สิบครั้ง แต่ละครั้งควรผ่านขั้นตอนตรวจสอบพื้นฐานเหมือนกันหมด คือรัน lint ตรวจ style, รัน test ยืนยันว่าไม่ทำของเดิมพัง และบางทีมีขั้นตอน format โค้ดให้เป็นมาตรฐานเดียวกันก่อน commit แต่ในความเป็นจริง ขั้นตอนพวกนี้มักถูกข้ามไปเวลารีบส่งงาน

ปัญหาที่ตามมาคือ pipeline บน CI แดงบ่อยเพราะเรื่องเล็ก ๆ น้อย ๆ ที่ควรจับได้ตั้งแต่ก่อน push เช่น import ที่ไม่ได้ใช้ ฟังก์ชันที่ไม่มี test ครอบ หรือ format โค้ดไม่ตรงมาตรฐานทีม ทีมที่ใช้ Claude Code ช่วยเขียนโค้ดก็ยังเจอปัญหาแบบนี้ได้เหมือนกัน ถ้า Agent ไม่ถูกบังคับให้รันขั้นตอนตรวจสอบก่อนถือว่างานเสร็จ

Hooks คือคำตอบของปัญหานี้ มันคือกลไกที่ให้ทีมกำหนดคำสั่งที่ต้องรันอัตโนมัติในจังหวะที่กำหนดไว้ล่วงหน้า ไม่ต้องพึ่งว่า Agent หรือคนจะจำได้ไหมว่าต้องรัน lint ก่อน commit ทุกครั้ง บทความนี้จะอธิบายว่า Hooks ทำงานตรงไหนในกระบวนการ ตั้งค่ายังไง และควรใช้กับขั้นตอนแบบไหนถึงจะคุ้มค่าที่สุด

Hooks คืออะไร ทำงานตรงจุดไหนของ Workflow

Hooks คือจุดเชื่อมที่ให้ทีมกำหนดคำสั่งที่ต้องรันโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่างระหว่าง Claude Code ทำงาน เช่นก่อนที่ Agent จะแก้ไฟล์ หลังจากแก้ไฟล์เสร็จ หรือก่อนจะยืนยันว่างานเสร็จสมบูรณ์ คำสั่งเหล่านี้รันโดยไม่ต้องรอให้คนหรือ Agent นึกขึ้นได้เองว่าต้องทำ

หลักการทำงานคล้ายกับ Git Hooks ที่นักพัฒนาหลายคนคุ้นเคยอยู่แล้ว เช่น pre-commit hook ที่รัน lint ก่อนบันทึก commit แต่ Claude Code Hooks ขยายแนวคิดนี้ให้ครอบคลุมเหตุการณ์ในการทำงานของ Agent เองด้วย เช่นก่อน Agent จะรันคำสั่งที่มีความเสี่ยง หรือหลังจากแก้ไฟล์ในโฟลเดอร์ที่กำหนดไว้เฉพาะ

ทำไมพึ่งความจำอย่างเดียวไม่พอ ต้องมีระบบบังคับ

ปัญหาของการพึ่งให้ Agent 'จำ' ว่าต้องรัน test ทุกครั้งคือความไม่แน่นอน แม้ Agent จะทำตามคำสั่งในบทสนทนาได้ดี แต่ถ้าคำสั่งเริ่มต้นไม่ได้เน้นย้ำเรื่องนี้ชัดเจน หรือบทสนทนายาวจนบริบทเปลี่ยนไป โอกาสที่ขั้นตอนสำคัญจะถูกข้ามไปก็มีอยู่จริง

Hooks แก้ปัญหานี้ด้วยการทำให้ขั้นตอนสำคัญไม่ขึ้นกับความจำของใครเลย ไม่ว่า Agent จะได้รับคำสั่งแบบไหน หรือบทสนทนายาวแค่ไหน คำสั่งที่ผูกไว้กับ Hook จะรันเสมอเมื่อถึงจังหวะที่กำหนด เหมือนมีระบบตรวจสอบอัตโนมัติคอยดักอยู่เบื้องหลังตลอดเวลา ไม่ต้องพึ่งดุลยพินิจของ Agent ในแต่ละครั้ง

ประเภทของ Hook ที่ใช้บ่อยและใช้ทำอะไร

Hooks แบ่งตามจังหวะที่ทำงานได้หลายแบบ ทีมส่วนใหญ่เริ่มจากกลุ่มพื้นฐานเหล่านี้ก่อนขยายไปกรณีซับซ้อนขึ้น:

จังหวะที่ทำงานใช้ทำอะไรตัวอย่างคำสั่ง
ก่อน Agent แก้ไฟล์ตรวจสอบเงื่อนไขก่อนอนุญาตให้แก้ เช่นห้ามแตะไฟล์ config บางไฟล์ตรวจ path ของไฟล์ที่จะแก้
หลัง Agent แก้ไฟล์เสร็จรัน format และ lint ให้โค้ดเป็นมาตรฐานทันทีprettier, eslint --fix
ก่อนยืนยันว่างานเสร็จรัน test ทั้งหมดเพื่อยืนยันว่าไม่ทำของเดิมพังnpm test, pytest
ก่อนรันคำสั่งที่มีความเสี่ยงขอการยืนยันเพิ่มเติมก่อนรันจริงตรวจคำสั่งที่มีคำว่า rm หรือ DROP

ตั้งค่า Hooks แรกของทีมทำยังไง

การเริ่มต้นไม่จำเป็นต้องตั้งค่า Hook ทุกจังหวะพร้อมกันตั้งแต่วันแรก ควรเริ่มจากจุดที่ทีมเจอปัญหาบ่อยที่สุดก่อน:

  1. สำรวจว่าขั้นตอนไหนที่ทีมลืมทำบ่อยที่สุดตอนนี้ เช่นลืมรัน lint ก่อน commit หรือลืมรัน test ก่อนส่งงาน
  2. เลือก Hook ที่ตรงกับปัญหานั้นก่อนเป็นอันดับแรก แทนที่จะตั้งค่าทุกจังหวะพร้อมกัน
  3. เขียนคำสั่งที่ต้องการให้รันอัตโนมัติ เช่นคำสั่ง lint หรือ test ที่ทีมใช้อยู่แล้วในโปรเจกต์
  4. ทดสอบกับงานจริงสักสองสามรอบ ดูว่า Hook รันถูกจังหวะและไม่รบกวนขั้นตอนทำงานปกติมากเกินไป
  5. ค่อยขยายไปตั้งค่า Hook เพิ่มเติมสำหรับจังหวะอื่นเมื่อมั่นใจว่าชุดแรกทำงานได้ดีแล้ว

ตัวอย่างสมมติ ทีมใช้ Hook ลดจำนวนครั้งที่ CI แดง

สมมติทีมพัฒนาระบบจัดการสต็อกสินค้ามี Pull Request เฉลี่ยวันละยี่สิบกว่าฉบับ ก่อนตั้งค่า Hook พบว่าประมาณหนึ่งในสี่ของ Pull Request ทำให้ pipeline บน CI แดงเพราะเรื่องเล็กน้อย เช่น lint error หรือ test ที่ลืมรันก่อน push

หลังตั้งค่า Hook ให้รัน lint และ test อัตโนมัติทุกครั้งก่อนที่ Agent จะยืนยันว่างานเสร็จ จำนวนครั้งที่ pipeline แดงเพราะเรื่องพื้นฐานเหล่านี้ลดลงอย่างเห็นได้ชัด เพราะปัญหาถูกจับตั้งแต่ก่อน push ไม่ใช่มาเจอทีหลังบน CI ซึ่งเสียเวลากว่ามาก

ตัวเลขและสถานการณ์นี้เป็นตัวอย่างสมมติเพื่อให้เห็นกรอบการทำงาน ไม่ใช่สถิติจากผลสำรวจอย่างเป็นทางการ แต่สะท้อนรูปแบบที่ทีมพัฒนาหลายทีมมักพบเมื่อเริ่มบังคับขั้นตอนตรวจสอบให้รันอัตโนมัติแทนพึ่งความจำคน

ใช้ Hook เป็นด่านความปลอดภัยก่อนคำสั่งเสี่ยง

นอกจากเรื่อง lint และ test แล้ว Hooks ยังใช้เป็นด่านตรวจสอบก่อนที่ Agent จะรันคำสั่งที่มีความเสี่ยงสูง เช่นคำสั่งที่ลบไฟล์จำนวนมาก หรือคำสั่งที่แก้ไขฐานข้อมูลโดยตรง ทีมสามารถตั้ง Hook ให้หยุดรอการยืนยันจากคนก่อนดำเนินการต่อ แทนที่จะให้ Agent รันไปเลยโดยไม่มีใครตรวจสอบ

แนวทางนี้สำคัญมากเวลา Agent ได้รับสิทธิ์เข้าถึงระบบภายนอกผ่าน MCP เพราะยิ่งเชื่อมกับระบบจริงมากเท่าไหร่ ความเสี่ยงจากคำสั่งที่ตีความผิดก็ยิ่งสูงตาม การมี Hook เป็นด่านตรวจสอบก่อนรันคำสั่งเสี่ยงจึงเป็นชั้นความปลอดภัยที่เสริมกับการจำกัดสิทธิ์ที่ระดับ MCP Server เอง

ข้อผิดพลาดที่ทำให้ Hooks กลายเป็นตัวถ่วงแทนตัวช่วย

ทีมที่เพิ่งเริ่มใช้ Hooks มักเจอปัญหาคล้ายกันคือตั้งค่ามากเกินไปตั้งแต่แรก จนขั้นตอนทำงานปกติช้าลงเพราะต้องรอ Hook หลายตัวรันทุกครั้ง ทั้งที่บาง Hook ไม่ได้จำเป็นสำหรับทุกงาน

  • ตั้ง Hook ให้รันคำสั่งที่ใช้เวลานานเกินไปในทุกจังหวะ ทำให้ขั้นตอนทำงานช้าลงจนทีมเริ่มมองว่าเป็นตัวถ่วง
  • ไม่แจ้งให้ทั้งทีมรู้ว่ามี Hook ทำงานอยู่เบื้องหลัง ทำให้บางคนสงสัยว่าทำไมงานถึงช้าลงโดยไม่รู้สาเหตุ
  • ตั้ง Hook ที่ตรวจสอบเข้มงวดเกินไปจนบล็อกงานปกติที่ไม่มีความเสี่ยงจริง ทำให้ทีมหาทางเลี่ยง Hook แทนที่จะทำตาม
  • ไม่เคยทบทวนว่า Hook ที่ตั้งไว้ยังจำเป็นอยู่ไหมเมื่อโปรเจกต์เปลี่ยนแปลงไปตามเวลา

แนะนำ Hooks ให้ทีมยอมรับโดยไม่รู้สึกว่าถูกจับผิด

การเริ่มใช้ Hooks ในทีมที่ยังไม่เคยมีกลไกบังคับแบบนี้มาก่อน อาจถูกมองว่าเป็นการเพิ่มขั้นตอนที่ยุ่งยากหรือรู้สึกเหมือนถูกจับผิด ถ้าไม่มีการสื่อสารที่ดีก่อนเริ่มใช้ วิธีที่ช่วยลดแรงต้านคือให้ทีมมีส่วนร่วมตั้งแต่ขั้นตอนออกแบบว่าควรบังคับตรงจุดไหนบ้าง แทนที่จะเป็นการประกาศกฎจากบนลงล่างโดยไม่ปรึกษาใคร

อีกวิธีที่ได้ผลคือเริ่มจาก Hook ที่ทีมเห็นประโยชน์ชัดเจนที่สุดก่อน เช่นตัวที่ช่วยจับ error ก่อน push แทนที่ต้องไปเจอทีหลังบน CI ซึ่งเสียเวลามากกว่า เมื่อทีมเห็นผลลัพธ์จริงว่าช่วยลดงานที่ต้องแก้ทีหลัง ความรู้สึกต่อต้านก็มักจะลดลงเอง เพราะมองว่าเป็นเครื่องมือช่วยงานมากกว่าเป็นกฎที่มาจำกัดการทำงาน

ขยายการใช้งาน Hooks ไปมากกว่าแค่ Lint และ Test

เมื่อทีมคุ้นเคยกับการใช้ Hook สำหรับงานพื้นฐานแล้ว หลายทีมเริ่มขยายไปใช้กับงานที่ซับซ้อนขึ้น เช่นตรวจสอบว่าโค้ดที่แก้ไม่มีการเปิดเผยข้อมูลลับอย่าง API Key หรือรหัสผ่านที่ติดไปในไฟล์โดยไม่ตั้งใจ ก่อนที่ Agent จะยืนยันว่างานเสร็จ ซึ่งเป็นด่านความปลอดภัยเพิ่มเติมที่ช่วยลดความเสี่ยงข้อมูลรั่วไหลได้ตั้งแต่ต้นทาง

อีกแนวทางที่ทีมขนาดใหญ่บางทีมใช้คือตั้ง Hook ให้ตรวจสอบว่าไฟล์ที่แก้ไขอยู่ในขอบเขตที่ Agent ควรแตะต้องหรือไม่ เช่นห้ามแก้ไฟล์ config ของระบบ deploy โดยไม่มีการยืนยันเพิ่มเติมจากคน แม้ Agent จะเข้าใจคำสั่งถูกต้อง แต่การมีด่านตรวจสอบเพิ่มช่วยป้องกันความผิดพลาดที่อาจเกิดจากการตีความคำสั่งกำกวมได้อีกชั้นหนึ่ง

สรุป

ทีมที่ส่งโค้ดถี่ทุกวันไม่ควรพึ่งความจำของคนหรือ Agent ในการทำขั้นตอนตรวจสอบพื้นฐานอย่าง lint และ test เพราะยิ่งจำนวน Pull Request มากเท่าไหร่ โอกาสที่จะมีขั้นตอนตกหล่นก็ยิ่งสูงตาม Hooks คือกลไกที่ทำให้ขั้นตอนเหล่านี้รันได้แน่นอนทุกครั้งโดยไม่ต้องพึ่งดุลยพินิจของใครคนใดคนหนึ่ง

ทีมที่สนใจเริ่มใช้ควรเริ่มจากปัญหาที่เจอบ่อยที่สุดก่อน เช่นลืมรัน lint ก่อน commit แล้วค่อยขยายไปยังจังหวะอื่นเมื่อมั่นใจว่าชุดแรกทำงานได้ดีและไม่ทำให้ขั้นตอนทำงานปกติช้าลงจนเกินไป

  • Hooks บังคับให้คำสั่งอย่าง lint หรือ test รันอัตโนมัติในจังหวะที่กำหนด ไม่ต้องพึ่งความจำของคนหรือ Agent
  • แบ่งได้หลายจังหวะ เช่นก่อนแก้ไฟล์ หลังแก้ไฟล์เสร็จ และก่อนยืนยันว่างานเสร็จจริง
  • ใช้เป็นด่านความปลอดภัยก่อนคำสั่งเสี่ยงได้ โดยเฉพาะเมื่อต่อกับระบบภายนอกผ่าน MCP
  • ควรเริ่มจากปัญหาที่เจอบ่อยที่สุดก่อน ไม่ใช่ตั้งค่าทุกจังหวะพร้อมกันตั้งแต่วันแรก

คำถามที่พบบ่อย

Hooks ต่างจากการตั้งค่า CI/CD Pipeline ยังไง

CI/CD Pipeline ทำงานหลัง push โค้ดขึ้นไปแล้ว ส่วน Hooks ทำงานระหว่างที่ Agent กำลังทำงานอยู่บนเครื่อง ก่อนโค้ดจะถูก push ด้วยซ้ำ ทำให้จับปัญหาได้เร็วกว่าและลดจำนวนครั้งที่ pipeline บน CI จะแดง

ตั้ง Hook เยอะเกินไปมีผลเสียไหม

มีผลเสียถ้าตั้งมากเกินจำเป็น เพราะแต่ละ Hook ที่รันเพิ่มเวลาในการทำงานทุกครั้ง ควรเลือกเฉพาะขั้นตอนที่สำคัญจริงและมีปัญหาเกิดขึ้นบ่อยก่อน ไม่ใช่ตั้งทุกอย่างที่นึกออก

Hook รันคำสั่งที่ใช้เวลานานได้ไหม เช่น test ทั้งชุด

ได้ แต่ควรพิจารณาผลกระทบต่อความเร็วในการทำงาน ถ้า test ทั้งชุดใช้เวลานานมาก อาจพิจารณาแยกเป็น test ชุดเล็กที่รันเร็วสำหรับ Hook ระหว่างทำงาน แล้วเก็บ test ชุดใหญ่ไว้รันตอน CI แทน

ถ้า Hook ทำให้งานล้มเหลว Agent จะทำยังไงต่อ

โดยทั่วไป Agent จะอ่านผลลัพธ์ที่ Hook ส่งกลับมา แล้วพยายามแก้ไขปัญหาตามข้อความ error ก่อนลองใหม่ ไม่ใช่ข้ามขั้นตอนนั้นไปเฉย ๆ ซึ่งเป็นจุดแข็งที่ทำให้ Hooks มีประโยชน์มากกว่าการตรวจสอบด้วยคนเพียงอย่างเดียว

ทีมเล็กที่มีแค่สองสามคนจำเป็นต้องใช้ Hooks ไหม

ไม่จำเป็นต้องรีบใช้ตั้งแต่ทีมยังเล็ก เพราะการสื่อสารกันตรง ๆ ยังทำได้ง่าย แต่ถ้าเริ่มเห็นว่าลืมรัน test หรือ lint บ่อยขึ้นแม้ทีมจะเล็ก ก็เริ่มตั้ง Hook พื้นฐานไว้ได้เลยโดยไม่ต้องรอให้ทีมโตก่อน

Hooks ใช้ร่วมกับ Skills ได้ไหม หรือต้องเลือกอย่างใดอย่างหนึ่ง

ใช้ร่วมกันได้และทำงานเสริมกันคนละชั้น Skills กำหนดว่า Agent ควรเขียนโค้ดแบบไหน ส่วน Hooks บังคับว่าต้องผ่านขั้นตอนตรวจสอบอะไรก่อนงานจะถือว่าเสร็จจริง ทีมส่วนใหญ่ที่ใช้จริงจังมักใช้ทั้งสองอย่างควบคู่กัน

ควรเริ่มตั้ง Hook ตัวแรกจากอะไรถ้ายังไม่เคยใช้เลย

แนะนำให้เริ่มจาก Hook ที่รัน lint หรือ format หลังแก้ไฟล์เสร็จก่อน เพราะเห็นผลเร็วและกระทบขั้นตอนทำงานน้อยที่สุด แล้วค่อยขยับไปตั้ง Hook สำหรับ test และด่านความปลอดภัยเมื่อทีมคุ้นเคยกับแนวคิดนี้แล้ว

วัด Conversion LINE ทุกแบรนด์ รวมศูนย์ที่เดียว

องค์กรที่มีหลายแบรนด์ หลายสาขา หลาย LINE OA — linli รวม Tracking และส่ง Conversion กลับทุกแพลตฟอร์ม พร้อม Custom Limit เริ่มฟรี 14 วัน

ติดต่อทีม Sales

บทความที่เกี่ยวข้อง

Skills ของ Codex: วิธีทำให้ Agent เขียนโค้ดตามมาตรฐานทีมทุกครั้ง

Skills ของ Codex: วิธีทำให้ Agent เขียนโค้ดตามมาตรฐานทีมทุกครั้ง

Codex Skills คือกลไกที่ให้ทีมพัฒนาบันทึกมาตรฐานการเขียนโค้ดไว้ครั้งเดียว แล้วให้ Coding Agent ทำตามซ้ำได้ทุกงาน บทความนี้อธิบายว่ามันทำงานยังไงและควรออกแบบอย่างไรให้ใช้ได้จริง
แบ่งงานให้ AI หลายตัวทำพร้อมกันโดยไม่ชนกันเอง

แบ่งงานให้ AI หลายตัวทำพร้อมกันโดยไม่ชนกันเอง

งานที่มีหลายขั้นตอนไม่เกี่ยวข้องกัน เช่นแก้บั๊กสามจุดในโมดูลต่างกัน เสียเวลามากถ้าให้ Agent ตัวเดียวทำทีละอย่าง Subagents ช่วยแบ่งงานให้ทำคู่ขนานได้โดยแต่ละตัวมีขอบเขตของตัวเองชัดเจน
ทำไมทีมที่ใช้ Claude Code ถึงเลือกมันแทน Gemini CLI ในงานแก้บั๊กใหญ่

ทำไมทีมที่ใช้ Claude Code ถึงเลือกมันแทน Gemini CLI ในงานแก้บั๊กใหญ่

Gemini CLI กับ Claude Code ต่างเป็นเครื่องมือ AI แบบบรรทัดคำสั่งที่ทำงานในเทอร์มินัล แต่วิธีจัดการบริบทและจังหวะการแก้ปัญหาต่างกันจนส่งผลต่องานแก้บั๊กใหญ่ที่ต้องไล่ตามหลายไฟล์ บทความนี้เจาะความต่างจากมุมงานจริง