Cursor คืออะไร

Cursor คือ Code Editor ที่มี AI อยู่ข้างใน — แทนที่จะพิมพ์ code เองทุกตัว เราพิมพ์ "บอก AI ว่าอยากได้อะไร" แล้ว AI เขียน code ให้

"เหมือนมี Developer ฝีมือดีนั่งอยู่ข้างๆ — เราแค่บอกว่าอยากได้อะไร แล้วเขาทำให้"

Idea2Level ใช้ Cursor เป็นเครื่องมือหลักในการสร้างทั้งเว็บไซต์ ทั้ง server ทั้ง database — โดยไม่มีใครในทีมที่ "เขียน code เอง" แม้แต่คนเดียว ทุกอย่างสั่ง AI ด้วยภาษาคน

วิธีสั่ง AI 3 แบบ

วิธีสั่งใช้เมื่อกดปุ่ม
Chatถาม-ตอบ อธิบายให้ AI เข้าใจ contextCtrl+L
Composerสั่งให้ AI แก้หลายไฟล์พร้อมกันCtrl+I
Inline Editแก้ code ตรงจุดที่ cursor อยู่Ctrl+K

Vibe Coding คืออะไร

แทนที่จะพิมพ์คำสั่งใน Terminal ทีละบรรทัด เราใช้ ภาษาพูดบอก Cursor แล้วให้ AI จัดการแทน

แบบเก่า (พิมพ์ command เอง)
git checkout -b feature/dev-a/calendar
git add src/components/Calendar.tsx
git commit -m "feat: add calendar"
แบบ Vibe Coding (พิมพ์ใน Cursor Chat)
สร้าง branch ใหม่ชื่อ feature/dev-a/calendar
แล้ว add เฉพาะไฟล์ Calendar.tsx
แล้ว commit ว่า feat: add calendar

ผลลัพธ์เหมือนกันเป๊ะ แต่วิธีหลังคนไม่เขียน code ก็ทำได้

ตั้งค่า AI — Rules, Memory, Ignore

Rules Files — สอน AI ว่า project ใช้ tech อะไร

เมื่อเปิด project ใหม่ AI จะ "ไม่รู้" ว่า project นี้ใช้ tech อะไร — ไฟล์ Rules คือ "คู่มือสำหรับ AI" ที่อ่านก่อนทำงานทุกครั้ง

project/
└── .cursor/
    └── rules/
        ├── general.mdc      <- กฎทั่วไป (tech stack, ภาษา, convention)
        ├── frontend.mdc     <- กฎ Next.js / React
        ├── backend.mdc      <- กฎ Go / Fiber
        └── forbidden.mdc    <- สิ่งที่ห้าม AI ทำเด็ดขาด

ตัวอย่าง general.mdc

Project นี้ใช้ Next.js 15, React 19, Go/Fiber, PostgreSQL
ภาษาที่ใช้ใน comment และ variable: อังกฤษ
ภาษาที่ตอบกลับในแต่ละ chat: ไทย
ห้าม hardcode API key หรือ password ใดๆ ในไฟล์ code
ทุก secret ต้องอ่านจาก environment variable เท่านั้น
Prompt: สร้างไฟล์ Rules | Cursor Chat | ง่าย
สร้าง .cursor/rules/general.mdc สำหรับ project ที่ใช้
Next.js 15, React 19, Go/Fiber, PostgreSQL
ให้ AI ตอบเป็นภาษาไทย และห้าม hardcode secrets ทุกกรณี

ตัวอย่าง forbidden.mdc

ห้ามใช้ Express.js — project นี้ใช้ Go/Fiber เท่านั้น
ห้าม hardcode URL ที่เป็น localhost ใน code
ห้ามลบ .env ออกจาก .gitignore

PROJECT.md — ความจำระยะยาวของ AI

AI ใน Cursor ลืมทุกอย่างเมื่อปิด session — แก้ด้วย 2 ไฟล์

project/
├── PROJECT.md   <- อธิบาย project: architecture, module, การตัดสินใจสำคัญ
└── SESSION.md   <- งานที่ทำค้างไว้ เปิดมาทำต่อได้ทันที
Prompt: เริ่ม session ใหม่ | Cursor Chat | ง่าย
@PROJECT.md @SESSION.md
ฉันกลับมาทำงานต่อแล้ว
ช่วยสรุปว่าค้างอยู่ตรงไหน และขั้นตอนต่อไปคืออะไร
Prompt: ก่อนปิด session | Cursor Chat | ง่าย
@SESSION.md
อัพเดทไฟล์นี้ด้วย สิ่งที่ทำวันนี้ และงานที่ยังค้างอยู่
Tips: ก่อนมี SESSION.md ใช้เวลา 20 นาทีทุกเช้า "จำ" ว่าเมื่อวานทำอะไรค้าง — ตอนนี้เหลือ 2 นาที

