eugenemind.com
← กลับไปที่บล็อก

31 ตุลาคม 2569 · 12 นาทีในการอ่าน

รีวิวโค้ดที่เอเจนต์ AI แก้ไขบนเครื่องตัวเอง โดยไม่ต้องเปิด Pull Request

#ai #code-review #developer-tools #git

ผมใช้ Claude Code และ Codex อยู่บ่อย ๆ เลยต้องกลับมาตรวจโค้ดที่เอเจนต์แก้ให้เป็นประจำ บางงานเปลี่ยนไฟล์ไปหลายจุด ถึงโปรเจกต์จะคอมไพล์ผ่านและเทสต์ผ่าน ก็ไม่ได้แปลว่าผมเห็นด้วยกับวิธีที่เอเจนต์เลือกใช้

สิ่งที่ผมอยากได้คือหน้าตารีวิวแบบ GitHub หรือ GitLab แต่ทำงานบนเครื่องตัวเอง เปิด diff เทียบกับ dev ไล่ดูไฟล์ คอมเมนต์ที่บรรทัดที่มีปัญหา แล้วส่งข้อสังเกตกลับไปให้เอเจนต์ โดยยังไม่ต้องเปิด Pull Request หรือ Merge Request ผมอยากตรวจให้เรียบร้อยก่อนค่อยส่งให้คนอื่นรีวิว

ผมก็ไม่อยากยกการรีวิวทั้งหมดให้เอเจนต์อีกตัวทำแทน บทความ Nobody Reviews Their Agent’s Code พูดถึงเรื่องเดียวกัน และแนะนำ crit ที่ให้คนคอมเมนต์การเปลี่ยนแปลงของเอเจนต์ ให้เอเจนต์แก้ แล้วคนกลับมาตรวจอีกรอบ ผมเห็นด้วยกับผู้เขียน การรีวิวด้วย AI เป็นตัวช่วยเสริมได้ ส่วนผมอยากอ่านการเปลี่ยนแปลงเอง

crit คอมเมนต์และคำตอบของเอเจนต์ที่บรรทัด 52-65 crit คอมเมนต์และคำตอบของเอเจนต์ที่บรรทัด 52-65

ทำไม Xcode กับ git diff ยังไม่สะดวกพอ

ผมเขียนแอป iOS และช่วงหลังก็ไม่ค่อยเปิด Xcode ถ้าไม่จำเป็น การบิลด์และทดสอบผ่าน MCP ง่ายกว่า และไม่ต้องปวดหัวกับการบิลด์แพ็กเกจใหม่ตอนที่ Xcode เปิดอยู่ หน้าดูความต่างของไฟล์ใน Xcode จึงไม่ใช่ตัวเลือกสำหรับการรีวิว

ส่วน git diff ในเทอร์มินัลก็ดูการเปลี่ยนแปลงได้ดี แต่การจดคอมเมนต์หลายจุดแล้วส่งให้เอเจนต์ไปแก้ต่อค่อนข้างยุ่งยาก

สมมติ Codex เพิ่มการตรวจข้อมูลที่ CheckoutService ตรวจให้อยู่แล้ว ผมอยากเลือกบรรทัดนั้นแล้วเขียนว่า “ตรงนี้เซอร์วิสตรวจอยู่แล้ว ทำไมต้องตรวจซ้ำ?”

พอเปิด CheckoutView.swift ก็พบว่าเอเจนต์สร้างคอมโพเนนต์ใหม่ ทั้งที่ใน MyAppUI มีของที่ใช้ได้อยู่แล้ว ผมก็อยากคอมเมนต์ตรงนั้น แล้วดูไฟล์ต่อไป

บน GitHub ผมทำทั้งหมดนี้ในหน้า diff ได้เลย แต่ถ้าทำในเครื่องก็ต้องสลับระหว่าง IDE กับแชตของเอเจนต์ หรือแยกจดชื่อไฟล์กับเลขบรรทัดเอง

ผมเลยเริ่มหาตัวดู diff ในเบราว์เซอร์ที่คอมเมนต์ได้เหมือนตอนรีวิว Pull Request

เครื่องมือที่ลองและที่ไปเจอ

ตัวแรกที่สะดุดตาคือ difit เป็นเครื่องมือโอเพนซอร์สขนาดเล็กที่เปิด Git diff จากเครื่องเราในเบราว์เซอร์ มีรายการไฟล์ การไฮไลต์โค้ด และคอมเมนต์รายบรรทัด

ถ้าจะเทียบแบรนช์ปัจจุบันกับ dev ก็ใช้คำสั่งนี้

npx difit @ dev --merge-base

ฟีเจอร์ที่ผมชอบที่สุดคือ Copy All Prompt ผมไล่ดูไฟล์แล้วทิ้งคอมเมนต์ไว้ได้เรื่อย ๆ พอจบก็กดปุ่มเดียวเพื่อคัดลอกข้อความพร้อมชื่อไฟล์และเลขบรรทัด

