6. Architecture & Refactoring
หน้าหลัก › โมดูล 6: Architecture & Refactoring
บทเรียน 6.3

Migration: JS→TS, Class→Hooks

งาน migration เช่น JavaScript→TypeScript หรือ class component→hooks เป็นงานน่าเบื่อที่ Claude ทำแทนได้ดีและเร็ว

เมื่อเรียนจบบทนี้ คุณจะ…

  • อธิบายงาน migration ได้
  • ใช้ Claude ช่วยเปลี่ยนโค้ดได้
  • วางแผนการเปลี่ยนโค้ดเป็นส่วนๆ ได้
ย้ายโค้ด เช่น JS→TS หรือ Class→Hooks อย่างเป็นระบบ
ย้ายโค้ด เช่น JS→TS หรือ Class→Hooks อย่างเป็นระบบ

การย้ายโค้ด (Code Migration) คืออะไร? ทำไมต้องทำ?

ลองนึกภาพว่าคุณกำลังจะย้ายบ้านจากบ้านเก่าที่คุ้นเคยไปบ้านใหม่ที่ดีกว่า ทันสมัยกว่า หรือเหมาะกับชีวิตปัจจุบันของคุณมากกว่า การย้ายโค้ดก็คล้ายกันครับ มันคือการปรับปรุงโค้ดโปรแกรมที่เราเขียนไว้แล้ว ให้เปลี่ยนไปใช้เทคโนโลยีใหม่ๆ รูปแบบการเขียนใหม่ๆ หรือไลบรารี (เครื่องมือเสริม) ที่ดีกว่าเดิม

ทำไมเราต้องย้ายโค้ด? ก็เพื่อทำให้โปรแกรมของเราทำงานได้ดีขึ้น ปลอดภัยขึ้น บำรุงรักษาง่ายขึ้น และตามทันโลกเทคโนโลยีที่เปลี่ยนแปลงเร็วครับ บางทีโค้ดเก่าอาจจะทำงานช้า มีช่องโหว่ หรือไม่รองรับฟีเจอร์ใหม่ๆ การย้ายโค้ดจึงจำเป็น เหมือนการอัปเกรดมือถือให้ใช้แอปใหม่ๆ ได้นั่นแหละครับ แต่การย้ายโค้ดอาจเป็นงานที่น่าเบื่อและใช้เวลานาน ซึ่งนี่แหละคือจุดที่ Claude เข้ามาช่วยเราได้ดีมากๆ เลย

การย้ายโค้ดช่วยให้โปรแกรมของเราทันสมัยและมีประสิทธิภาพมากขึ้น

ตัวอย่างการย้ายโค้ดยอดนิยมที่ Claude ช่วยได้

มีหลายสถานการณ์เลยครับที่ Claude สามารถเป็นผู้ช่วยชั้นดีในการย้ายโค้ดให้เรา ตัวอย่างที่พบบ่อยๆ เช่น:

1. **จาก JavaScript (JS) ไป TypeScript (TS):** JavaScript เป็นภาษาที่ยืดหยุ่นมาก แต่บางครั้งก็ทำให้เกิดข้อผิดพลาดได้ง่าย TypeScript เข้ามาช่วยเพิ่ม 'ประเภท' (Type) ให้กับข้อมูล ทำให้โค้ดของเรามีระเบียบมากขึ้น ตรวจจับข้อผิดพลาดได้ตั้งแต่ตอนเขียน และทำงานร่วมกับคนอื่นได้ง่ายขึ้น Claude สามารถช่วยเพิ่ม Type ให้กับโค้ด JS ของเราทีละไฟล์ได้เลย

2. **จาก React Class Component ไป React Function Component + Hooks:** สำหรับคนที่เขียน React (ไลบรารีสร้างหน้าเว็บ) เดิมเรานิยมเขียนแบบ Class Component แต่ตอนนี้ Function Component และ Hooks เป็นที่นิยมมากกว่าเพราะเขียนง่ายกว่า อ่านง่ายกว่า และจัดการสถานะ (State) ของโปรแกรมได้ดีกว่า Claude สามารถแปลงโค้ดจากรูปแบบเก่าไปเป็นรูปแบบใหม่นี้ให้เราได้

