สำหรับ Vibe Coders เครื่องมืออย่าง Claude Code ของ Anthropic กำลังพลิกโฉมวิธีการที่นักพัฒนาเขียนโค้ด ดีบั๊ก และจัดการโปรเจกต์ของพวกเขา Claude Code ทำหน้าที่เป็น "เครื่องมือเขียนโค้ดแบบ agentic" ที่ทำงานอยู่ในเทอร์มินัลของคุณ สามารถเข้าใจโค้ดเบสทั้งหมดของคุณ โต้ตอบกับระบบไฟล์ของคุณ รันคำสั่ง และแม้แต่เรียกดูเว็บเพื่อค้นหาเอกสารประกอบ มันเก่งกาจในงานต่างๆ เช่น การเขียนฟีเจอร์ใหม่ การแก้ไขบั๊ก และการปรับโครงสร้างโค้ดผ่านข้อความสั่งที่เป็นภาษามนุษย์
อย่างไรก็ตาม คุณลักษณะหลักของ Large Language Models (LLMs) คือธรรมชาติของการสุ่ม (probabilistic nature) แม้ว่าสิ่งนี้จะช่วยให้สามารถแก้ปัญหาได้อย่างสร้างสรรค์ แต่บางครั้งก็อาจนำไปสู่ความไม่แน่นอนได้ คุณอาจต้องการให้การกระทำบางอย่าง เช่น การตรวจสอบรูปแบบโค้ด (linting) ไฟล์หลังจากที่มีการเปลี่ยนแปลง หรือการรันการทดสอบหลังจากเขียนฟังก์ชันใหม่ ให้เกิดขึ้น ทุกครั้ง โดยไม่ผิดพลาด การพึ่งพา LLM ให้จำและทำสิ่งเหล่านี้ในทุกกรณีอาจไม่สอดคล้องกัน
นี่คือจุดที่ Claude Code Hooks เข้ามามีบทบาท Hooks เป็นฟีเจอร์ที่ทรงพลังที่ให้การควบคุมพฤติกรรมของ Claude Code แบบกำหนดได้ (deterministic) และเป็นโปรแกรม ทำให้มั่นใจได้ว่าการกระทำบางอย่างจะเกิดขึ้นเสมอ แทนที่จะต้องพึ่งพา LLM ในการเลือกที่จะรันมัน
ลองใช้ Apidog MCP Server ที่ช่วยให้คุณสร้างโค้ดที่แม่นยำโดยการอ่านจากข้อกำหนด API ของคุณ!
บทความนี้ทำหน้าที่เป็นคู่มือที่ครอบคลุมสำหรับการทำความเข้าใจ การกำหนดค่า และการใช้ประโยชน์จาก Claude Code Hooks เพื่อสร้างเวิร์กโฟลว์การพัฒนาที่เป็นอัตโนมัติและคล่องตัวอย่างเต็มรูปแบบ
Claude Code Hooks คืออะไร?
โดยพื้นฐานแล้ว Claude Code Hooks คือคำสั่งเชลล์ที่ผู้ใช้กำหนดขึ้น ซึ่งจะทำงานโดยอัตโนมัติ ณ จุดเฉพาะในวงจรชีวิตของ Claude Code พวกมันทำหน้าที่เป็นทริกเกอร์ที่คุณสามารถกำหนดค่าให้ทำงานก่อนหรือหลังการกระทำบางอย่าง ทำให้คุณสามารถแทรกตรรกะ สคริปต์ และคำสั่งที่กำหนดเองของคุณเข้าไปในการทำงานของ Claude ได้โดยตรง
Hooks เชื่อมช่องว่างระหว่างความช่วยเหลือที่ขับเคลื่อนด้วย AI และระบบอัตโนมัติที่อิงตามกฎเกณฑ์ พวกมันช่วยให้คุณสามารถบังคับใช้มาตรฐาน ทำงานซ้ำๆ ให้เป็นอัตโนมัติ และรวมเครื่องมือภายนอกเข้ากับเวิร์กโฟลว์ของคุณได้อย่างราบรื่นและเชื่อถือได้เต็มที่
มีเหตุการณ์สำคัญในวงจรชีวิตสี่เหตุการณ์ที่สามารถเรียกใช้ hook ได้:
PreToolUse
: ทำงาน ก่อน ที่ Claude จะใช้เครื่องมือเฉพาะ (เช่น ก่อนเขียนลงในไฟล์)PostToolUse
: ทำงาน หลังจาก ที่เครื่องมือถูกใช้งานสำเร็จแล้ว (เช่น หลังจากไฟล์ถูกแก้ไข)Notification
: ทำงานเมื่อใดก็ตามที่ Claude ส่งการแจ้งเตือน (เช่น เมื่อต้องการข้อมูลจากผู้ใช้ หรือทำงานที่ใช้เวลานานเสร็จสิ้น)Stop
: ทำงานเมื่อ Claude สร้างการตอบสนองเสร็จสิ้นและหยุดทำงาน
ด้วยการกำหนดเป้าหมายเหตุการณ์เหล่านี้ คุณสามารถสร้างระบบอัตโนมัติที่ทรงพลังซึ่งสะท้อนแนวปฏิบัติที่ดีที่สุดของการพัฒนาซอฟต์แวร์สมัยใหม่ เช่น การตรวจสอบ Continuous Integration (CI) แต่ทำงานด้วยความเร็วของการพัฒนาในเครื่อง
โครงสร้างของ Claude Code Hooks: การเจาะลึกการกำหนดค่า
ในการใช้ hooks คุณต้องกำหนดพวกมันในไฟล์การตั้งค่า Claude Code ของคุณ ทำได้โดยการเพิ่มตาราง [[hooks]]
ลงในไฟล์ settings.toml
ซึ่งอยู่ในไดเรกทอรี .claude/
ภายในโปรเจกต์ของคุณ การกำหนดค่า hook แต่ละรายการมีส่วนประกอบหลักบางอย่าง
# Example Hook in .claude/settings.toml
[[hooks]]
# The event that triggers the hook.
event = "PostToolUse"
# (Optional) Conditions for the hook to run.
[hooks.matcher]
tool_name = "edit_file"
file_paths = ["*.py", "api/**/*.py"]
# The shell command to execute.
command = "ruff check --fix $CLAUDE_FILE_PATHS && black $CLAUDE_FILE_PATHS"
# (Optional) Whether to run the command in the background.
run_in_background = false
มาเจาะลึกแต่ละส่วนกัน
ฟิลด์ event
ใน Claude Code Hooks (จำเป็น)
สตริงนี้ระบุว่าเหตุการณ์ในวงจรชีวิตทั้งสี่เหตุการณ์ใดที่จะเรียกใช้ hook
"PreToolUse"
"PostToolUse"
"Notification"
"Stop"
hooks.matcher
ใน Claude Code Hooks (ทางเลือก)
matcher คือสิ่งที่ช่วยให้คุณกำหนดได้อย่างแม่นยำว่า hook ควรทำงาน เมื่อใด หากคุณละเว้น matcher hook จะทำงานสำหรับทุกเหตุการณ์ที่ระบุ ตัวอย่างเช่น PostToolUse
hook ที่ไม่มี matcher จะทำงานหลังจากเรียกใช้เครื่องมือ ทุกครั้ง
matcher มีสามฟิลด์ที่คุณสามารถใช้เพื่อกรองเหตุการณ์ได้:
tool_name
: สตริงที่ตรงกับชื่อของเครื่องมือที่กำลังใช้งาน เหมาะสำหรับการกำหนดเป้าหมายการกระทำเฉพาะ เช่นedit_file
,git_commit
, หรือrun_command
file_paths
: อาร์เรย์ของสตริงที่มีรูปแบบ glob hook จะทำงานก็ต่อเมื่อไฟล์ที่เกี่ยวข้องกับการใช้เครื่องมือตรงกับรูปแบบใดรูปแบบหนึ่งเหล่านี้ ตัวอย่างเช่น["*.py"]
กำหนดเป้าหมายไฟล์ Python ทั้งหมด ในขณะที่["src/components/**/*.jsx"]
กำหนดเป้าหมายไฟล์ JSX ในไดเรกทอรีเฉพาะquery
: สตริงที่ตรงกับอินพุตที่ให้กับเครื่องมือ มีประโยชน์สำหรับทริกเกอร์ที่เฉพาะเจาะจงมากขึ้น เช่น การเรียกใช้ hook เฉพาะเมื่อมีการใช้เครื่องมือrun_command
กับคำสั่งที่มีnpm
ฟิลด์ command
สำหรับ Claude Code Hooks (จำเป็น)
นี่คือหัวใจของ hook — คำสั่งเชลล์ที่จะถูกเรียกใช้เมื่อเงื่อนไขทริกเกอร์เป็นจริง คำสั่งนี้ทำงานด้วยสิทธิ์เดียวกับบัญชีผู้ใช้ของคุณ ดังนั้นจึงสามารถทำอะไรก็ได้ที่คุณสามารถทำได้ในเทอร์มินัลของคุณ
เพื่อให้คำสั่งมีความไดนามิก Claude Code มีชุดตัวแปรสภาพแวดล้อมที่ถูกเติมด้วยบริบทจากเหตุการณ์ที่เรียกใช้ hook
ตัวแปรสภาพแวดล้อมที่พร้อมใช้งาน:
$CLAUDE_EVENT_TYPE
: ประเภทของเหตุการณ์ (`PreToolUse`, `PostToolUse`, เป็นต้น)$CLAUDE_TOOL_NAME
: ชื่อของเครื่องมือที่ถูกใช้ (เช่นedit_file
)$CLAUDE_TOOL_INPUT
: พารามิเตอร์อินพุตดิบที่ส่งไปยังเครื่องมือในรูปแบบ JSON$CLAUDE_FILE_PATHS
: รายการพาธไฟล์ที่คั่นด้วยช่องว่างที่เกี่ยวข้องกับการเรียกใช้เครื่องมือ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับการส่งไฟล์ไปยังตัวจัดรูปแบบ (formatters) ตัวตรวจสอบรูปแบบ (linters) หรือตัวรันการทดสอบ (test runners)$CLAUDE_NOTIFICATION
: เนื้อหาของข้อความแจ้งเตือน (เฉพาะสำหรับเหตุการณ์Notification
)$CLAUDE_TOOL_OUTPUT
: ผลลัพธ์จากการดำเนินการของเครื่องมือ (เฉพาะสำหรับเหตุการณ์PostToolUse
)
การตั้งค่า run_in_background
สำหรับ Claude Code Hooks (ทางเลือก)
นี่คือค่าบูลีน (`true` หรือ `false`) หากตั้งค่าเป็น `true` คำสั่งของ hook จะถูกดำเนินการในกระบวนการแยกต่างหาก และ Claude จะไม่รอให้เสร็จสิ้นก่อนที่จะดำเนินการต่อ เหมาะสำหรับงานที่ใช้เวลานาน เช่น ชุดทดสอบที่ครอบคลุม หรือกระบวนการสร้าง (build processes) ที่คุณไม่ต้องการให้ขัดขวางการกระทำถัดไปของ Claude ค่าเริ่มต้นคือ `false`
กรณีการใช้งานจริงและตัวอย่างสำหรับ Claude Code Hooks
พลังที่แท้จริงของ hooks จะถูกเปิดเผยเมื่อคุณนำไปใช้กับเวิร์กโฟลว์การพัฒนาในโลกแห่งความเป็นจริง นี่คือตัวอย่างการใช้งานจริงบางส่วนเพื่อให้คุณเริ่มต้น
1. การตรวจสอบรูปแบบโค้ดและการจัดรูปแบบอัตโนมัติด้วย Claude Code Hooks
บังคับใช้สไตล์โค้ดที่สอดคล้องกันทั่วทั้งโปรเจกต์ของคุณโดยอัตโนมัติ hook นี้จะรัน ruff
linter และ black
formatter บนไฟล์ Python ใดๆ ที่ Claude แก้ไข
ไฟล์: .claude/settings.toml
[[hooks]]
event = "PostToolUse"
[hooks.matcher]
tool_name = "edit_file"
file_paths = ["*.py"]
# Command to lint, fix, and format the edited Python files.
command = "echo 'Running auto-formatter...' && ruff check --fix $CLAUDE_FILE_PATHS && black $CLAUDE_FILE_PATHS"
2. การรันการทดสอบอัตโนมัติด้วย Claude Code Hooks
แนวปฏิบัติหลักของการพัฒนาแบบทดสอบนำ (Test-Driven Development - TDD) คือการเขียนการทดสอบแล้วจึงเขียนโค้ดเพื่อให้ผ่านการทดสอบเหล่านั้น ทำซ้ำจนกว่าทุกอย่างจะทำงาน คุณสามารถทำให้ขั้นตอน "รันการทดสอบ" เป็นอัตโนมัติด้วย hook ตัวอย่างนี้จะรัน pytest
เมื่อใดก็ตามที่ไฟล์ในไดเรกทอรี src/
หรือ tests/
ถูกแก้ไข
ไฟล์: .claude/settings.toml
[[hooks]]
event = "PostToolUse"
run_in_background = true # Tests can be slow, run in background.
[hooks.matcher]
tool_name = "edit_file"
file_paths = ["src/**/*.py", "tests/**/*.py"]
# Command to run the test suite.
command = "pytest"
3. การแจ้งเตือนบนเดสก์ท็อปแบบกำหนดเองผ่าน Claude Code Hooks
หากคุณขอให้ Claude ทำงานที่ใช้เวลานาน คุณอาจจะลุกออกจากคอมพิวเตอร์ hook นี้ใช้เครื่องมือบรรทัดคำสั่งเช่น ntfy
(บริการแจ้งเตือนแบบ pub-sub ที่ใช้ HTTP อย่างง่าย) เพื่อส่งการแจ้งเตือนแบบพุชไปยังโทรศัพท์หรือเดสก์ท็อปของคุณเมื่อ Claude ต้องการความสนใจจากคุณ
ไฟล์: .claude/settings.toml
[[hooks]]
event = "Notification"
# Sends the notification content to a public ntfy.sh topic.
# You can host your own for privacy.
command = 'ntfy publish my-claude-alerts "$CLAUDE_NOTIFICATION"'
4. การตรวจสอบความถูกต้องก่อนคอมมิตโดยใช้ Claude Code Hooks
เช่นเดียวกับ Git hooks คุณสามารถใช้ Claude Code Hooks เพื่อรับประกันคุณภาพ ก่อน ที่จะมีการคอมมิต ตัวอย่างนี้จะรันสคริปต์ที่กำหนดเองเพื่อตรวจสอบคีย์ API หรือดำเนินการตรวจสอบความถูกต้องอื่นๆ ก่อนที่ Claude จะได้รับอนุญาตให้ใช้เครื่องมือ git_commit
ไฟล์: .claude/settings.toml
[[hooks]]
event = "PreToolUse"
[hooks.matcher]
tool_name = "git_commit"
# Command to run a pre-commit check script.
# The script should exit with a non-zero code to halt the commit.
command = "sh ./.claude/pre-commit-checks.sh"
การตั้งค่าและการดีบั๊ก Claude Code Hooks ของคุณ
การเริ่มต้นใช้งาน hooks นั้นตรงไปตรงมา แต่การตรวจสอบและการดีบั๊กเป็นกุญแจสำคัญในการทำให้แน่ใจว่าพวกมันทำงานได้ตามที่คาดไว้
- สร้างการกำหนดค่าของคุณ: ตรวจสอบให้แน่ใจว่าคุณมีไฟล์
.claude/settings.toml
อยู่ในไดเรกทอรีรูทของโปรเจกต์ของคุณ เพิ่มการกำหนดค่า[[hooks]]
ของคุณที่นั่น - ตรวจสอบการกำหนดค่า: หลังจากบันทึกไฟล์
settings.toml
ของคุณ ให้รันคำสั่ง/hooks
ภายในอินเทอร์เฟซเทอร์มินัลของ Claude Code คำสั่งพิเศษนี้จะแสดงการกำหนดค่า hook ที่โหลดอยู่ในปัจจุบัน ทำให้คุณสามารถดูได้ทันทีว่า Claude ได้แยกวิเคราะห์อย่างถูกต้องหรือไม่ - ตรวจสอบข้อผิดพลาด:
- TOML ไม่ถูกต้อง: ตรวจสอบให้แน่ใจว่าไฟล์
settings.toml
ของคุณมีไวยากรณ์ที่ถูกต้อง วงเล็บหรือเครื่องหมายคำพูดที่วางผิดตำแหน่งอาจทำให้ไม่สามารถโหลดได้ - ปัญหาคำสั่ง: ทดสอบ
command
ของคุณโดยตรงในเชลล์ของคุณเพื่อให้แน่ใจว่าทำงานได้ตามที่คาดไว้ ตรวจสอบการพิมพ์ผิดและตรวจสอบให้แน่ใจว่าไฟล์ที่รันได้ที่จำเป็น (black
,pytest
,ntfy
เป็นต้น) อยู่ในPATH
ของระบบของคุณ - ตัวแปรดีบั๊ก: หากต้องการดูว่าตัวแปรสภาพแวดล้อมมีค่าอะไรบ้าง ให้ใช้
echo
เพื่อเขียนลงในไฟล์บันทึก ตัวอย่างเช่น:command = "echo 'Tool: $CLAUDE_TOOL_NAME, Files: $CLAUDE_FILE_PATHS' >> /tmp/claude_hook.log"
บทสรุป: พลังของ Claude Code Hooks
Claude Code Hooks ยกระดับเครื่องมือนี้จากผู้ช่วยเขียนโค้ดที่มีความสามารถสูงให้กลายเป็นพันธมิตรการพัฒนาที่บูรณาการอย่างสมบูรณ์และทำงานแบบกำหนดได้ (deterministic) ด้วยการกำหนดกฎง่ายๆ แต่ทรงพลัง คุณสามารถทำให้ส่วนที่น่าเบื่อแต่สำคัญของเวิร์กโฟลว์ของคุณเป็นอัตโนมัติ ทำให้คุณมีอิสระในการมุ่งเน้นไปที่แง่มุมที่ซับซ้อนและสร้างสรรค์ของวิศวกรรมซอฟต์แวร์ ไม่ว่าจะเป็นการบังคับใช้คุณภาพโค้ด การทำให้วงจร TDD ของคุณง่ายขึ้น หรือการรวมเข้ากับบริการของบุคคลที่สาม hooks ก็มอบเฟรมเวิร์กที่แข็งแกร่งซึ่งจำเป็นในการปรับแต่ง Claude Code ให้ตรงกับความต้องการเฉพาะของคุณ
เมื่อคุณคุ้นเคยกับความสามารถของ Claude Code มากขึ้น ให้เริ่มต้นเล็กๆ ด้วย hook การจัดรูปแบบง่ายๆ แล้วจึงสำรวจระบบอัตโนมัติที่ซับซ้อนมากขึ้น คุณจะพบว่าฟีเจอร์นี้จำเป็นอย่างยิ่งสำหรับการสร้างสภาพแวดล้อมการพัฒนาที่คาดเดาได้ มีประสิทธิภาพ และเป็นส่วนตัวอย่างแท้จริงด้วย AI
ลองใช้ Apidog MCP Server ที่ช่วยให้คุณสร้างโค้ดที่แม่นยำโดยการอ่านจากข้อกำหนด API ของคุณ!