วิธีตั้งค่า Git Hook เพื่อตรวจสอบคุณภาพโค้ดก่อน Commit อย่างปลอดภัย

ที่มาภาพ: Unknown Source

วิธีตั้งค่า Git Hook เพื่อตรวจสอบคุณภาพโค้ดก่อน Commit อย่างปลอดภัย

⚡ สรุป 30 วิ

Git Hook คือสคริปต์ที่ทำงานอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่างในระบบเวอร์ชันคอนโทรล เช่น `pre‑commit` หรือ `post‑merge` การใช้ Hook ช่วยให้เราตรวจสอบคุณภาพโค้ดก่อนที่การเปลี่ยนแปลงจะถูกบันทึกเข้าสู่ r…

ทำความเข้าใจ Git Hook — Git Hook Overview

Git Hook คือสคริปต์ที่ทำงานอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่างในระบบเวอร์ชันคอนโทรล เช่น `pre‑commit` หรือ `post‑merge` การใช้ Hook ช่วยให้เราตรวจสอบคุณภาพโค้ดก่อนที่การเปลี่ยนแปลงจะถูกบันทึกเข้าสู่ repository ทำให้ทีมพัฒนาสามารถควบคุมมาตรฐานได้อย่างต่อเนื่อง

  • ประโยชน์หลัก: ป้องกันโค้ดผิดพลาดจากการ commit, ลดความเสี่ยงของบั๊กใน production
  • ทำงานแบบ local: ไม่ต้องเชื่อมต่ออินเทอร์เน็ต จึงเร็วและปลอดภัย
  • กำหนดได้หลายประเภท: `pre‑commit`, `prepare‑commit‑msg`, `post‑checkout` ฯลฯ

เตรียมเครื่องมือพื้นฐาน — Prerequisites

ก่อนจะตั้งค่า Hook ควรตรวจสอบว่าระบบของคุณพร้อมใช้งานแล้วหรือยัง

  • ระบบปฏิบัติการที่รองรับสคริปต์ Bash, PowerShell หรือ Python
  • ติดตั้ง Git เวอร์ชัน 2.20 ขึ้นไป (ใช้ `git --version` ตรวจสอบ)
  • เลือกเครื่องมือ lint/formatter ที่ต้องการ เช่น ESLint, Pylint, Prettier
**Tip: หากทีมทำงานหลายภาษา ควรจัดทำ Hook แยกไฟล์ตามภาษาหรือสร้างสคริปต์อุ่น ๆ ที่เรียกใช้ lint ของแต่ละภาษาโดยอัตโนมัติ

สร้าง Hook แบบ pre‑commit — Pre‑commit Hook Setup

การตั้งค่า `pre‑commit` ทำได้ง่ายเพียงไม่กี่ขั้นตอน

  • **ขั้นตอนที่ 1: เข้าโฟลเดอร์ `.git/hooks` ของโปรเจค
  • **ขั้นตอนที่ 2: สร้างไฟล์ใหม่ชื่อ `pre-commit` (ไม่มีนามสกุล)
  • **ขั้นตอนที่ 3: ให้สิทธิ์ทำงานโดยใช้คำสั่ง `chmod +x pre-commit`
  • **ขั้นตอนที่ 4: ใส่โค้ดตรวจสอบคุณภาพลงในไฟล์ เช่น เรียก lint หรือรัน unit test

```bash #!/bin/bash git diff --cached --name-only --diff-filter=ACM | grep '\.js$' | while read file; do npx eslint "$file" if [ $? -ne 0 ]; then echo "ไม่ ESLint พบข้อผิดพลาดใน $file" exit 1 fi done ```

  • **ขั้นตอนที่ 5: บันทึกและทดสอบโดยทำการ `git add` แล้ว `git commit` หาก lint ผ่าน Hook จะให้ commit ต่อได้
**Warning: อย่าลืมตรวจสอบว่าเส้นทางของเครื่องมือ (เช่น `npx eslint`) อยู่ใน PATH ของระบบ มิฉะนั้น Hook จะล้มเหลวและบล็อกการ commit ทั้งหมด

ตัวอย่างสคริปต์ตรวจสอบคุณภาพโค้ด — Sample Linter Script

ต่อไปเป็นตัวอย่างสคริปต์ที่รองรับหลายภาษาโดยใช้ Python เป็นตัวกลาง

