# กำหนดค่า hook: เลือกสิ่งที่จะสแกน

> เลือกว่า hook ที่สแกนไฟล์จะข้ามอะไรบ้าง ใช้กับทุก hook หรือเฉพาะ hook เดียวก็ได้

Canonical: https://lagune.ai/th-TH/docs/hooks/configure
ภาษา: th-TH
ต้นฉบับ: https://lagune.ai/docs/hooks/configure
อัปเดตล่าสุด: 2026-11-07

บล็อก `checkers` ใน `.lagune/configs.json` กำหนดว่า hook ที่สแกนไฟล์จะข้ามอะไรบ้าง ใช้กับทุก hook หรือเฉพาะ hook เดียวก็ได้

## วิธีกำหนดค่า

เพิ่มหรือลบ path และรูปแบบได้จากบรรทัดคำสั่ง โดยครอบรูปแบบด้วยเครื่องหมายคำพูดเพื่อให้ shell คงรูปแบบนั้นไว้ตามที่เขียน:

```bash
npx lagune write add --ignore test/fixtures
npx lagune write add --ignore 'packages/*/dist' --checker secrets
npx lagune write remove --ignore test/fixtures
```

หรือเลือกได้ในหน้า Settings ของ [แดชบอร์ด](https://lagune.ai/th-TH/docs/get-started/dashboard) หรือกำหนดไว้ในไฟล์โดยตรง:

```json
{
  "checkers": {
    "ignore": ["test/fixtures"],
    "secrets": { "gitignore": false, "ignore": ["test/fixtures", "temp"] }
  }
}
```

### การตั้งค่า

| คีย์        | ค่า                                       | ค่าเริ่มต้น | คำอธิบาย                                                                                              |
| ----------- | ----------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------- |
| `gitignore` | `true` หรือ `false`                       | `true`      | ข้ามสิ่งที่ **Git** ละเว้นไว้ แต่ยังสแกนไฟล์ที่ **Git** ติดตามอยู่เสมอ                                |
| `ignore`    | path หรือรูปแบบที่นับจาก root ของโปรเจกต์ | `[]`        | ข้ามสิ่งที่ตรงกับแต่ละรายการและทุกอย่างที่อยู่ภายใต้รายการนั้น แม้เป็นไฟล์ที่ **Git** ติดตามอยู่ก็ตาม |

คีย์ที่ระดับบนสุดของ `checkers` ใช้กับทุกตัวตรวจ ส่วนคีย์ที่อยู่ใต้ชื่อตัวตรวจใดจะใช้กับตัวตรวจนั้นเท่านั้นและแทนที่คีย์ที่ใช้ร่วมกัน ในตัวอย่างนี้ `secrets` จึงสแกนสิ่งที่ **Git** ละเว้นไว้ และข้าม `test/fixtures` กับ `temp` เมื่อ `write add --ignore` สร้างรายการแรกให้ตัวตรวจใดเป็นของตัวเอง รายการนั้นจะเริ่มจากสำเนาของรายการที่ใช้ร่วมกัน

### รูปแบบ

รูปแบบเริ่มนับจาก root ของโปรเจกต์ ดังนั้น `*.generated.ts` จะครอบคลุมเฉพาะไฟล์ที่อยู่ตรงนั้น ส่วน `**/*.generated.ts` ครอบคลุมไฟล์เหล่านั้นในทุกระดับความลึก ชื่อต้องตรงกันทุกตัวอักษร รวมถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

| รูปแบบ              | สิ่งที่ข้าม                                   |
| ------------------- | --------------------------------------------- |
| `dist`              | `dist` ที่ root ของโปรเจกต์                   |
| `packages/*/dist`   | `dist` ในทุกโฟลเดอร์ภายใต้ `packages`         |
| `**/dist`           | `dist` ทุกตัวในทุกระดับความลึก                |
| `**/*.generated.ts` | ทุกไฟล์ที่ชื่อลงท้ายด้วย `.generated.ts`      |
| `fixture-?`         | `fixture-a`, `fixture-1` และชื่อทำนองเดียวกัน |
| `[ab]-cache`        | `a-cache` และ `b-cache`                       |
| `[*]x`              | `*x` โดยถือ `*` เป็นอักขระธรรมดา              |

## วิธีอ่านผลลัพธ์

ท้ายรายงานจะบอกจำนวน path ที่การสแกนข้ามไป แยกตามสิ่งที่ละเว้น path เหล่านั้น:

```text
Skipped 25 paths that Git ignores and 3 paths that .lagune/configs.json ignores. Name one with --dir or --file to scan it.
```

เอนจินจะสแกน path ที่ระบุด้วย `--dir` หรือ `--file` เสมอ ไม่ว่าการตั้งค่าจะเป็นอย่างไร ส่วนการตั้งค่าที่เอนจินอ่านไม่ได้จะทำให้ตัวตรวจหยุดพร้อม error ที่ระบุถึงการตั้งค่านั้น เช่น รูปแบบที่ขึ้นต้นด้วย `!` หรือช่องว่าง รูปแบบที่ชี้ออกไปนอกโปรเจกต์ รูปแบบที่เปิดวงเล็บเหลี่ยมค้างไว้ หรือรูปแบบที่ใช้เวลาจับคู่นานเกินไป

## คำถามที่พบบ่อย

### Lagune ตั้งค่าเหล่านี้ให้เองไหม

ไม่ เฟส charter จะแสดงรายการโฟลเดอร์ที่ commit ไว้ซึ่งผลการอ่านโปรเจกต์ชี้ว่าไม่ใช่โค้ดที่คุณต้องป้องกัน เช่น fixture สำหรับการทดสอบที่จงใจเขียนให้ดูมีช่องโหว่ แล้วบันทึกเฉพาะโฟลเดอร์ที่คุณเลือกตามหมายเลขเท่านั้น

### ตัวตรวจควรสแกนสิ่งที่ Git ละเว้นไว้เมื่อไร

เมื่อ repository นั้นไม่ใช่ของที่คุณไว้ใจได้ เพราะไฟล์ .gitignore ภายใน repository อาจซ่อนโค้ดไว้ หรือเมื่อโฟลเดอร์ build อาจมีคีย์ที่ฝังเข้าไปตอน build ตั้ง gitignore เป็น false ได้ทั้งกับทุก checker หรือเฉพาะ checker เดียว