difit คอมเมนต์ที่บรรทัด 52-65 และปุ่ม Copy All Prompt difit คอมเมนต์ที่บรรทัด 52-65 และปุ่ม Copy All Prompt

ผลลัพธ์จะหน้าตาประมาณนี้

CheckoutViewModel.swift:L84-L88
ทำไมต้องตรวจซ้ำตรงนี้?
CheckoutService จัดการกรณีนี้อยู่แล้ว

CheckoutView.swift:L42
ใช้คอมโพเนนต์ที่มีอยู่ใน MyAppUI แทน

จากนั้นวางข้อความใน Claude Code หรือ Codex แล้วให้ช่วยจัดการตามคอมเมนต์ ไม่ต้องอธิบายใหม่ทีละจุดว่าโค้ดอยู่ตรงไหน

ต่อมาผมเจอบทความของผู้พัฒนา difit เขาก็เจอปัญหาเดียวกัน คืออ่าน diff ยาว ๆ ในเทอร์มินัลไม่สะดวก และไม่อยากเปิด Pull Request เพียงเพื่อรีวิวโค้ดของตัวเอง วิธีของเขาคือให้เอเจนต์ทำงานเสร็จก่อน แล้วคนค่อยตรวจในเบราว์เซอร์ ทิ้งคอมเมนต์ และส่งกลับไปแก้

นี่ใกล้กับสิ่งที่ผมต้องการตั้งแต่แรก แต่ผมยังอยากให้คำตอบของเอเจนต์อยู่ใต้คอมเมนต์เดิมด้วย เวลาเปิดรีวิวรอบต่อไปจะได้รู้ว่าคุยอะไรกันไว้และทำไมถึงเลือกวิธีนั้น

ต่อมาผมลอง Plannotator ซึ่งเชื่อมกับ Claude Code และ Codex และส่งข้อเสนอแนะจากเบราว์เซอร์กลับไปหาเอเจนต์ได้โดยไม่ต้องคัดลอกเอง

Plannotator รีวิว diff เทียบกับ dev พร้อมปุ่ม Send Feedback Plannotator รีวิว diff เทียบกับ dev พร้อมปุ่ม Send Feedback

ไอเดียดี แต่ตอนที่ผมลองกับ Codex หลังส่งคอมเมนต์กลับมีการเปิดเซสชันใหม่ อาจเป็นเพราะวิธีที่ผมเรียกใช้ก็ได้ แต่พฤติกรรมแบบนี้ไม่เหมาะกับการทำงานของผม

ผมสลับเอเจนต์ค่อนข้างบ่อย เช่น ใช้ Codex จนถึงลิมิตแล้วค่อยไปต่อใน Claude Code บางครั้งก็แค่อยากลองอีกวิธีหนึ่ง ประวัติรีวิวจึงไม่ควรผูกกับเซสชันของเอเจนต์ตัวใดตัวหนึ่ง Codex อาจแก้คอมเมนต์บางส่วน แล้ว Claude Code มาทำต่อได้

อีกโปรเจกต์ที่ผมดูคือ diffx มีหน้าดู diff ในเบราว์เซอร์ คอมเมนต์ตามบรรทัด และ API บนเครื่องที่ให้เอเจนต์อ่านข้อเสนอแนะ และส่งคำตอบกลับมาได้ ปิดคอมเมนต์ได้ และในหน้าจอจะเห็นว่าอันไหนยังเปิดอยู่ อันไหนมีคำตอบแล้ว หรืออันไหนปิดไปแล้ว

diffx คำถามและคำตอบของเอเจนต์ พร้อมตัวนับ 1 open และ 1 replied diffx คำถามและคำตอบของเอเจนต์ พร้อมตัวนับ 1 open และ 1 replied

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

แต่ละเครื่องมือช่วยได้คนละส่วน ยังไม่มีตัวไหนตรงกับวิธีทำงานของผมทั้งหมด

ทำไมผมถึงไม่อยากทำแชตแบบเรียลไทม์

ตอนแรกผมนึกถึง GitLab แบบเต็ม ๆ ที่รันบนเครื่องตัวเอง พอคอมเมนต์ในเบราว์เซอร์ เอเจนต์ก็ได้รับทันทีและตอบใต้บรรทัดนั้น ผมถามต่อ มันตอบกลับ และหน้าจออัปเดตตลอดเวลา

พอเริ่มคิดถึงวิธีทำจริงก็รู้สึกว่าไม่คุ้ม การเปิดเซิร์ฟเวอร์บนเครื่องไม่ใช่ส่วนที่ยาก สิ่งที่ต้องจัดการเพิ่มคือการส่งข้อความเข้าเซสชัน Codex หรือ Claude Code ที่กำลังทำงาน รับคำตอบ และซิงก์สถานะของแต่ละการสนทนา

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

