จากบทความเรื่อง Migrating 3.7 Million Lines of Flow Code to TypeScript
โดยทีมของ Pinterest ทำการเปลี่ยน code ของระบบ
จาก Flow มาเป็น TypeScript ภายใน 8 เดือน
ซึ่งช่วยให้ code ดีขึ้น
ทั้ง performance
ทั้งเรื่องของ type safty
และที่สำคัญคือ การหาคนหรือจ้างคนมาพัฒนาที่ง่ายขึ้น
มาดูกันว่า ทีมของ Pinterest มีแนวคิดและแนวทางในการย้ายอย่างไรบ้าง ?

ทีมจะใช้ Codemod Stripe ในการ migrate มาเป็น TypeScript
ซึ่งทีมได้เปิด PR เข้าไปเพิ่มด้วย

ทุกอย่างมันเริ่มจากปัญหาเสมอ ?

ในปี 2016 ทางทีมทำการเพิ่ม type เข้าไปยัง code ของระบบที่พัฒนาด้วย JavaScript
ซึ่งเลือก Flow มาใช้งาน ด้วยเหตุผลกังนี้

  • ง่ายต่อการพัฒนาแบบ incremental สามารถเพิ่ม type แบบ file-by-file ได้
  • ทำงานร่วมกับ ReactJS ได้ดี

แต่ในปี 2023 นั้น TypeScript นั้นเป็นที่นิยม และ เข้ามาเป็น standard ของ type checking
ซึ่ง trend การนำไปใช้งานสูงอย่างมาก ๆ
ส่วน Flow นั้นไม่มีการใช้งานเท่าไร !!
ดังนั้น ทีมจึงตัดสินใจนำ TypeScript มาใช้งาน

แต่ก็ได้ทำการทดลองหรือ PoC ก่อน
มีเครื่องมือในการ migrate จาก Flow เป็น TypeScript

ส่วนอื่น ๆ ที่เพิ่มความมั่นใจในการย้าย คือ

  • Community ที่ใหญ่ และ active
  • ความสามารถของภาษาที่ดี เช่น conditional type, non-null assertion เป็นต้น
  • หานักพัฒนาที่เก่ง ๆ ได้ง่ายขึ้น

ขั้นตอนการ migrate เป็นดังนี้

จากการศึกษาของทางทีมพบว่า
มีทั้ง Zapier, Airtable และ Stripe ที่ทำการ migrate ไปยัง TypeScript แล้ว
ซึ่งทำการ migrate แบบ bigbang หรือทั้งหมดด้วย Codemod
มีขั้นตอนดังนี้

  • ทำการ setup TypeScript และ Lint
  • ทำการ config VSCode เพื่อสนับสนุน TypeScript ให้ดีขึ้น
  • ทำการแปลง code จาก Flow ไปยัง TypeScript
  • รวมทั้งทำการ generate type ของ dependency ต่าง ๆ ด้วย
  • ในการใช้ codemod ยังมีข้อผิดหลาด หรือ ไม่ตรงกับความต้องการ ก็ทำการแก้ไขและส่ง patch ไปยัง codemod ด้วย
  • ทำการแก้ไข error ต่าง ๆ จาก ESLint
  • ทำการ integrate เข้ากับส่วนต่าง ๆ ของระบบ
  • และก่อนที่จะทำการ rollout ออกไป ต้องทำการ validation หรือการ test นั่นเอง
  • การทดสอบทำตามแนวทางของ Trophy testing

สุดท้ายทำการ rollout ซึ่งก็ต้องระมัดระวังด้วยเช่นกัน
โดยทำ rollout plan ขึ้นมา ว่าจะต้องทำอย่างไรบ้าง
และวางแผนด้วยว่า ถ้ามีปัญหาจะ rollback หรือ จัดการอย่างไรด้วย

เป็นอีกแนวทางที่น่าสนใจ
ลองอ่านรายละเอียดกันเพิ่มเติมดูครับ