```python #!/usr/bin/env python3 import subprocess, sys, os

def run_cmd(cmd): result = subprocess.run(cmd, shell=True) return result.returncode changed_files = subprocess.check_output( "git diff --cached --name-only --diff-filter=ACM", shell=True ).decode().splitlines()

for file in changed_files: if file.endswith('.py'): rc = run_cmd(f'pylint {file}') elif file.endswith('.js'): rc = run_cmd(f'npx eslint {file}') else: continue if rc != 0: print(f'ไม่ ตรวจสอบล้มเหลว: {file}') sys.exit(1)

print('ใช่ ทั้งหมดผ่านการตรวจสอบ') ```

  • ข้อดี: เพียงไฟล์เดียวสามารถจัดการหลายภาษาพร้อมกัน
  • ข้อเสีย: ต้องติดตั้ง Python และเครื่องมือ lint แต่ละตัวใน environment

เชื่อมต่อกับ CI/CD เพื่อความปลอดภัยเพิ่ม — CI Integration

แม้ Hook ทำงานที่เครื่อง local แล้ว การตรวจสอบบนเซิร์ฟเวอร์ CI ยังจำเป็นเพื่อให้มั่นใจว่าทุก commit ที่เข้าสู่ main branch ผ่านมาตรฐานเดียวกัน

  • เพิ่มขั้นตอน `lint` ใน pipeline (GitHub Actions, GitLab CI, Jenkins)
  • ตั้งค่า branch protection ให้บังคับผ่านการตรวจสอบจาก CI ก่อน merge
  • ใช้ไฟล์คอนฟิกเดียว (`.eslintrc.js`, `.pylintrc`) ทั้งใน local Hook และ CI เพื่อความสอดคล้อง
เครื่องมือทำงานที่ Localทำงานบน CIรองรับหลายภาษา
ESLintใช่ใช่(JS/TS)
Pylintใช่ใช่(Python)
Prettierใช่ใช่(หลายภาษา)
Tip: หากต้องการความเร็วสูงสุด ให้ใช้ caching** ของ dependencies ใน CI เช่น `actions/cache` เพื่อไม่ให้ติดตั้ง lint ทุกครั้ง

การจัดการและอัปเดต Hook อย่างมีประสิทธิภาพ — Hook Management

เมื่อโปรเจคเติบโต จำนวนไฟล์ Hook อาจเพิ่มขึ้น ควรจัดระบบให้ดูแลง่าย

  • เก็บสคริปต์หลักไว้ในโฟลเดอร์ `hooks/` ของ repository แล้วใช้ symlink ไปที่ `.git/hooks`
  • ใช้เครื่องมืออย่าง pre‑commit (Python package) เพื่อกำหนด Hook ผ่านไฟล์ `.pre-commit-config.yaml`
  • ตรวจสอบเวอร์ชันของ Hook ด้วย Git tags หรือ version bump ในไฟล์ config

```yaml repos:

  • repo: https://github.com/pre-commit/mirrors-eslint

rev: v8.0.0 hooks:

  • id: eslint

files: \.js$ ```

ขั้นตอนการใช้งาน

  • ติดตั้ง: `pip install pre-commit && pre-commit install`
  • อัปเดต: `pre-commit autoupdate`
**Warning: อย่าให้ Hook ทำงานหนักเกินไป (เช่น รัน test ทั้งชุด) เพราะจะทำให้การ commit ช้าลงอย่างเห็นได้ชัด

สรุป — Summary

  • Git Hook เป็นวิธีง่าย ๆ ที่ช่วยตรวจสอบคุณภาพโค้ดก่อน commit โดยไม่ต้องพึ่ง CI เสมอ
  • ตั้งค่า `pre‑commit` ด้วยสคริปต์ Bash หรือ Python เพื่อรัน lint ของภาษาที่ใช้
  • ควรใช้เครื่องมือ pre‑commit เพื่อจัดการ Hook อย่างเป็นระบบและทำให้ทีมสามารถอัปเดตได้ง่าย
  • เชื่อมต่อกับ CI/CD และตั้งค่า branch protection เพื่อความปลอดภัยระดับองค์กร

