ในการพัฒนาระบบด้วย OpenCode หลายคนอาจเกิดข้อสงสัยว่า โครงสร้างของ .opencode/commands/ มีไว้ทำอะไร และความแตกต่างระหว่าง Instruction กับ Custom Command คืออะไร ในเมื่อทั้งคู่ต่างก็ใช้ควบคุม AI ได้เหมือนกัน บทความนี้จะพาไปเจาะลึกบทบาท ศูนย์รวมคำสั่งลัด และแนวทางการนำไปประยุกต์ใช้พัฒนาซอฟต์แวร์จริง
1. กำหนดเวิร์กโฟลว์อัตโนมัติด้วย .opencode/commands/
โฟลเดอร์ .opencode/commands/ ทำหน้าที่เป็นศูนย์รวมสคริปต์คำสั่งลัด (Custom Slash Commands) ช่วยให้เราล็อกลำดับเวิร์กโฟลว์ซ้ำๆ ให้ AI ทำงานตามขั้นตอนที่กำหนดได้ทันที:
- เปลี่ยน Markdown เป็น Custom Command: เพียงสร้างไฟล์
.mdในโฟลเดอร์นี้ เช่นrefactor.mdจะกลายเป็นคำสั่ง/refactorใน CLI อัตโนมัติ - ลำดับงานอัตโนมัติ (Automated Workflow): ล็อกกระบวนการทำงานให้เป็นมาตรฐาน เช่น ตรวจสอบโค้ด, ปรับปรุงโครงสร้าง, เขียน Test และรันสแกนความปลอดภัยตามลำดับ
- สร้างมาตรฐานให้ทีม (Team Standardization): เมื่อแชร์โฟลเดอร์นี้ลงใน Git Repository ทุกคนในทีมจะรันเวิร์กโฟลว์ด้วยมาตรฐานเดียวกันทั้งหมด
2. ความแตกต่างระหว่าง Instruction และ Command
แม้ว่าทั้งสองส่วนจะใช้ข้อความควบคุม AI แต่มันถูกออกแบบมาเพื่อทำงานคนละระดับและคนละขอบเขต (Scope):
| หัวข้อ | Instruction (กฎและบทบาท) | Command (สคริปต์เวิร์กโฟลว์) |
|---|---|---|
| เปรียบเหมือน | Job Description / กฎระเบียบ | SOP / สคริปต์รันกระบวนการทำงาน |
| พฤติกรรม | สอดแทรกอยู่ใน System Prompt คอยกำกับทุกๆ บทสนทนาแบบ passive | ทำงานเมื่อถูกเรียกใช้ผ่าน Slash Command เท่านั้น (Event-driven) |
| ขอบเขตการทำงาน | กำหนดหน้าที่ สิทธิ์การเข้าถึง และสไตล์การตอบคำถามของ AI | ร้อยเรียงขั้นตอนการทำงานเฉพาะกิจให้สำเร็จเป็นรอบๆ ไป |
| ตำแหน่งจัดเก็บ | opencode.json, .opencode/agents/*.md, AGENTS.md |
.opencode/commands/*.md |
สรุปสั้นๆ: Instruction คือการบอกว่า "คุณคือใคร และต้องปฏิบัติตามกฎอะไรบ้าง" ส่วน Command คือการบอกว่า "เมื่อฉันเรียกใช้ปุ่มนี้ ให้เริ่มรันขั้นตอนที่ 1, 2, 3... ทันที"
3. การใช้ Custom Command ในงานพัฒนาจริง
Custom Command ใน OpenCode ทำหน้าที่เป็น Prompt Workflow Template ที่รองรับการรับค่า Arguments จากผู้ใช้ผ่านตัวแปร เช่น $ARGUMENTS ช่วยให้เราสร้างคำสั่งย่อที่ยืดหยุ่นและนำกลับมาใช้ซ้ำได้ง่าย
ตัวอย่างการเขียน Command สำหรับ Refactor โค้ด (.opencode/commands/refactor.md)
---
description: ปรับปรุงโครงสร้างโค้ดให้อ่านง่าย มีประสิทธิภาพ และตรงตาม Clean Code (ใช้งาน: /refactor <ชื่อไฟล์หรือฟังก์ชัน>)
---
เป้าหมายที่ต้องการ Refactor: **$ARGUMENTS**
ให้ดำเนินการตามขั้นตอนต่อไปนี้อย่างเคร่งครัด:
1. **วิเคราะห์โค้ดเดิม:** ตรวจหา Code Smells, ความซับซ้อน (Cyclomatic Complexity) หรือจุดที่ซ้ำซ้อน
2. **ปรับปรุงโครงสร้าง:** แยกฟังก์ชันให้เล็กและกระชับ ปรับชื่อตัวแปรให้สื่อความหมาย และนำ Clean Code Principles มาปรับใช้
3. **ตรวจสอบความถูกต้อง:** ตรวจสอบให้แน่ใจว่าพฤติกรรมเดิมของระบบไม่เสียหาย
4. **สรุปผล:** แสดงรายการจุดที่มีการเปลี่ยนแปลงพร้อมอธิบายเหตุผล
4. ตัวอย่างการใช้งานใน OpenCode CLI
เมื่อต้องการใช้งาน ผู้ใช้เพียงพิมพ์เรียก Slash Command พร้อมแนบข้อมูลเป้าหมายเข้าไปในคำสั่งได้ทันที:
/refactor src/services/auth.ts
ระบบจะนำข้อความ src/services/auth.ts เข้าไปแทนที่ตัวแปร $ARGUMENTS อัตโนมัติ แล้ว AI จะเริ่มรันขั้นตอนการวิเคราะห์ ปรับโครงสร้าง และสรุปผลตามลำดับที่ล็อกไว้ในไฟล์ Command ทันที
บทสรุป
การแยกบทบาทระหว่าง Instruction (คุมพฤติกรรมหลัก) และ Command ในโฟลเดอร์ .opencode/commands/ (คุมลำดับงานเฉพาะกิจ) จะช่วยเปลี่ยนการสั่งงาน AI จากเดิมที่เป็นการพิมพ์คุยไปมาแบบสะเปะสะปะ ให้กลายเป็นเวิร์กโฟลว์ที่ได้มาตรฐาน รวดเร็ว และลดความผิดพลาดในการพัฒนาซอฟต์แวร์ได้อย่างแท้จริง
No comments:
Post a Comment