.cursorignore — กัน AI ไม่ให้อ่านไฟล์ลับ

เหมือน .gitignore แต่สำหรับ Cursor — ไฟล์ที่อยู่ใน list นี้ AI จะไม่นำไปประมวลผลเลย

.env
.env.*
*.pem
*.key
secrets/
สำคัญ: ถ้าไม่ตั้ง — ตอนพิมพ์ @codebase ถาม AI เรื่องอะไรสักอย่าง มันอาจ "อ่าน" ไฟล์ .env ที่มี API key จริงๆ แล้วเอาไปใส่ใน code

@ Symbols — วิธีดึงข้อมูลให้ AI

พิมพ์ใน ChatAI จะได้รับ
@PROJECT.mdเนื้อหาของไฟล์นั้น
@src/api/ทุกไฟล์ใน folder
@codebaseค้นหาทั่วทั้ง project
@docsdocumentation ที่ index ไว้
@webค้นข้อมูลจากอินเทอร์เน็ต

Security & Secrets

โครงสร้างไฟล์ .env ที่ปลอดภัย

กฎตายตัว: ไม่มี secret ใดๆ อยู่ใน code เลย — ทุกอย่างเก็บใน .env และ .env ไม่เคยขึ้น Git
project/
├── .env.example    <- commit ขึ้น GitLab ได้ (มีแค่ชื่อ variable)
├── .env.local      <- ห้าม commit (ค่าจริงสำหรับ dev)
├── .env.production <- ห้าม commit (ค่าจริงสำหรับ production)
└── .gitignore      <- commit ได้ (มี .env อยู่ใน list)

วิธีบอก Cursor เรื่อง Secret โดยไม่เปิดเผย

วิธีที่ถูก
@.env.example
ช่วยเขียน database connection สำหรับ Go/Fiber
โดยอ่านค่าจาก environment variable
ตามที่เห็นใน .env.example
วิธีที่ผิด
API key ของฉันคือ sk-or-v1-abc123...
ช่วยเขียน code เชื่อมต่อ OpenRouter ด้วย key นี้

วิธีหลังอันตรายมาก — AI จะเอา key จริงไปฝังใน code ตรงๆ

ตั้งค่าความปลอดภัยทั้งหมดในรอบเดียว

Prompt: ตั้งค่า Security ครบชุด | Cursor Chat | ง่าย
ช่วยสร้างไฟล์ต่อไปนี้ให้ครบ:
1. .gitignore ที่ครอบคลุม .env ทุกรูปแบบ, ไฟล์รูป, วีดีโอ, ไฟล์ขนาดใหญ่
2. .cursorignore กัน AI ไม่ให้อ่าน secrets
3. .env.example สำหรับ project Next.js + Go/Fiber + PostgreSQL + OpenRouter

ถ้า Secret หลุดแล้ว — ทำอะไรก่อน

ขั้นที่ 1: Revoke key ทันที — ไปที่ dashboard ของ service นั้น แล้ว revoke/rotate key

ขั้นที่ 2: ลบออกจาก git history

บอก Cursor ว่า:
"ช่วยลบไฟล์ .env ออกจาก git history ทั้งหมด
 โดยใช้ git-filter-repo แล้ว force push"
กฎเหล็ก: ถ้า key หลุดไป public ให้ถือว่า compromised ทันที ต้องออก key ใหม่เสมอ — แม้จะลบออกจาก history แล้ว

Remote SSH — ทำงานเป็นทีมบน Server กลาง

แนวคิด — ทำไมใช้ Server กลาง

"เหมือน monitor หลายจอเสียบเข้า PC เครื่องเดียว — แต่ละคนเห็นหน้าจอตัวเอง ทำงานบน folder ตัวเอง แต่ทุกอย่างรันอยู่บนเครื่องเดียวกัน"
Nat
Dev A
Dev B
SSH
DEV SERVER
/home/nat/jigsaw/
/home/dev_a/jigsaw/
/home/dev_b/jigsaw/
git push / pull
GITLAB
main production
develop รวม code
feature/ ของแต่ละคน