สิ่งที่ควรจำ

  • ตรวจสอบ PATH ของ lint tool ก่อนใช้งานใน Hook
  • ให้ Hook ทำงานเร็วที่สุดโดยเลือกตรวจสอบเฉพาะไฟล์ที่เปลี่ยนแปลง
  • ใช้ไฟล์คอนฟิกเดียวกันบน local และ CI เพื่อความสอดคล้อง
  • ควบคุมเวอร์ชัน Hook ด้วยระบบจัดการแบบเดียวกับโค้ดหลัก

ด้วยขั้นตอนเหล่านี้ ทีมของคุณจะได้ กระบวนการ commit ที่ปลอดภัย ลดบั๊กที่เข้าสู่ production และรักษามาตรฐานคุณภาพโค้ดอย่างต่อเนื่อง.

แชร์บทความนี้:

ชอบบทความแบบนี้?

สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม

แหล่งข่าวต้นฉบับ

ชื่อต้นฉบับ
วิธีตั้งค่า Git Hook เพื่อตรวจสอบคุณภาพโค้ดก่อน Commit อย่างปลอดภัย
ผู้เขียน
กองบรรณาธิการ Thai Tech News
แหล่ง
บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
วันที่เผยแพร่
21 สิงหาคม 2569 เวลา 10:50

Related

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

วิธีตั้งค่า Windows Terminal พร้อมโปรไฟล์ PowerShell เพื่อเพิ่มประสิทธิภาพการทำงานGrowth
21 สิงหาคม 2569 เวลา 11:00

วิธีตั้งค่า Windows Terminal พร้อมโปรไฟล์ PowerShell เพื่อเพิ่มประสิทธิภาพการทำงาน

การใช้ Windows Terminal ร่วมกับ PowerShell เป็นวิธีที่ทำให้การทำงานบนคอมพิวเตอร์เร็วขึ้นและเป็นระเบียบมากยิ่งขึ้น บทความนี้จะแนะนำขั้นตอนตั้งค่าโปรไฟล์ PowerShell อย่างละเอียด เพื่อเพิ่มประสิทธิภาพในก…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีเชื่อมต่อ Google Cloud BigQuery กับ Power BI โดยใช้ Direct Query อย่างปลอดภัยGrowth
20 สิงหาคม 2569 เวลา 18:30

วิธีเชื่อมต่อ Google Cloud BigQuery กับ Power BI โดยใช้ Direct Query อย่างปลอดภัย

การเชื่อมต่อ Google Cloud BigQuery กับ Power BI ด้วยโหมด **Direct Query** ช่วยให้ผู้ใช้สามารถดึงข้อมูลสดจากคลังข้อมูลขนาดใหญ่ได้โดยไม่ต้องทำการนำเข้าข้อมูลลงเครื่องมือ BI อีกครั้ง ทำให้งานรายงานเป็นแบ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ7 นาที
วิธีตั้งค่า AI ตรวจจับโค้ดซ้ำซ้อนในโปรเจคด้วย SonarQube บน CI/CD อย่างปลอดภัยGrowth
20 สิงหาคม 2569 เวลา 12:30

วิธีตั้งค่า AI ตรวจจับโค้ดซ้ำซ้อนในโปรเจคด้วย SonarQube บน CI/CD อย่างปลอดภัย

การตรวจจับโค้ดซ้ำซ้อน (duplicate code) เป็นส่วนสำคัญของคุณภาพซอฟต์แวร์ เพราะช่วยลดบั๊กและเพิ่มความง่ายต่อการดูแลรักษา โดยเฉพาะเมื่อใช้ AI ของ SonarQube ที่สามารถวิเคราะห์รูปแบบเชิงลึกได้ การตั้งค่าให้…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
วิธีเปิดใช้งาน Secure Boot บน Windows 11 เพื่อเพิ่มความปลอดภัยของระบบGrowth
19 สิงหาคม 2569 เวลา 20:30

วิธีเปิดใช้งาน Secure Boot บน Windows 11 เพื่อเพิ่มความปลอดภัยของระบบ

**บทความนี้จะพาคุณเข้าใจและทำตามขั้นตอนการเปิด Secure Boot บน Windows 11 อย่างง่ายดาย เพื่อเพิ่มระดับความปลอดภัยของระบบให้สูงสุด**

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
คัดลอกลิงก์แล้ว!