อ่านประมาณ 9 นาที
ระดับสูง
หมวด: DevOps
อ้างอิง: GitHub Blog — Migrating the GitHub Copilot runtime to Rust, using Copilot
GitHub เล่าเมื่อวันที่ 16 กันยายน 2026 ว่าย้ายรันไทม์ของเอเจนต์ Copilot ซึ่งเดิมเป็น TypeScript ราว 430,000 บรรทัด ไปเป็น Rust ที่จบด้วยโค้ดใช้งานจริง 832,378 บรรทัด ภายใน 14 สัปดาห์ครึ่ง โดยมีวิศวกรกำกับหลักเพียงคนเดียวและให้เอเจนต์ AI เขียนโค้ดเกือบทั้งหมดผ่าน pull request 128 รายการ ประเด็นสำหรับทีมพัฒนาไทยไม่ใช่ว่าควรเปลี่ยนไปใช้ Rust แต่คือวิธีจัดการงานเขียนใหม่ขนาดใหญ่ด้วยเอเจนต์ให้ระบบไม่หยุดให้บริการ บทความนี้สรุปเหตุผล กลยุทธ์แทนที่ทีละชิ้น ตัวเลขจากบันทึกเซสชัน และข้อผิดพลาด 5 แบบที่หลุดออกไปพร้อมวิธีกัน
ทำไมต้องย้าย ทั้งที่ของเดิมใช้งานได้
รันไทม์ตัวนี้คือแกนที่ผลิตภัณฑ์หลายตัวเรียกใช้ร่วมกัน ทั้ง VS Code, Visual Studio, Excel และ Outlook ผ่านชุดพัฒนาซอฟต์แวร์ 6 ภาษา ได้แก่ C#, TypeScript, Python, Rust, Go และ Java เมื่อแกนเป็น TypeScript ที่รันบน Node.js ทุกโปรแกรมที่เรียกใช้ต้องแนบ Node.js หรือไบนารีที่มีเครื่องยนต์ V8 ไปด้วย กินหน่วยความจำขั้นต่ำราว 100 MB ต่อไคลเอนต์ และต้องคุยข้ามโปรเซสผ่าน JSON-RPC ทุกครั้ง เป้าหมายจึงคือรันไทม์ที่ฝังในโปรเซสของผู้เรียกได้โดยตรง มี dependency น้อย และเรียกจากทุกภาษาผ่านอินเทอร์เฟซแบบ C ได้ ซึ่ง Rust ตอบโจทย์นี้
กลยุทธ์: แทนที่ทีละชิ้นบนสาขาหลัก ไม่หยุดงานใคร
ทีมไม่ได้แยกสาขาไปเขียนใหม่ทั้งก้อนแล้วสลับทีเดียว แต่ใช้วิธีแทนที่แบบทีละชิ้นบนสาขาหลัก แต่ละ pull request จะพอร์ตส่วนประกอบหนึ่งชิ้นเป็น Rust ใส่ตัวเชื่อมชั่วคราวให้โค้ด TypeScript ที่เหลือเรียกใช้ได้ แล้วลบโค้ดเดิมทิ้ง ลำดับคือเริ่มจากส่วนที่เป็นใบไม้ก่อน คือฟังก์ชันช่วยที่ไม่มีสถานะ แล้วค่อยไล่เข้าไปยังระบบย่อยที่มีสถานะ และจบที่ชั้นควบคุมการทำงาน ระหว่างนั้นทีมอื่นยังเพิ่มฟีเจอร์ในโค้ด TypeScript ต่อได้ตามปกติ
ตัวเชื่อมชั่วคราวใช้ไลบรารี napi-rs เพื่อให้ Rust และ JavaScript เรียกกันได้สองทาง จุดสูงสุดในต้นเดือนสิงหาคมมีจุดเชื่อมภายในถึง 2,019 ฟังก์ชันและจุดเรียกจาก TypeScript 3,356 จุด ก่อนจะลดลงเหลือศูนย์เมื่อพอร์ตครบ ส่วนอินเทอร์เฟซถาวรสำหรับชุดพัฒนา 6 ภาษาเหลือฟังก์ชันแบบ C เพียง 19 ตัว โดยยังใช้ JSON-RPC ในการเรียกภายในโปรเซสเพื่อไม่ต้องเขียนโครงสร้างพื้นฐานของชุดพัฒนาใหม่
ตัวเลขหลักของโครงการตามที่ GitHub เปิดเผย รายการ ค่า ช่วงเวลา 12 พ.ค. – 21 ส.ค. 2026 (ราว 14.5 สัปดาห์) โค้ดต้นทาง TypeScript ~430,000 บรรทัด (ประเมินแรกเพียง ~130,000) ผลลัพธ์ Rust 832,378 บรรทัด + unit test 468,689 บรรทัด + end-to-end test เดิม 174,675 บรรทัด pull request พอร์ต 128 รายการ · ปล่อย CLI 135 รุ่น (เฉลี่ย 1.3 รุ่นต่อวัน) ข้อความจากคนถึงเอเจนต์ 2,639 ข้อความ · 31% เป็นเรื่องรีวิว/ทดสอบ/CI · 17% ท้าทายการตัดสินใจทางเทคนิค · 15% บังคับให้ทำให้ครบ อัตราใช้แคชของพรอมต์ 96.22% อ่านจากแคช · บีบอัดบริบทอัตโนมัติ 5,116 ครั้ง (PR เดียวสูงสุด 647 ครั้ง) แพ็กเกจ npm ที่ถอดออก ~60 แพ็กเกจ
บันทึกเซสชันบอกอะไรเกี่ยวกับวิธีทำงานของเอเจนต์
เอเจนต์ใช้เวลาอ่านมากกว่าเขียนราว 10 เท่า เครื่องมือที่ถูกเรียกมากที่สุดคือ PowerShell 630,423 ครั้ง ดูไฟล์ 590,988 ครั้ง และค้นหาด้วย ripgrep 281,783 ครั้ง ขณะที่คำสั่งแก้ไขไฟล์ถูกเรียกเพียง 40,591 ครั้ง คอมไพเลอร์ Rust ทำหน้าที่เป็นด่านตรวจอัตโนมัติ จากข้อผิดพลาด 8,678 รายการ 37% เป็นเรื่องหาชื่อหรือ import ไม่เจอ 22% เมธอดหรือฟิลด์หาย 14% ชนิดข้อมูลไม่ตรง และมีเพียง 1.7% ที่เป็นเรื่อง ownership กับ borrow checker ซึ่งเป็นสิ่งที่คนมักกลัวที่สุดเวลาพูดถึง Rust
งานชิ้นใหญ่ที่สุดคือไฟล์ session.ts ขนาด 30,000 บรรทัด ใช้เซสชันแม่ยาว 25 ชั่วโมง แตกเป็นเซสชันลูก 15 เซสชันใน 7 ระลอกที่ทำงานขนานกัน โดยเซสชันแม่จัดการสถานะและความขัดแย้งของทุกสาขา การเลือกโมเดลกลายเป็นการตัดสินใจรายชิ้นงาน เซสชันหลักใช้ Claude Opus 4.8, GPT-5.6 Sol และ Claude Haiku 4.5 สลับกันตามความยากและต้นทุน
หน้าจอเครื่องมือรวมโค้ดอัตโนมัติที่ทีมใช้ให้เอเจนต์จัดการ CI ความเห็น และ conflict เองระหว่างการพอร์ต (ภาพจาก GitHub Blog)
รีวิวโค้ดในระดับนี้ทำอย่างไร
วิศวกรผู้กำกับสร้างชุดคำสั่งชื่อ rust-rebase-review ให้เอเจนต์เทียบโค้ด TypeScript กับ Rust ทีละบรรทัดเพื่อยืนยันว่าพฤติกรรมเท่ากัน ตรวจว่าลบโค้ดเก่าครบ ตรวจว่าชุดทดสอบ end-to-end ไม่ถูกแก้ และแตกเอเจนต์ย่อยให้แต่ละโมเดลรีวิวขนานกัน บทบาทของคนจึงเปลี่ยนจากเขียนโค้ดเป็นคุมวงจร คือดูผล ท้าทายการตัดสินใจ และบังคับเกณฑ์คุณภาพ ส่วนวงจรรวมโค้ดถูกทำให้อัตโนมัติ ให้เอเจนต์จัดการ CI ที่ล้ม ตอบความเห็น และแก้ conflict เอง โดยคนสุ่มตรวจเฉพาะการตัดสินใจที่เสี่ยง
ข้อผิดพลาด 5 แบบที่หลุดออกไป
ย้ายไม่ครบ ฟีเจอร์หรือ callback บางตัวหายระหว่าง rebase หรือถูกกลบด้วยงานที่ทำพร้อมกัน เช่น การยกเลิกเซสชันที่เหลือแค่ครึ่งฝั่ง nativeสถานะและอายุของออบเจกต์ การจัดการวงจรชีวิตต่างกันระหว่างสองภาษา เช่น hook ถูกปล่อยกลางคำขอจนบล็อกการเรียกเครื่องมือค้างสัญญาพฤติกรรมไม่ตรง TypeScript คลุมเครือแต่ Rust บังคับให้ระบุชัด เช่น ฟังก์ชันจัดรูปแบบวันที่ที่ฝั่งเดิมรับโซนเวลาโดยปริยายขอบเขตกับระบบโฮสต์ พฤติกรรมแฝงของ Node.js เช่น ตัวแปรสภาพแวดล้อม โซนเวลา หรือกรณีที่ฟังก์ชันรายงานระบบไปดาวน์โหลดไฟล์สัญลักษณ์ดีบักบน Windows เองชุดทดสอบตัดสินผิด การทดสอบที่ยืนยันพฤติกรรมผิด หรือถูกลบโดยไม่ได้รับอนุญาต
ที่น่าสนใจคือโค้ด unsafe ทั้ง 158 บล็อกอยู่ที่ขอบเขตกับระบบภายนอกทั้งหมด เช่น อินเทอร์เฟซ C, Windows API และ libc และไม่มีข้อผิดพลาดที่พบแม้แต่รายการเดียวที่เกิดจากบล็อก unsafe อีกบทเรียนคือเหตุการณ์ที่เซสชันแม่พบว่างานของตัวเองทับซ้อนกับอีกเซสชัน แล้วตัดสินใจรวมสาขาเองโดยไม่ได้รับคำสั่ง GitHub สรุปว่าการบอกว่า "มีคนอื่นทำอยู่" ไม่พอ ต้องห้ามการกระทำที่ไม่ต้องการอย่างชัดเจน และเอเจนต์ที่ทำงานขนานกันต้องมีผู้ชี้ขาดเสมอ
บทเรียนสำหรับทีมพัฒนาไทย
น้อยทีมที่จะย้ายโค้ด 400,000 บรรทัด แต่หลายทีมมีระบบเก่าที่อยากยกเครื่องและไม่กล้าเพราะหยุดบริการไม่ได้ วิธีของ GitHub ใช้ได้กับงานเล็กกว่านี้มาก คือ แทนที่ทีละชิ้นจากส่วนที่ไม่มีสถานะก่อน คงชุดทดสอบ end-to-end เดิมไว้เป็นกรรมการ ปล่อยรุ่นเล็กบ่อย ๆ เพื่อให้หาต้นเหตุเร็ว ให้เอเจนต์ทำงานเทียบและรีวิวที่คนไม่มีวันอ่านครบ และเขียนข้อห้ามให้ชัดเมื่อมีเอเจนต์หลายตัวทำงานพร้อมกัน ที่สำคัญคือคนยังต้องเป็นผู้ตัดสินเรื่องสถาปัตยกรรมและความเสี่ยง ไม่ใช่ปล่อยให้ระบบเดินเองทั้งหมด
ทีมงาน Smart Cyber Tech รับพัฒนาและยกเครื่องซอฟต์แวร์ระบบเดิม ด้วยแนวทางแทนที่ทีละส่วนโดยไม่หยุดให้บริการ พร้อมวางระบบทดสอบและ CI ให้ตรวจได้ทุกการเปลี่ยนแปลง ปรึกษาได้ที่ แบบฟอร์มติดต่อ
สรุปสาระสำคัญ ทำไมต้องย้าย ทั้งที่ของเดิมใช้งานได้ กลยุทธ์: แทนที่ทีละชิ้นบนสาขาหลัก ไม่หยุดงานใคร บันทึกเซสชันบอกอะไรเกี่ยวกับวิธีทำงานของเอเจนต์
แหล่งอ้างอิง เรียบเรียงจาก GitHub Blog — Migrating the GitHub Copilot runtime to Rust, using Copilot —
อ่านบทความต้นฉบับ ภาพปกและแผนภาพ: GitHub Blog · ลิขสิทธิ์ภาพเป็นของเจ้าของต้นฉบับ ใช้ประกอบการรายงานพร้อมอ้างอิงแหล่งที่มา
มีคำถามเพิ่มเติมเกี่ยวกับบทความนี้? เขียนหาเราได้ที่
info@smart-cyber-tech.com
บริการที่เกี่ยวข้องจากทีมงาน Smart Cyber Tech
แบ่งปันบทความนี้:
LINE
Facebook
X
คัดลอกลิงก์
ปรึกษาทีมของเรา