3. **จากไลบรารีเก่าไปไลบรารีใหม่:** บางครั้งเราใช้เครื่องมือเสริม (ไลบรารี) ในโปรแกรมมานานแล้ว แต่มีไลบรารีใหม่ที่ดีกว่า เร็วกว่า หรือมีคนดูแลมากกว่า เช่น จาก moment.js ไปเป็น date-fns สำหรับจัดการวันที่และเวลา Claude สามารถช่วยแปลงการใช้งานจากไลบรารีเก่าไปเป็นไลบรารีใหม่ได้ครับ

Claude เก่งเรื่องการแปลงโค้ดจากรูปแบบหนึ่งไปอีกรูปแบบหนึ่ง

กลยุทธ์ 'ค่อย ๆ ทำทีละส่วน' (Phased Migration)

การย้ายโค้ดทั้งโปรแกรมพร้อมกันทีเดียวก็เหมือนกับการรื้อบ้านทั้งหลังพร้อมกัน ซึ่งเสี่ยงมากครับ! ถ้ามีอะไรผิดพลาดจะหาจุดแก้ไขได้ยากและอาจทำให้โปรแกรมพังได้เลย เราจึงควรใช้กลยุทธ์ที่เรียกว่า 'ค่อย ๆ ทำทีละส่วน' หรือ 'Phased Migration'

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

แบ่งงานย้ายโค้ดเป็นส่วนเล็กๆ ทดสอบทีละส่วน เพื่อลดความเสี่ยง

ให้ Claude ช่วยย้ายโค้ด: เริ่มต้นด้วยตัวอย่าง 1 ไฟล์

ก่อนจะให้ Claude ช่วยย้ายโค้ดทั้งหมด เราไม่ควรโยนโค้ดทั้งหมดให้เขาทำทันทีครับ เหมือนเวลาเราจะให้เพื่อนช่วยทำงาน เราก็ต้องอธิบายให้เพื่อนเข้าใจก่อน และอาจจะให้เพื่อนลองทำตัวอย่างเล็กๆ ก่อน เพื่อดูว่าเพื่อนเข้าใจสิ่งที่เราต้องการไหม

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

ให้ Claude ทำตัวอย่าง 1 ไฟล์ก่อนเสมอ เพื่อตรวจสอบแนวทางและคุณภาพ

วิธีการใช้ Prompt กับ Claude อย่างละเอียด

นี่คือ Prompt (คำสั่ง) ที่เราจะใช้กับ Claude เพื่อให้เขาช่วยย้ายโค้ดให้เราครับ:

ช่วย migrate ไฟล์นี้จาก [เดิม] เป็น [ใหม่] รักษา behavior เดิมไว้ทั้งหมด ทำให้ดูเป็นตัวอย่างก่อน 1 ไฟล์ แล้วฉันจะให้ทำต่อ

เรามาดูกันว่าแต่ละส่วนหมายถึงอะไรและเราจะใช้มันยังไง:

1. **[เดิม]:** ให้คุณใส่ลักษณะของโค้ดปัจจุบันที่คุณมีอยู่ เช่น JavaScript, React Class Component, REST API Call หรือ การเรียกใช้ moment.js

2. **[ใหม่]:** ให้คุณใส่ลักษณะของโค้ดที่คุณต้องการให้เป็น เช่น TypeScript, React Function Component + Hooks, GraphQL API Call หรือ การเรียกใช้ date-fns

3. **รักษา behavior เดิมไว้ทั้งหมด:** นี่สำคัญมากครับ! หมายความว่าไม่ว่า Claude จะแปลงโค้ดไปเป็นแบบไหน แต่โปรแกรมของเราจะต้องยังทำงานได้เหมือนเดิมทุกประการ ห้ามมีฟังก์ชันไหนเปลี่ยนไปหรือพังเด็ดขาด