ทำไมเลือกวิธีนี้?

  1. ลดเวลา setup จาก 2 วันเหลือ 15 นาที
  2. Environment เหมือนกันทุกคน — ไม่มี "เครื่องผมรันได้นะ"
  3. Secret อยู่บน server เครื่องเดียว ไม่กระจายไปทุกเครื่อง

Admin: ตั้งค่า Server ครั้งแรก

Prompt: สร้าง Setup Script | Cursor Chat / Claude | กลาง
ช่วยสร้าง bash script สำหรับ Ubuntu 22.04 ที่ทำสิ่งต่อไปนี้:
1. สร้าง Linux user: nat, dev_a, dev_b, dev_c
2. ตั้งค่า SSH ให้ปลอดภัย (ปิด root login, บังคับใช้ SSH key, เปลี่ยน port เป็น 2222)
3. ตั้งค่า UFW firewall เปิด port 2222, 80, 443
4. ตั้งค่า git identity template สำหรับแต่ละ user

รัน script นี้ 1 ครั้ง ใช้เวลา 3 นาที — ถ้าทำ manual ต้องใช้เวลาอย่างน้อย 2 ชั่วโมง

Dev: เชื่อม Cursor เข้า Server

ขั้นที่ 1: สร้าง SSH config

Prompt: ตั้งค่า SSH | Cursor Chat | ง่าย
ช่วยสร้าง SSH config ใน ~/.ssh/config
สำหรับเชื่อมต่อ dev server ที่ IP: 203.xxx.xxx.xxx
port: 2222, username: dev_a
ใช้ key file: ~/.ssh/id_dev_server

ขั้นที่ 2: เปิด Cursor แล้วเชื่อม

  1. กด Ctrl+Shift+P
  2. พิมพ์: Remote-SSH: Connect to Host
  3. เลือก: dev-server
  4. เลือก folder: /home/dev_a/jigsaw/

ขั้นที่ 3: เชื่อม GitLab จาก Server

Prompt: สร้าง SSH Key สำหรับ GitLab | Cursor Chat | ง่าย
ฉันอยู่บน dev server แล้ว
ช่วยสร้าง SSH key สำหรับเชื่อม GitLab ที่ gitlab.synerry.com
แล้วแสดง public key ให้ฉันเอาไปวางใน GitLab

Git Workflow — สั่ง Git ด้วยภาษาพูด

Flow ประจำวัน

[เช้า] pull develop ล่าสุด
   |
สร้าง branch ตัวเอง (feature/dev-a/xxx)
   |
แก้ code -> commit -> แก้ -> commit (ทำซ้ำทั้งวัน)
   |
[งานเสร็จ] push branch ขึ้น GitLab
   |
เปิด Merge Request -> แจ้ง Nat
   |
Nat review -> อนุมัติ -> Merge เข้า develop
   |
ลบ branch เก่า -> เริ่ม feature ใหม่

เริ่มวันใหม่ — ดึง code ล่าสุด

Prompt: ดึง code ล่าสุด | Cursor Chat | ง่าย
ดึง code ล่าสุดจาก develop branch มาที่ workspace ฉัน
แล้วบอกว่ามีอะไรเปลี่ยนแปลงจากเมื่อวานบ้าง

สร้าง Branch ทำ Feature

Prompt: สร้าง Branch ใหม่ | Cursor Chat | ง่าย
สร้าง branch ใหม่จาก develop
ชื่อ feature/dev-a/calendar
แล้วเปลี่ยนมาอยู่ที่ branch นี้
กฎตั้งชื่อ: feature/[ชื่อคน]/[ชื่องาน] — บอกว่าเป็นของใคร ทำอะไร ดูปุ๊บรู้

Commit & Push

Prompt: Commit งาน | Cursor Chat | ง่าย
add เฉพาะไฟล์ที่เกี่ยวกับ Calendar ที่แก้ไปแล้ว
แล้ว commit ด้วย message ที่เหมาะสมตาม conventional commits
Prompt: Push ขึ้น GitLab | Cursor Chat | ง่าย
ตรวจสอบว่าไม่มี secret หรือไฟล์ที่ไม่ควร commit
แล้ว push branch feature/dev-a/calendar ขึ้น GitLab
Tips: commit บ่อยๆ ดีกว่า commit ทีเดียวตอนเสร็จ — "แก้ 1 เรื่อง commit 1 ครั้ง" ถ้าพลาดย้อนกลับง่ายกว่า

เปิด Merge Request

  1. เปิด Browser ไปที่ GitLab
  2. กด "Create Merge Request"
  3. Title: feat: Calendar module — monthly view
  4. Assignee: Nat | Target Branch: develop (ไม่ใช่ main!)
  5. กด Submit
