Ruby on Rails 7.0 ออกแล้ว ปรับโครงสร้างครั้งใหญ่ ไม่ต้องพึ่งพา Node.js อีกต่อไป

by mk
18 December 2021 - 23:42

Ruby on Rails ออกเวอร์ชันใหญ่ 7.0 ซึ่งมีการเปลี่ยนแปลงสำคัญ 2 เรื่องคือ ไม่ต้องผูกกับโลกของ Node.js อีกแล้ว และเปลี่ยนระบบ front-end มาเป็นตัวใหม่คือ Hotwire

David Heinemeier Hansson หรือ DHH ผู้สร้าง Rails อธิบายว่าโครงสร้างของภาษา JavaScript ในอดีตเป็นปัญหาของโปรแกรมเมอร์มาก ทางออกจึงเป็นการเขียนภาษาอื่นแล้วแปลงเป็น JavaScript (เรียกว่า transpiling เช่น CoffeeScript หรือ Babel) ที่ช่วยให้เขียนโค้ดง่ายขึ้น แต่ก็ต้องแลกมาด้วยความซับซ้อนที่เพิ่มขึ้น

แนวทางของ Rails ช่วงก่อนหน้านี้คือใช้ Webpack (ผ่าน Webpacker) เป็นตัวช่วย bundler โมดูล JavaScript ต่างๆ เข้าด้วยกัน โดยเริ่มจาก Rails 5.2 ในปี 2017 ข้อเสียของแนวทางนี้คือ Webpack โยงอยู่กับ Node.js จึงทำให้ Rails ต้องเรียกใช้ Node.js ตามไปด้วย

แต่เมื่อเวลาผ่านมา 5 ปี สถานการณ์เปลี่ยนไปมาก เพราะเว็บเบราว์เซอร์ทุกตัวรองรับภาษา ECMAScript 6 (ES6) ที่เปลี่ยนโครงสร้างของ JavaScript ไปมากแล้ว (เหลือแต่ IE11 และไมโครซอฟท์ก็ฆ่าทิ้งเรียบร้อยแล้ว) ทำให้เราสามารถเขียนโค้ด ES6 ตรงๆ ได้เลย

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

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

เทคโนโลยีทั้งสามตัวทำให้ Rails ไม่จำเป็นต้องพึ่งพาเครื่องมือสาย JavaScript ที่ซับซ้อนอีกต่อไป สามารถเขียน JavaScript (ES6) ตรงๆ แล้วสื่อสารกับเบราว์เซอร์ได้เลย การเปลี่ยนแปลงสำคัญของ Rails 7.0 จึงเป็นการถอด Webpacker ออก (ทำให้ไม่จำเป็นต้องพึ่งพา Node.js) โดยยังสามารถใช้ bundler ได้ถ้าต้องการ และเลือกใช้ตัวใดก็ได้ไม่ว่าจะเป็น esbuild, rollup.js หรือแม้แต่ Webpack เหมือนเดิม เช่นเดียวกับ CSS bundler ที่เลือกใช้ตัวใดก็ได้ เช่น Tailwind, Bootstrap, Sass, PostCSS โดยไม่ต้องผูกกับ Node.js

ส่วนฝั่ง front-end เปลี่ยนมาใช้ Hotwire ซึ่งพัฒนาโดยบริษัท Basecamp เช่นกัน แนวคิดของ Hotwire คือส่งข้อมูลไปยังเบราว์เซอร์เป็น HTML แทน JSON (HTML-over-the-wire) เพื่อให้การเรนเดอร์เทมเพลตอยู่ที่ฝั่งเซิร์ฟเวอร์ เพจโหลดเร็วขึ้น และลดความซับซ้อนลง ถูกนำมาใช้แทนระบบ front-end เดิมของ Rails ที่เป็น Turbolinks และ Rails UJS

การเปลี่ยนแปลงทั้งสองส่วนทำให้ Rails 7 เรียบง่ายขึ้นกว่าเดิมมากๆ ซึ่ง DHH เชื่อว่านี่คือสิ่งที่การพัฒนาเว็บควรจะมุ่งไป และตอนนี้บริษัท Basecamp ของเขาก็พัฒนาเว็บเมล Hey ด้วยเฟรมเวิร์คตัวใหม่นี้อยู่

ที่มา - Ruby on Rails 7.0, David Heinemeier Hansson

Blognone Jobs Premium