ทำผลลัพธ์ที่ดีด้วย Claude Code
(dzombak.com)- ในช่วงไม่กี่เดือนที่ผ่านมา ได้ทดลองใช้ LLM programming agents หลายตัว และพบว่า Claude Code เป็นเครื่องมือที่น่าพอใจที่สุด
- ด้วย Claude Code จึงสามารถสร้างโปรแกรมและโปรเจ็กต์ได้ราว 12 รายการ ภายในเวลาอันสั้น และทำงานที่ปกติคงไม่ได้เริ่มเพราะข้อจำกัดด้านเวลาได้
- ปัจจัยสำคัญในการใช้งานให้ได้ผลคือ การเขียนสเปกให้ชัดเจน, การจัดเตรียมเอกสารที่มีโครงสร้างโปรเจ็กต์ วิธี build และ lint, การขอให้ AI รีวิวโค้ดของตัวเอง และการใช้ global agent guide แบบปรับให้เข้ากับตนเอง
- เนื่องจากโค้ดที่ AI เขียนมักอาจ ไม่ถูกต้องหรือไม่มีประสิทธิภาพ จึงต้องตรวจทานโค้ดและ test case ทั้งหมดด้วยตนเองเสมอ และหากการทดสอบยังไม่พอ ก็ต้องเพิ่มเองหรือให้ AI เขียนแล้วตรวจซ้ำอีกครั้ง
- ภาคผนวกที่เผยแพร่เป็น global agent guide มี แนวทางการพัฒนาอย่างละเอียด เช่น แผนการ implement แบบเป็นขั้นตอน, test-driven development, ปรัชญาที่เน้นความเรียบง่าย ความชัดเจน และการใช้งานได้จริง, มาตรฐานคุณภาพ และกระบวนการแก้ปัญหา
ประสบการณ์และผลลัพธ์จากการใช้ Claude Code
- ในช่วงหลายเดือนที่ผ่านมา ได้ทดลองใช้ LLM programming agents หลายตัว และโดยเฉพาะอย่างยิ่งพบว่าประสบการณ์การใช้ Claude Code ดีที่สุด
- แม้จะไม่ได้ไร้ปัญหาเสียทีเดียว แต่ก็สามารถทำโปรแกรมและโปรเจ็กต์ได้มากกว่า 12 รายการในเวลาอันสั้น
- หากไม่มี Claude Code ก็คงแทบเป็นไปไม่ได้ที่จะทำงานทั้งหมดนี้ให้เสร็จภายในช่วงเวลาเดียวกัน
- หลายงานเป็นโปรเจ็กต์ที่คงไม่ได้ลองเริ่มด้วยซ้ำ เพราะใช้เวลามากเกินไป
กลยุทธ์การใช้งาน Claude Code
- เขียนสเปกให้ชัดเจน
- ก่อนเริ่มโปรเจ็กต์ ให้จัดทำเอกสารความต้องการและบริบทให้ชัดเจนเพื่อส่งต่อให้เอเจนต์
- วิธีนี้ช่วยกำหนดทิศทางและขอบเขตของการเขียนโค้ดให้ชัดเจน
- จัดทำเอกสารโครงสร้างโปรเจ็กต์
- เตรียมเอกสารที่รวมวิธีรัน build, lint และ test
- ทำให้เอเจนต์สำรวจ codebase และทำงานได้อย่างมีประสิทธิภาพมากขึ้น
- ขอให้เอเจนต์รีวิวโค้ด
- ให้ Claude Code รีวิวโค้ดที่สร้างขึ้นเองโดยตรง เพื่อค้นหาจุดปรับปรุงหรือบั๊กที่ไม่คาดคิด
- ใช้ global guide ส่วนตัว
- ใช้
~/.claude/CLAUDE.mdซึ่งบรรจุกฎส่วนตัว เช่น แนวทางการแก้ปัญหา, การใช้ TDD, การรักษาความเรียบง่ายและความชัดเจน, การจำกัดจำนวนครั้งที่ลอง (3 ครั้ง) เพื่อคงกระบวนการพัฒนาให้สม่ำเสมอ
- ใช้
การตรวจสอบโค้ดที่ LLM เขียน
- โค้ดที่ AI สร้างมักมีปัญหาอย่าง ข้อผิดพลาดเชิงตรรกะ, ประสิทธิภาพลดลง, หรือ การทดสอบไม่สมบูรณ์
- ผู้เขียนตรวจทานโค้ดทั้งหมดแบบ manual และยืนยันการทำงานด้วยตนเอง
- เพิ่ม test case ที่ขาดไปด้วยตนเอง
- หรือให้ AI เขียน แล้วตรวจทานโค้ดและการทดสอบอีกครั้ง
- ในสภาพแวดล้อมการทำงานแบบมืออาชีพ เมื่อชื่อของตนอยู่ใน PR ก็เน้นย้ำว่า ความรับผิดชอบต่อคุณภาพขั้นสุดท้ายเป็นของตัวเอง
ประเด็นสำคัญของ “global” agent guide ส่วนตัว
คู่มือนี้จัดการผ่านไฟล์ ~/.claude/CLAUDE.md
-
ปรัชญาและหลักการสำคัญ
- ค่อยเป็นค่อยไป: เปลี่ยนแปลงทีละเล็ก และต้อง compile กับ test ผ่านเสมอ
- เรียนรู้จากโค้ดเดิม: วิเคราะห์แพตเทิร์นของโค้ดและวางแผนก่อน implement
- ให้ความสำคัญกับการใช้งานจริง: ใช้วิธีที่ยืดหยุ่นตามสถานการณ์ของโปรเจ็กต์
- ให้ความสำคัญกับความชัดเจน: โค้ดที่อ่านง่ายและเจตนาชัดเจน หลีกเลี่ยงลูกเล่นที่ไม่จำเป็น
-
นิยามของความเรียบง่าย
- ฟังก์ชันและคลาสมีหน้าที่เดียว
- หลีกเลี่ยงการทำ abstraction เร็วเกินไป
- ลดความซับซ้อน และมุ่งสู่โค้ดที่ไม่ต้องอธิบายเพิ่มเติม
-
กระบวนการทำงาน
- 1. วางแผนและกำหนดขั้นตอน:
- งานที่ซับซ้อนให้แบ่งเป็น 3~5 ขั้น แล้วบันทึกไว้ใน
IMPLEMENTATION_PLAN.md - ระบุเป้าหมายของแต่ละขั้น, เกณฑ์ความสำเร็จ, test case และสถานะความคืบหน้า
- งานที่ซับซ้อนให้แบ่งเป็น 3~5 ขั้น แล้วบันทึกไว้ใน
- 2. ลำดับการ implement:
- ทำความเข้าใจ → เขียน test (red) → implement ขั้นต่ำสุด (green) → refactor → commit
- 3. ประเมินใหม่หลังลองครบ 3 ครั้ง:
- เมื่อไม่สำเร็จ ให้บันทึกสิ่งที่ลอง, ข้อผิดพลาด และสาเหตุ
- สำรวจทางเลือก (2~3 แนวทาง)
- ทบทวนการออกแบบพื้นฐานหรือการแยกปัญหาใหม่
- ลองใช้แพตเทิร์นหรือฟีเจอร์อื่น
- 1. วางแผนและกำหนดขั้นตอน:
-
มาตรฐานทางเทคนิค
- ให้ความสำคัญกับ composition และใช้ dependency injection
- ใช้ interface เพื่อให้ทดสอบได้ง่าย
- data flow แบบ explicit
- แนะนำ TDD และห้ามปิดการทดสอบ
-
กฎคุณภาพโค้ด
- ทุก commit ต้อง compile สำเร็จ, test ผ่าน, มีการทดสอบสำหรับฟีเจอร์ใหม่ และเป็นไปตาม code style
- ก่อน commit ให้รัน formatter และ linter, รีวิวการเปลี่ยนแปลงด้วยตนเอง และเขียน commit message ที่อธิบายว่า “ทำไม”
-
การจัดการข้อผิดพลาด
- fail fast พร้อมข้อความที่เฉพาะเจาะจง
- ให้ context ที่จำเป็นต่อการ debugging
- จัดการ exception ในระดับที่เหมาะสม และห้ามกลบข้อยกเว้น
-
เกณฑ์การตัดสินใจ
- 1. ความง่ายในการทดสอบ
- 2. ความอ่านง่ายที่ยังเข้าใจได้แม้ผ่านไป 6 เดือน
- 3. ความสอดคล้องกับแพตเทิร์นของโปรเจ็กต์
- 4. ความเรียบง่าย
- 5. ความง่ายต่อการเปลี่ยนแปลง
-
การผสานเข้ากับโปรเจ็กต์
- วิเคราะห์ฟีเจอร์ที่คล้ายกันอย่างน้อย 3 รายการ
- ใช้แพตเทิร์นและไลบรารีเดิมซ้ำ
- ใช้ test utility เดียวกัน
- หากจะนำเครื่องมือใหม่เข้ามา ต้องมีเหตุผลที่หนักแน่น
-
quality gate
- test ทั้งหมดต้องผ่าน
- ปฏิบัติตามกฎของโปรเจ็กต์
- ไม่มีคำเตือนจาก linter
- commit message ชัดเจน
- การ implement สอดคล้องกับแผน
- TODO ต้องมีหมายเลข issue
-
แนวทางการทดสอบ
- ทดสอบโดยยึด พฤติกรรม ไม่ใช่การ implement
- ถ้าเป็นไปได้ให้มี assertion เดียวต่อหนึ่งการทดสอบ
- ใช้ชื่อที่ชัดเจนเพื่ออธิบาย scenario
- ใช้ test utility เดิมซ้ำ
- การทดสอบต้องเป็น deterministic
-
สิ่งที่ห้ามอย่างเด็ดขาด
- bypass hook ด้วย
--no-verify - ปิดการทดสอบ
- commit โค้ดที่ compile ไม่ได้
- คาดเดาโดยไม่มีการตรวจสอบ
- bypass hook ด้วย
-
สิ่งที่ต้องทำเสมอ
- commit แบบค่อยเป็นค่อยไป
- อัปเดตเอกสารอย่างต่อเนื่อง
- เรียนรู้จาก implementation เดิม
- หากล้มเหลว 3 ครั้ง ให้ประเมินแนวทางใหม่
โครงการโอเพนซอร์สที่สร้างด้วย Claude Code
- reverse proxy ที่รับรู้ HTML/XML (cdzombak/xrp)
- ธีม Solarized สำหรับ VS Code (สว่าง/มืด) (cdzombak/dzsolarized-vscode)
- ตัวสร้าง RSS สำหรับ Flickr photostream (cdzombak/flickr-rss)
- เครื่องมือ metadata สำหรับคลังภาพ Lychee (cdzombak/lychee-meta-tool)
- รายงานสถานะ screen lock ของ macOS ผ่าน MQTT (cdzombak/macos-screenlock-mqtt)
- ตั้งชื่อรูป Bird Buddy ใน Lychee อัตโนมัติ (cdzombak/lychee-birb-title)
- จัดหมวดหมู่รูปภาพอัตโนมัติด้วย local LLM (cdzombak/lychee-ai-organizer)
- ระบบอัตโนมัติสำหรับติดตั้งซอฟต์แวร์แบบชุดบน macOS (cdzombak/mac-install)
- โปรเจ็กต์บริการ RSS (cdzombak/rss.church)
- ส่งออกรูป Flickr ทั้งหมด/บางส่วนพร้อมเก็บรักษา metadata (cdzombak/flickr-exporter)
- ตัวสร้างแกลเลอรี HTML แบบ static (cdzombak/gallerygen)
ยังไม่มีความคิดเห็น