Prompt: เขียน MR Description | Cursor Chat | ง่าย
ช่วยสรุป commit ทั้งหมดที่ทำใน branch นี้
ให้เป็น Merge Request description แบบกระชับ

หลัง Merge — เก็บกวาด

Prompt: เก็บกวาดหลัง Merge | Cursor Chat | ง่าย
กลับมาที่ develop branch
ดึง code ที่เพิ่ง merge มา
แล้วลบ branch feature/dev-a/calendar ที่ใช้เสร็จแล้ว

ป้องกัน Conflict

4 กฎป้องกัน Code ทับกัน

กฎวิธีทำ
1 คน 1 branchห้ามทำงานบน branch เดียวกัน
แบ่ง module ชัดDev A = Calendar, Dev B = Chat, Dev C = Auth
ดึง develop ทุกเช้าก่อนทำงานทุกวัน pull ก่อนเสมอ
Merge บ่อยๆห้ามถือ feature branch ไว้เกิน 3 วัน

วิธีเช็คและแก้ Conflict

Prompt: เช็ค Conflict | Cursor Chat | ง่าย
เช็คว่า branch ของฉันมี conflict กับ develop ล่าสุดไหม
ถ้ามีช่วยบอกว่า conflict ที่ไฟล์ไหน และแนะนำวิธีแก้

Protected Branch — บล็อค push เข้า main

ตั้งค่าบน GitLab (Admin ทำครั้งเดียว)

GitLab -> Settings -> Repository -> Protected Branches
Branch: main
Allowed to push: No one
Allowed to merge: Maintainers (Nat เท่านั้น)
Require approval: 1
สถานการณ์ผลลัพธ์
Dev push feature branchได้ปกติ
Dev push ตรงเข้า mainระบบบล็อคอัตโนมัติ
เข้า main ผ่าน MR ที่ Nat อนุมัติได้

CODEOWNERS — กำหนดเจ้าของ module

เมื่อมีการแก้ไฟล์ใน folder ของใคร GitLab จะ assign คนนั้นเป็น reviewer อัตโนมัติ

# .gitlab/CODEOWNERS

src/components/calendar/   @dev_a
src/components/chat/       @dev_b
src/api/auth/              @dev_c
src/api/admin/             @nat

Prompt Cheatsheet

Prompt ประจำวัน

เริ่มวันใหม่:

@PROJECT.md @SESSION.md
ฉันกลับมาทำงานแล้ว ช่วยดึง develop ล่าสุดมา
แล้วสรุปว่าวันนี้ต้องทำอะไรต่อ

เริ่ม Feature:

สร้าง branch feature/dev-a/[ชื่องาน] จาก develop แล้วเริ่มทำงาน

Save งาน:

add เฉพาะไฟล์ที่เกี่ยวกับงานที่ทำ แล้ว commit ด้วย message ที่เหมาะสม

ก่อน Push:

ตรวจสอบว่าไม่มี secret, รูปภาพ, หรือไฟล์ที่ไม่ควร commit
แล้ว push branch นี้ขึ้น GitLab

ปิดวัน:

@SESSION.md อัพเดทไฟล์นี้ด้วยสิ่งที่ทำวันนี้ และงานที่ยังค้างอยู่

Prompt ตั้งค่า Project

สร้าง Rules:

สร้าง .cursor/rules/general.mdc สำหรับ project ที่ใช้
Next.js 15, React 19, Go/Fiber, PostgreSQL
ให้ AI ตอบเป็นภาษาไทย และห้าม hardcode secrets ทุกกรณี

สร้าง Security Files:

ช่วยสร้างไฟล์ต่อไปนี้ให้ครบ:
1. .gitignore ครอบคลุม .env, รูป, วีดีโอ, ไฟล์ขนาดใหญ่
2. .cursorignore กัน AI ไม่ให้อ่าน secrets
3. .env.example สำหรับ project

Prompt แก้ปัญหาฉุกเฉิน

Secret หลุดขึ้น Git:

ช่วยลบไฟล์ .env ออกจาก git history ทั้งหมด
โดยใช้ git-filter-repo แล้ว force push

เช็ค Conflict:

เช็คว่า branch ของฉันมี conflict กับ develop ล่าสุดไหม
ถ้ามีช่วยบอกว่า conflict ที่ไฟล์ไหน และแนะนำวิธีแก้

ย้อน commit ที่พลาด:

ช่วยดู commit ล่าสุดของฉัน
ถ้ามีปัญหา ช่วย revert กลับไปเป็น commit ก่อนหน้า