การโต้ตอบตลอดเวลาก็อาจเพิ่มจำนวนคำขอและการใช้โทเค็น โดยเฉพาะถ้าเอเจนต์ต้องอ่านโค้ดและโหลดบริบทใหม่ทุกครั้งที่มีคอมเมนต์ การส่งเป็นชุดไม่ได้ประหยัดกว่าเสมอไป แต่ช่วยตัดรอบการสนทนาที่ไม่จำเป็นได้

ที่สำคัญคือ ระหว่างรีวิวผมไม่ได้ต้องการคำตอบทันที ผมอยากอ่านโค้ดให้จบ จดข้อสังเกตทั้งหมด แล้วค่อยส่งให้เอเจนต์จัดการทีเดียว

สุดท้ายผมจึงเลือกแนวทางรีวิวเป็นรอบ ๆ

  1. เอเจนต์ทำงานเสร็จ ผมเปิด diff บนเครื่องแล้วทิ้งคอมเมนต์
  2. ส่งคอมเมนต์ทั้งหมดให้ Codex หรือ Claude Code ด้วยคำสั่งเดียว
  3. เอเจนต์ตอบคำถาม แก้โค้ด และบันทึกผลไว้ในรีวิว
  4. ผมรีเฟรช diff ตรวจการแก้ไข แล้วเริ่มรอบใหม่ถ้ายังมีประเด็น

ถ้ายังไม่เห็นด้วยกับคำตอบ ก็กลับไปคุยเรื่องเดิมในรอบถัดไปได้ ไม่จำเป็นต้องมีแชตที่เชื่อมต่ออยู่ตลอด

crit ที่กล่าวถึงข้างต้นก็ใช้วิธีใกล้เคียงกัน โดยเก็บคอมเมนต์ข้ามรอบ และให้คนกลับมาตรวจโค้ดหลังเอเจนต์แก้

สำหรับผม วิธีนี้คุ้มกว่าการสร้างแชต AI อีกตัวขึ้นมา

ฟอร์กเครื่องมือเป็นอีกทางเลือก

สุดท้ายความต้องการก็ไม่ซับซ้อน คือดู diff บนเครื่องในเบราว์เซอร์เทียบกับแบรนช์หลัก คอมเมนต์ตามบรรทัด ส่งให้เอเจนต์ได้ในขั้นตอนเดียว และเก็บประวัติระหว่างรอบรีวิวโดยไม่ผูกกับเซสชันของ Codex หรือ Claude Code ส่วนการปิดประเด็น ผมจะทำเองหลังตรวจการแก้ไข

ทำฟอร์กแล้วปรับแก้เองง่ายกว่าการเปิด Pull Request แล้วรอครึ่งปี อีกทั้งเจ้าของเครื่องมืออาจมีมุมมองที่ต่างจากเราเล็กน้อย ผมชอบปรับเครื่องมือให้เข้ากับตัวเอง และเมื่อมี Codex กับ Claude Code การแก้เล็ก ๆ ก็ใช้เวลาไม่มาก ทางเลือกหนึ่งจึงเป็นการใช้ diffx เป็นฐาน อีกอย่าง เครื่องมือเหล่านี้เป็นของคนอื่นทั้งหมด การมีฟอร์กของตัวเองทำให้ควบคุมได้ง่ายกว่าว่ามีอะไรเกิดขึ้นจริง ๆ บ้าง เวอร์ชันถูกล็อกไว้ รู้ว่ามีไลบรารีอะไรบ้าง และไม่มีอะไรเกินจำเป็น

สรุป

สุดท้ายผมเลือกรีวิวเป็นรอบ ๆ แทนการแชตกับเอเจนต์แบบเรียลไทม์ เปิด diff คอมเมนต์ ส่งให้แก้ ตรวจอีกครั้ง แล้วทำซ้ำถ้ายังไม่เรียบร้อย

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

จากเครื่องมือที่ดูมา diffx ใกล้ความต้องการที่สุด จึงต่อยอดจากตัวนี้ได้ เป้าหมายไม่ได้ใหญ่โต แค่อยากรีวิวโค้ดบนเครื่องได้สะดวก ก่อนเปิด Merge Request และไม่ต้องคอยคัดลอกคอมเมนต์ไปมาระหว่างเครื่องมือ


ลิงก์ที่เกี่ยวข้อง

  • difit ดู diff บนเครื่องในเบราว์เซอร์ พร้อมคอมเมนต์รายบรรทัด
  • Plannotator รีวิวแผนและโค้ดร่วมกับเอเจนต์ AI
  • diffx ดู diff บนเครื่อง พร้อม API สำหรับคอมเมนต์และคำตอบของเอเจนต์
  • บทความจากผู้สร้าง difit รีวิวโค้ดโดยไม่เปิด Pull Request
  • Nobody Reviews Their Agent’s Code ทำไมคนยังควรตรวจโค้ดของ AI และเครื่องมือ crit

บทความที่เกี่ยวข้อง