เป้าหมาย
เขียน CLAUDE.md สั้นแต่ได้ผล วางไว้ถูกที่ และใช้ settings.json ล็อกสิ่งที่ "ห้ามทำ" จริงๆ
CLAUDE.md = Project instructions ของโปรเจกต์โค้ด
โหลดเข้า context อัตโนมัติทุก session (เหมือน Project/Gem ระดับ 4 แต่อยู่ในไฟล์)
| ไฟล์ | ใช้กับ | commit? |
|---|---|---|
~/.claude/CLAUDE.md |
ทุกโปรเจกต์ของคุณ (สไตล์ส่วนตัว) | ไม่ |
./CLAUDE.md หรือ ./.claude/CLAUDE.md |
ทั้งทีมในโปรเจกต์นี้ | ใช่ |
./CLAUDE.local.md |
คุณคนเดียวในโปรเจกต์นี้ (ใส่ .gitignore) |
ไม่ |
โฟลเดอร์ย่อย/CLAUDE.md |
โหลดเมื่อ Claude แตะไฟล์ในโฟลเดอร์นั้น | ใช่ |
.claude/rules/*.md |
กฎแยกเรื่อง ใส่ paths: ให้ใช้เฉพาะไฟล์ที่ตรง |
ใช่ |
ตัวอย่าง .claude/rules/api.md — โหลดเฉพาะตอนทำงานกับไฟล์ API
---
paths:
- "src/app/api/**/*.ts"
---
- ทุก route ต้องตรวจ input ด้วย zod และคืน error เป็น JSON `{ "error": "..." }`ทุกไฟล์ถูก ต่อกัน (ไม่ทับกัน) · ดึงไฟล์อื่นมาด้วย @path เช่น ดูคำสั่ง npm ที่ @package.json · Claude อ่าน AGENTS.md ได้ด้วย
ใส่อะไร / ไม่ใส่อะไร
| ใส่ ✅ | ไม่ใส่ ❌ |
|---|---|
| คำสั่ง build/test/lint ที่ถูกต้อง | เอกสารยาวทั้งเล่ม (ใช้ @ หรือ rules แทน) |
| ข้อตกลงที่เดาไม่ได้จากโค้ด | สิ่งที่ linter บังคับอยู่แล้ว |
| กับดัก (gotchas) ที่เคยพัง | API key, รหัสผ่าน, URL ภายในที่ลับ |
| ขั้นตอนก่อนส่งงาน | คำทั่วไปแบบ "เขียนโค้ดให้ดี" |
สั้นไว้ — ทุกบรรทัดกิน context ทุก session ถ้า Claude ทำผิดซ้ำค่อยเพิ่มกฎ ถ้ากฎไหนไม่เคยมีผลก็ลบ
CLAUDE.md แนะนำ ≠ บังคับ
CLAUDE.md เป็นแค่คำแนะนำ Claude อาจพลาดได้ สิ่งที่ "ห้ามเด็ดขาด" ให้ใช้ permission rules ใน settings.json (หรือ hooks ในระดับ 6d) — deny ชนะทุกโหมด
.claude/settings.json= ของทีม (commit) ·.claude/settings.local.json= ส่วนตัว ·~/.claude/settings.json= ทุกโปรเจกต์
Auto memory และ /context
- Claude จดโน้ตเองได้ (MEMORY.md) โหลดช่วงต้นทุก session ดู/แก้ด้วย
/memory— ตรวจเป็นระยะ ลบสิ่งที่ผิดหรือลับ /contextดูว่าตอนนี้อะไรกิน context อยู่บ้าง (CLAUDE.md, ไฟล์, ประวัติ) ·/initให้ Claude ร่าง CLAUDE.md จากโค้ด
⚠️ ต้องตรวจสอบ: ขนาด auto memory ที่โหลด (ปัจจุบันราว 200 บรรทัดแรก) และชื่อคำสั่งใน code.claude.com/docs
ลองเลย 🧪
ทดลอง A — ตัวอย่าง CLAUDE.md โปรเจกต์ Next.js เล็กๆ (บันทึกเป็น CLAUDE.md ที่ root แล้วแก้ให้ตรงโปรเจกต์คุณ)
# ร้านกาแฟออนไลน์ (Next.js + TypeScript)
ภาพรวมโปรเจกต์ดูที่ @README.md
## คำสั่ง
- `npm run dev` — รันเครื่อง local ที่ http://localhost:3000
- `npm test` — unit test (Vitest) ต้องผ่านก่อนส่งงานทุกครั้ง
- `npm run lint && npm run typecheck` — รันหลังแก้โค้ดเสมอ
## ข้อตกลง
- โค้ดหน้าเว็บอยู่ `src/app/`, ฟังก์ชันใช้ร่วมอยู่ `src/lib/`
- ราคาเก็บเป็นสตางค์ (integer) ห้ามใช้ float กับเงิน
- ข้อความที่ผู้ใช้เห็นเป็นภาษาไทย อยู่ใน `src/content/th.json` ห้าม hardcode
## กับดัก
- อย่าแก้ไฟล์ใน `src/generated/` (สร้างจาก `npm run codegen`)
- ตัวแปร env ฝั่ง browser ต้องขึ้นต้น `NEXT_PUBLIC_` และห้ามใส่ความลับ
## ก่อนส่งงาน
1. รัน test + lint + typecheck ให้ผ่าน
2. สรุปไฟล์ที่เปลี่ยนและเหตุผล
3. ห้าม commit/push เอง ให้ผู้ใช้ตรวจ diff ก่อนทดลอง B — ล็อกไม่ให้อ่าน .env และอนุญาตคำสั่งที่ใช้บ่อย (.claude/settings.json)
{
"permissions": {
"allow": ["Bash(npm run test *)", "Bash(npm run lint *)"],
"deny": ["Read(./.env)", "Read(./.env.*)", "Bash(git push *)"]
}
}→ เปิด claude ใหม่ แล้วสั่ง อ่านไฟล์ .env ให้หน่อย — ต้องถูกปฏิเสธ · ดูกฎที่ใช้อยู่ด้วย /permissions
ทดลอง C — ให้ Claude ตรวจ CLAUDE.md ของตัวเอง
อ่าน CLAUDE.md ของโปรเจกต์นี้ แล้วเทียบกับโค้ดจริง:
1) คำสั่งไหนผิดหรือไม่มีอยู่จริง 2) กฎไหนซ้ำกับที่ linter บังคับอยู่แล้ว
3) กับดักอะไรที่ควรเพิ่ม (ดูจาก git log และโครงโปรเจกต์) เสนอฉบับใหม่ที่สั้นลง ยังไม่ต้องแก้ไฟล์→ พิมพ์ /context ก่อนและหลังแก้ ดูว่า CLAUDE.md กินพื้นที่เท่าไร
สรุปจำง่าย
CLAUDE.md สั้น บอกสิ่งที่เดาไม่ได้ — สิ่งที่ห้ามเด็ดขาดใส่ deny ใน settings.json ความลับไม่อยู่ในทั้งสองที่