Agent Dev Thai Academyprinciples · patterns · architecture

รันในเครื่องเราผ่านหมด พอขึ้นจริงพังทันที

รันในเครื่องผ่านแต่ขึ้นจริงพัง เพราะค่าที่เปลี่ยนตามที่รันถูก hardcode ไว้ในโค้ด ย้ายไป .env ใส่ .gitignore ตั้งแต่วันแรก แล้วให้โปรแกรมหยุดทันทีพร้อมบอกชื่อตัวแปรที่ขาด

โค้ดชุดเดิม เครื่องเรารันผ่านหมด กด deploy ขึ้นไป พังทันที

เปิด log ดู มันหา database ไม่เจอ

ทั้งที่เมื่อกี้ยังใช้ได้อยู่เลย

โค้ดไม่ได้เปลี่ยนสักบรรทัด สิ่งที่เปลี่ยนคือที่ที่มันไปรัน


โค้ดชุดเดียว ต้องรันได้หลายที่ เครื่องเรา เครื่องเพื่อน แล้วก็ของจริง

แต่ละที่มีของรอบตัวไม่เหมือนกัน database คนละตัว key คนละอัน address คนละอัน

ของพวกนี้ไม่ใช่โค้ด มันคือค่าที่เปลี่ยนตามที่รัน แล้วมันต้องอยู่นอกโค้ด


ทำไม AI ถึงเขียนแบบนี้ให้ทุกครั้ง

ตอนมันเขียน มันเห็นแค่เครื่องเรา

ใส่ localhost:5432 ลงไปตรงนั้นเลย เอา key จริงวางกลางไฟล์เลย เพราะเป็นทางที่สั้นที่สุดที่ทำให้เรากดรันแล้วผ่าน

มันทำถูกตามที่สั่ง เราแค่ไม่เคยบอกว่าโค้ดชุดนี้จะต้องไปอยู่ที่อื่นด้วย


เช็คสิบวินาที

เปิด search ในโปรเจกต์ แล้วหาคำพวกนี้

localhost    127.0.0.1    http://    password    api_key    sk-

เจอกี่ที่ นั่นคือจำนวนจุดที่ต้องไล่แก้ด้วยมือ ตอนโค้ดออกจากเครื่องเรา

ถ้าเจอ key จริงในนั้นด้วย แปลว่ามันอยู่ใน git มาตลอด


เส้นแบ่งที่ใช้ได้จริง

ค่าไหนเปลี่ยนตามที่รัน คือ config เอาออกไปไว้ใน .env

ค่าไหนเหมือนกันทุกที่ คือโค้ด อยู่ในไฟล์ได้

VAT 7% ไม่ใช่ config เพราะมันไม่ได้เปลี่ยนตามว่ารันที่ไหน

address ของ database เป็น config เพราะมันเปลี่ยนทุกที่


ของที่ต้องอยู่ใน .env

  • address ของ database
  • key กับ secret ของ service ข้างนอกทุกตัว
  • URL ของ API ที่เราเรียก
  • โหมดว่ากำลังรันเป็น dev หรือของจริง

แล้ว .env ต้องอยู่ใน .gitignore ตั้งแต่วันแรก

ถ้า key เคยขึ้น git ไปแล้ว ลบ commit ทิ้งไม่พอ ต้องไปกดยกเลิก key นั้นแล้วออกใหม่ ของเดิมถือว่าหลุดไปแล้ว


เขียนใส่ CLAUDE.md ให้จบ

ค่าที่เปลี่ยนตามเครื่องที่รัน ห้าม hardcode
- URL, port, key, secret, path ให้อ่านจาก env
- ตอนเริ่มโปรแกรม ถ้าไม่มีค่าไหน ให้หยุดแล้วบอกชื่อตัวแปรที่ขาด
- เพิ่มตัวแปรใหม่ ต้องเพิ่มใน .env.example ด้วยทุกครั้ง

ข้อกลางสำคัญที่สุด

ถ้าค่าหาย แล้วโปรแกรมยอมรันต่อ มันจะไปพังตอนมีคนใช้ แล้วเราจะไล่หาไม่เจอว่าพังเพราะอะไร

ให้มันหยุดตั้งแต่วินาทีแรกพร้อมบอกว่าขาดตัวไหน จบใน 10 วินาที


โค้ดที่รันได้ที่เดียว ยังไม่ใช่โค้ดที่เสร็จ

มันแค่ยังไม่เคยออกจากเครื่องเรา