การรักษาคุณภาพของโค้ดเป็นหัวใจสำคัญของการพัฒนาซอฟต์แวร์ที่ยั่งยืน ไม่ว่าคุณจะเขียนโปรแกรมด้วยภาษาใดก็ตาม การตรวจจับข้อผิดพลาดตั้งแต่เนิ่น ๆ ก่อนที่จะถูก Commit เข้าสู่ Repository เป็นแนวปฏิบัติที่ดีที่สุดอย่างยิ่งสำหรับนักพัฒนาระบบมืออาชีพ เมื่อเราพูดถึงสคริปต์ Bash หรือ Shell Script ซึ่งมักใช้ในการจัดการระบบและงาน Automation ต่างๆ ความแม่นยำจึงมีความสำคัญสูงสุด บทความนี้จะพาไปดูวิธีการตั้งค่า Git Pre-commit Hook เพื่อให้แน่ใจได้ว่าทุกครั้งที่มีการเพิ่มไฟล์ จะต้องผ่านกระบวนการตรวจสอบทางไวยากรณ์โดยเครื่องมือชั้นยอดอย่าง ShellCheck เสียก่อน
ทำไมต้องใช้ Pre-commit Hooks?
Git hooks คือกลไกอัตโนมัติในตัวของ Git ที่ช่วยให้ผู้ใช้งานสามารถกำหนดฟังก์ชันพิเศษบางอย่างให้ทำงานเมื่อเกิดเหตุการณ์เฉพาะเจาะจงกับ Version Control System (VCS) เช่น push, pull หรือที่เรากำลังสนใจคือ pre-commit
- Pre-commit hook:
- <script>hook</script> git commit.
- Purpose หลัก:
ShellCheck และบทบาทในการพัฒนาสคริปต์ Bash
Bash Scripts เป็นภาษาที่มีประสิทธิภาพสูงสำหรับการจัดการระบบ แต่ก็มีโอกาสเกิด Human Error ได้ง่าย ShellCheck ถูกออกแบบมาโดยเฉพาะเพื่อวิเคราะห์และระบุช่องโหว่หรือแนวทางการเขียนที่ไม่เหมาะสมทางด้านความปลอดภัยและการปฏิบัติงานที่ดีที่สุดสำหรับสคริปต์ประเภทนี้ การนำมันเข้ามาใช้ใน Pre-commit Hook จึงเป็นการสร้างชั้นการป้องกันอัตโนมัติ ที่บังคับให้ผู้พัฒนารับทราบ Warning ต่าง ๆ ทันที
ขั้นตอนการตั้งค่า Git Pre-commit Script
เราจะทำการติดตั้งไฟล์ script เข้าไปอยู่ใน directory .git/hooks ซึ่งจำเป็นต้องทำด้วยมือ เนื่องจาก Hooks เหล่านี้จะไม่ถูก Track โดย Git เพื่อรักษาความเป็นท้องถิ่นของการทำงาน
- 1. สร้างไฟล์ pre-commit hook:
touch .git/hooks/pre-commit.(ตรวจสอบว่าไม่มีไฟล์ชื่อเดียวกันอยู่แล้ว) - 2. กำหนด Permission ให้รันได้:
<code>chmod +x .git/hooks/pre-commit</code> - 3. เขียนโค้ด Logic ใน Hook File:
.git/hooks/pre-commit ด้วย Text Editor และใส่ logic การตรวจสอบดังตัวอย่างต่อไปนี้ โค้ดส่วนใหญ่ใน hooks ควรใช้ Shebang Line (&) ที่ถูกต้องเพื่อระบุ InterpreterExample Pre-Commit Script
#!/bin/sh\n# ShellCheck hook for Bash scripts only\ndir_to_check=$(find . -name '*.bashrc' *.sh); \nenv VAR=(); if [ ! $dir_to_check ]; then echo