4. **ทำให้ดูเป็นตัวอย่างก่อน 1 ไฟล์ แล้วฉันจะให้ทำต่อ:** นี่คือการบอก Claude ว่าให้ทำแค่ไฟล์เดียวเป็นตัวอย่างก่อนนะ ถ้าฉันโอเคแล้ว ฉันจะให้ทำที่เหลือเอง

  1. 1. เตรียมไฟล์โค้ดที่คุณต้องการให้ Claude ช่วยย้าย (เช่น ไฟล์ MyComponent.js).
  2. 2. เปิดหน้าต่างแชทกับ Claude.
  3. 3. คัดลอก Prompt ที่สมบูรณ์แล้วไปวาง เช่น: ช่วย migrate ไฟล์นี้จาก React Class Component เป็น React Function Component + Hooks รักษา behavior เดิมไว้ทั้งหมด ทำให้ดูเป็นตัวอย่างก่อน 1 ไฟล์ แล้วฉันจะให้ทำต่อ.
  4. 4. วางเนื้อหาโค้ดของไฟล์ที่คุณต้องการให้ Claude ย้ายลงไปในแชท (หลังจาก Prompt).
  5. 5. ตรวจสอบผลลัพธ์ที่ Claude ให้มาอย่างละเอียด ลองนำโค้ดที่ Claude สร้างให้ไปรันและทดสอบดูว่าทำงานได้ถูกต้องตามที่ต้องการไหม.
  6. 6. ถ้าพอใจกับผลลัพธ์ ก็สามารถบอก Claude ให้ทำไฟล์อื่นๆ ต่อไปได้ โดยอาจจะให้โค้ดทีละไฟล์ หรือถ้ามั่นใจมากพอ อาจจะให้โค้ดหลายไฟล์พร้อมกัน (แต่แนะนำทีละไฟล์จะปลอดภัยกว่า).
ยิ่งคุณอธิบายบริบทและสิ่งที่ต้องการให้ Claude ชัดเจนเท่าไหร่ ผลลัพธ์ก็จะยิ่งดีเท่านั้น

สรุปและเคล็ดลับเพิ่มเติม

การย้ายโค้ดเป็นงานที่อาจจะน่าเบื่อและซับซ้อน แต่ด้วย Claude เราสามารถทำให้มันง่ายและเร็วขึ้นได้ครับ กุญแจสำคัญคือการทำทีละส่วนเล็กๆ (Phased Migration) การทดสอบโค้ดอย่างสม่ำเสมอหลังการเปลี่ยนแปลงแต่ละครั้ง และการใช้ Claude อย่างชาญฉลาดโดยให้เขาทำตัวอย่างแค่ 1 ไฟล์ก่อน เพื่อให้เราได้ตรวจสอบและปรับแก้แนวทางก่อนที่จะเดินหน้าทำทั้งหมดครับ จำไว้ว่า Claude เป็นผู้ช่วยที่ยอดเยี่ยม แต่เราเองก็ต้องเป็นผู้กำกับที่เก่งด้วยนะครับ!

ทดสอบโค้ดเสมอหลังการย้าย เพื่อให้แน่ใจว่าโปรแกรมยังทำงานได้ถูกต้อง
ลองใช้ Prompt นี้กับ Claude
ช่วย migrate ไฟล์นี้จาก [เดิม] เป็น [ใหม่] รักษา behavior เดิมไว้ทั้งหมด ทำให้ดูเป็นตัวอย่างก่อน 1 ไฟล์ แล้วฉันจะให้ทำต่อ
เคล็ดลับ: ให้ Claude ทำ 1 ไฟล์เป็นตัวอย่างก่อน ดูว่าแนวทางถูกใจ แล้วค่อยบอกให้ทำที่เหลือ
สรุปบทนี้
  • เหมาะกับ migration น่าเบื่อ
  • ทำเป็นเฟส ทดสอบระหว่างทาง
  • ทำตัวอย่าง 1 ไฟล์ก่อน
แบบทดสอบท้ายบท
ลองตอบดู แล้วระบบจะเฉลยให้ทันที
ข้อ 1.Claude เก่งเรื่องอะไรในการช่วยเปลี่ยนโค้ด (migration)?
เฉลย: Claude ช่วยงานที่ซ้ำๆ เช่น การเปลี่ยนรูปแบบโค้ดได้ดีและเร็ว.
ข้อ 2.ถ้าจะเปลี่ยนโค้ด (migration) ควรทำแบบไหนดีที่สุด?
เฉลย: การเปลี่ยนทีละส่วนและทดสอบไปเรื่อยๆ จะช่วยให้งานไม่ผิดพลาดและทำได้ง่ายขึ้น.