ป้ายกำกับ: Switch-case

SVN Commit Message Standards (การกำหนด Commit Prefix Message และการตั้งค่า Hook Scripts)SVN Commit Message Standards (การกำหนด Commit Prefix Message และการตั้งค่า Hook Scripts)

ในโลกของการพัฒนาซอฟต์แวร์ที่ความเร็วและความแม่นยำคือหัวใจสำคัญ ระบบควบคุมเวอร์ชัน (Version Control System) จึงเป็นเครื่องมือพื้นฐานที่ขาดไม่ได้ การบันทึกประวัติการเปลี่ยนแปลงโค้ดอย่างเป็นระบบจึงไม่ใช่แค่การเก็บไฟล์เก่า แต่เป็นการสร้าง “เรื่องเล่า” ของโปรเจกต์ทั้งหมด ซึ่งหากเรื่องราวนั้นไม่ชัดเจน ก็อาจนำไปสู่ความสับสนและปัญหาในการบำรุงรักษาในระยะยาว

การกำหนดมาตรฐานสำหรับข้อความ Commit (Commit Message Standards) คือการสร้างกฎเกณฑ์ที่ชัดเจนว่าทุกครั้งที่มีการบันทึกการเปลี่ยนแปลง จะต้องมีรูปแบบข้อมูลอะไรบ้าง โดยทั่วไปแล้ว การใช้ Prefix หรือ Type เช่น [FEAT]: สำหรับฟีเจอร์ใหม่, [FIX]: สำหรับการแก้ไขบั๊ก, หรือ [REFACTOR]: สำหรับการปรับโครงสร้างโค้ด จะช่วยให้ผู้ที่เข้ามาดูประวัติย้อนหลังสามารถเข้าใจบริบทของการเปลี่ยนแปลงได้อย่างรวดเร็ว

การบังคับใช้มาตรฐานในระดับฐานข้อมูลด้วย PostgreSQL Triggers

แม้ว่า Commit Message จะเกี่ยวข้องกับระบบ Version Control แต่การรักษาความสมบูรณ์ของข้อมูล (Data Integrity) ในระดับฐานข้อมูลก็จำเป็นต้องมีกลไกการตรวจสอบที่เข้มงวด ในบริบทของ PostgreSQL เราสามารถใช้ Triggers และ Stored Functions เพื่อจำลองการทำงานของ Hook Scripts (เช่น pre-commit hooks) ซึ่งจะทำหน้าที่ตรวจสอบความถูกต้องของข้อมูลก่อนที่ Transaction จะเสร็จสมบูรณ์

หลักการทำงานของ Trigger สำหรับ Commit Message

เราสามารถสร้างฟังก์ชันที่รับค่าข้อความที่กำลังจะถูกบันทึก (Commit Message) เข้ามา จากนั้นฟังก์ชันจะตรวจสอบว่าข้อความนั้นมีรูปแบบ Prefix ตามที่กำหนดหรือไม่ หากไม่ผ่านการตรวจสอบ ฟังก์ชันจะยกเลิกการทำงาน (Raise Exception) ทำให้การ Commit ล้มเหลวทันที

SQL

-- 1. สร้างฟังก์ชันตรวจสอบรูปแบบข้อความ Commit (PL/pgSQL) --
CREATE OR REPLACE FUNCTION validate_commit_message() RETURNS TRIGGER AS $$
BEGIN
    -- ตรวจสอบว่าข้อความต้องขึ้นต้นด้วย [FEAT]:, [FIX]: หรือ [REFACTOR]:
    IF NEW.commit_message !~ '^\[(FEAT|FIX|REFACTOR)\]:.*
?\n?$' THEN
        RAISE EXCEPTION 'Invalid Commit Message Format: Message must start with [FEAT]:, [FIX]:, or [REFACTOR]:';
    END IF;
    RETURN NEW;
END;$$ LANGUAGE plpgsql;

-- 2. สร้าง Trigger เพื่อเรียกใช้ฟังก์ชันก่อนการ INSERT/UPDATE ข้อมูล Commit --
CREATE TRIGGER check_commit_message
BEFORE INSERT OR UPDATE ON commit_history
FOR EACH ROW
EXECUTE FUNCTION validate_commit_message();

ในตัวอย่างนี้ validate_commit_message() คือหัวใจสำคัญที่ทำหน้าที่เป็นตัวบังคับใช้กฎ (Enforcement Layer) โดยใช้ Regular Expression (!~) เพื่อตรวจสอบรูปแบบข้อความที่ถูกส่งเข้ามา หากรูปแบบไม่ตรงตามที่กำหนด (เช่น ไม่ขึ้นต้นด้วย `[FEAT]:`) ระบบจะยกเว้นข้อผิดพลาด (Raise Exception) และป้องกันไม่ให้ข้อมูลที่ไม่เป็นมาตรฐานถูกบันทึกเข้าสู่ตาราง commit_history

บทสรุปและแนวปฏิบัติที่ดีที่สุด

การกำหนดมาตรฐาน Commit Message ไม่ใช่แค่เรื่องของการจัดรูปแบบข้อความ แต่คือการสร้างเอกสารประกอบการทำงาน (Documentation) ที่มีชีวิตชีวาให้กับระบบ การใช้ PostgreSQL Triggers ช่วยให้เราสามารถยกระดับการควบคุมคุณภาพข้อมูลให้เป็นระดับระบบ (System Level) ทำให้มั่นใจได้ว่าทุกการเปลี่ยนแปลงที่เกิดขึ้นในฐานข้อมูลมีที่มาที่ไปที่ชัดเจนและเป็นมาตรฐานเดียวกันเสมอ