- ระหว่างสร้าง แอปจัดการ setlist ของวง (setlist.rocks) ได้ค้นพบความสนุกของการพัฒนา Ruby on Rails อีกครั้งหลังจากห่างหายไปนาน
- Rails 8 รุ่นล่าสุดยังคงโครงสร้าง MVC แบบดั้งเดิมไว้ แต่ก็ได้รับการปรับให้ทันสมัยด้วยฟรอนต์เอนด์แบบ “no-build” ที่อิงกับ Hotwire (Stimulus·Turbo) รวมถึง Solid Cache/Queue/Cable
- SQLite ถูกปรับแต่งจนเหมาะกับการใช้งานจริงได้เพียงแค่ตั้งค่าพื้นฐาน และเครื่องมือดีพลอย Kamal ก็ทำให้การ ดีพลอยแบบไม่มี Downtime บนคอนเทนเนอร์ง่ายขึ้น
- ด้วยปรัชญา “Convention over Configuration” ของ Rails และ ecosystem ของ gem ที่อุดมสมบูรณ์ ทำให้สามารถพัฒนาได้อย่างรวดเร็วตั้งแต่ไอเดียไปจนถึงต้นแบบ
- แม้ความนิยมของ Ruby และ Rails จะลดลงจากเมื่อก่อน แต่ก็ยังคงมอบความสนุกในการพัฒนาในฐานะ เฟรมเวิร์ก OSS ที่เติบโตเต็มที่และมีความสม่ำเสมอ
โปรเจกต์ข้างเคียงและการหวนกลับสู่ Rails
- เพื่อจัดการ setlist และโน้ตเพลงของวง ผู้เขียนจึง พัฒนาเว็บแอปขึ้นมาเอง โดยมองหาวิธีที่มีประสิทธิภาพกว่าสเปรดชีตหรือแชตแบบเดิม
- ระหว่างพัฒนาได้สัมผัสอีกครั้งถึง ความเรียบง่ายและประสิทธิภาพในการทำงานของ Rails และกล่าวว่ามันให้ “ความสนุกของการพัฒนาแบบบริสุทธิ์” เมื่อเทียบกับ ecosystem เว็บยุคปัจจุบันที่ซับซ้อน
- Ruby ยังถูกมองว่าเป็นภาษาที่มี ไวยากรณ์เป็นธรรมชาติและสื่อความหมายได้ดี ทำให้นำความคิดมาแปลงเป็นโค้ดได้ง่าย
- จากผลสำรวจของ Stack Overflow ปี 2025 แม้ความนิยมของ Ruby และ Rails จะลดลง แต่ก็ยังเป็นตัวเลือกที่ชื่นชอบสำหรับโปรเจกต์ส่วนตัว
การเปลี่ยนแปลงของ Rails 8 และฟรอนต์เอนด์
- Rails 8 ยังคงโครงสร้าง MVC เดิมไว้ พร้อมทั้งมีการผสานฟรอนต์เอนด์ที่อิงกับ Hotwire (Stimulus·Turbo)
- Turbo ดักจับการคลิกลิงก์และการส่งฟอร์ม เพื่อมอบ ความตอบสนองระดับ SPA
- Stimulus เพิ่มพฤติกรรม JS เฉพาะส่วนที่จำเป็น ทำให้สร้าง UI แบบโต้ตอบได้ด้วย การเขียน JavaScript ให้น้อยที่สุด
- การนำ Importmap มาใช้ทำให้สามารถโหลดไลบรารี JS จาก CDN ได้โดยตรงโดยไม่ต้องใช้ Webpack หรือ npm
- แม้จะใช้เครื่องมือ AI เพื่อสร้าง UI แต่ผู้เขียนก็เผยให้เห็นความกังวลระหว่าง การสร้างสรรค์ กับ ความเป็นศิลปะของโค้ด
เวิร์กโฟลว์การพัฒนาและประสิทธิภาพ
- ด้วยปรัชญา “Convention over Configuration” ของ Rails ทำให้สามารถจัดวาง model, routing, controller และ view ได้อย่างรวดเร็ว
- ยกตัวอย่างการสร้างโมเดล
Tag, การทำ RESTful routing แบบอัตโนมัติ และกระบวนการจัดการการตอบกลับแบบ JSON
- เทมเพลต ERB และ live reload ช่วยให้ทำต้นแบบได้อย่างรวดเร็ว
- ด้วย ecosystem ของ gem ที่หลากหลาย จึงสามารถผสานฟีเจอร์ต่าง ๆ เช่น CSV, PDF ได้อย่างง่ายดาย
การปรับปรุงฝั่งแบ็กเอนด์: ชุด Solid* และ SQLite
- Solid Cache/Queue/Cable ถูกรวมมาเป็นค่าเริ่มต้นใน Rails 8 ทำให้สามารถจัดการแคช, job queue และ WebSocket ได้โดยไม่ต้องใช้ Redis
- Solid Cache เป็นการแคชบนฐานข้อมูล ช่วยประหยัด RAM และลดความซับซ้อน
- Solid Queue จัดการงานเบื้องหลังบนฐานข้อมูล และสามารถรันได้เพียงตั้งค่า
SOLID_QUEUE_IN_PUMA=1
- Solid Cable เป็น Action Cable adapter บนฐานข้อมูลสำหรับรองรับฟีเจอร์แบบเรียลไทม์
- SQLite ใช้การปรับแต่งอย่าง โหมด WAL, การซิงก์แบบ NORMAL ผ่านการตั้งค่า
pragmas: ใน database.yml เป็นค่าเริ่มต้น
- จึงสามารถ ใช้งานได้จริงในโปรดักชันขนาดเล็ก โดยไม่ต้องมี DB server แยกต่างหาก
การทำดีพลอยอัตโนมัติและ Kamal
- ผู้เขียนกล่าวถึงความซับซ้อนของการดีพลอยในอดีตที่อิงกับ Capistrano·Ansible และแนะนำ Kamal ในฐานะเครื่องมือดีพลอยเริ่มต้นของ Rails 8
- ทำกระบวนการตั้งแต่ build container → push → ดีพลอยขึ้นเซิร์ฟเวอร์ → health check → สลับใช้งานแบบไม่มี Downtime ได้โดยอัตโนมัติ
- kamal-proxy รับหน้าที่สลับทราฟฟิกและจัดการ SSL
- รองรับการจัดการ secret อย่างปลอดภัย ผ่านไฟล์
.kamal/secrets ที่อิงกับตัวแปรสภาพแวดล้อม
- เมื่อต่อกับ GitLab CI ก็สามารถดีพลอยได้ด้วยแค่
git push ซึ่งให้ความเรียบง่ายแบบเดียวกับ Heroku ในอดีต
การยืนยันตัวตนและฟีเจอร์อื่น ๆ
- Rails 8 มี ตัวสร้างระบบยืนยันตัวตนในตัว (auth generator) ทำให้สร้างระบบล็อกอินที่เรียบง่ายกว่า Devise ได้
- แม้ Devise จะยังมีประโยชน์จากฟีเจอร์และเอกสารที่ครบถ้วน แต่ ความเรียบง่ายของระบบยืนยันตัวตนพื้นฐานของ Rails ก็ถูกมองว่าน่าสนใจ
สถานะปัจจุบันและความต่อเนื่องของ ecosystem Rails
- แม้ความนิยมของ Ruby และ Rails จะลดลง แต่บริการใหญ่ ๆ อย่าง Shopify·Basecamp·SoundCloud·GitHub ก็ยังใช้งานอยู่
- gem จำนวนมากอยู่ในช่วงบำรุงรักษา แต่ Rails ยังคงรักษา รอบการออกรุ่นอย่างสม่ำเสมอทุกปี
- ผู้เขียนประเมินว่าเป็น “เฟรมเวิร์กที่นักพัฒนาหน้าใหม่อาจหลั่งไหลเข้าน้อยลง แต่ก็ยังพัฒนาได้อย่างสนุก”
บทสรุป
- แม้ Rails จะห่างจากเทรนด์ล่าสุด แต่ก็ถูกเน้นย้ำว่าเป็นเครื่องมือที่ช่วยนำ ความสนุกและความเรียบง่ายของการพัฒนา กลับคืนมา
- มากกว่าความนิยม ผู้เขียนให้ความสำคัญกับ ความสนุกในการสร้างและความคิดสร้างสรรค์ และปิดท้ายด้วยข้อความว่า “ลองกลับไปใช้ Rails อีกครั้งสักครั้ง”
4 ความคิดเห็น
ถ้าเป็น Rails ผมจำได้ว่าน่าจะเป็น "ธรรมเนียมมาก่อนการตั้งค่า" ไม่ใช่ "การตั้งค่ามาก่อนธรรมเนียม"...
> ดูเหมือนว่า LLM จะส่งออกตามลำดับอินพุตเดิมโดยไม่เปลี่ยนลำดับคำ ในต้นฉบับเขียนไว้ถูกต้องแล้ว
LLM ก็พลาดเรื่องแบบนี้เหมือนกันนะครับ ผมแก้ไขไว้แล้ว ขอบคุณครับ
ความคิดเห็นจาก Hacker News
ฉันชอบ Rails มากจริงๆ แต่หลังจากได้ทำงานกับ โค้ดเบสขนาดใหญ่ที่ไม่มี static type แล้ว ก็รู้สึกว่ายากจะกลับไปใช้ Rails นอกเหนือจากโปรเจกต์ส่วนตัว
โค้ดเบสขนาดใหญ่ที่ไม่มี type นั้นเป็นฝันร้ายในการดูแลรักษา แม้จะมี IDE ทรงพลังอย่าง RubyMine ก็ตาม
ทุกวันนี้อยากรู้ว่า Sorbet พัฒนาไปไกลแค่ไหนแล้ว โดยเฉพาะการทำงานร่วมกับ RoR
มันยึดตามปรัชญาของ Rails ได้ดี และยังทำให้การเรียนรู้ Rust ง่ายขึ้นด้วย
น่าลองเล่นในช่วงสุดสัปดาห์
ต้องคัดลอกข้อมูล production จริงมาลงเครื่อง local หรือ SSH เข้าเซิร์ฟเวอร์เพื่อเปิด REPL ดูสถานะเอา
การดีบักใน IDE เป็นประสบการณ์ที่ เหมือนตกนรก
ฉันรัก Ruby มากจริงๆ แต่หลังจากเจอกับการดีบักแบบเรียลไทม์แล้วก็ลำบากใจ
ตอนนี้ไม่มีเหตุผลอะไรที่ต้องเลือก Ruby หรือ Python เป็นพิเศษแล้ว
Python คงอยู่ต่อได้อีกพักในสาย ML แต่สุดท้ายก็น่าจะหายไป
ฉันก็ดีใจที่มีคนพูดความคิดแบบนี้ออกมาอย่างเปิดเผย
ช่วงนี้เริ่มเหนื่อยกับ สถาปัตยกรรมไมโครเซอร์วิส ที่มากเกินไป
ตอนเย็นเลยหันไปทำโปรเจกต์ที่แก้ปัญหาแบบตรงไปตรงมาโดยไม่มีโครงสร้างเกินจำเป็น
เมื่อก่อนฉันทำงานกับโครงสร้าง PHP เยอะ แต่ไม่ว่า Rails หรือ PHP สุดท้ายก็เป็นแค่ เครื่องมือแก้ปัญหา
ให้ความรู้สึกเหมือนการพัฒนาแบบ desktop IDE สมัยก่อน ที่ทุกอย่างทำงานอยู่ “ในกล่อง” เดียวกัน
เหมือนได้กลับคืนสู่ ความเรียบง่ายที่เน้น productivity หลังจากหลุดพ้นจากการต้องจัดการองค์ประกอบซับซ้อนของงานเว็บ
แถมยังไม่ต้องใช้ TypeScript ด้วย ซึ่งดีมาก เพราะฉันมองว่า TypeScript เป็นกอง boilerplate ที่เยิ่นเย้อและไม่จำเป็น
เรารันแอป Rails ใน production มาต่อเนื่องตั้งแต่ปี 2007
เคล็ดลับที่ทำให้ Rails อยู่ยาว ไม่ใช่เรื่องอายุ แต่เป็นความเสถียรและความใช้การได้จริง
ข้ออ้างว่าการใช้ JavaScript ที่ฝั่งแบ็กเอนด์จะทำให้มีประสิทธิภาพมากขึ้นนั้นถูกหักล้างไปแล้ว
การเปลี่ยน tech stack ส่วนใหญ่เกิดจาก การแต่งเรซูเม่ให้ดูดี หรือ ความกังวลตามกระแส มากกว่าความต้องการทางวิศวกรรมจริงๆ
Rails ขับเคลื่อนธุรกิจจริงมาอย่างเงียบๆ ตลอด
คงไม่มีใครคิดว่าแพ็กเกจ 3.1 ล้านตัวใน NPM ให้ความสามารถมากกว่า 190,000 ตัวใน RubyGems แบบตรงๆ หรอก
ตอนนี้กำลัง migrate ไปใช้ Inertia + Vue.js ซึ่งเป็นคู่ผสมที่ทรงพลังมากจนแทบไม่ต้องเปลี่ยนฝั่งแบ็กเอนด์เลย
productivity ที่เพิ่มขึ้นช่วยชดเชยความยากในการจ้างคนได้ด้วย
ยิ่งผู้ใช้มาก ecosystem ก็ยิ่งแข็งแรง
แต่ใน RubyGems ก็มีแพ็กเกจเก่าๆ อยู่มากเหมือนกัน เลยคิดว่าเทียบกันตรงๆ ได้ยาก
ปรัชญาแบบ “แถมแบตเตอรี่มาครบ” ของ RoR หรือ Django นั้นดี แต่การดูแลโปรเจกต์เก่าใช้เวลามาก
ถ้าจะอัปเดตโปรเจกต์ที่มีอายุ 5~6 ปี การจัดการ dependencies คือภาระใหญ่
เพราะงั้นช่วงนี้ฉันเลยชอบใช้เฟรมเวิร์กเรียบๆ หรือไม่ใช้เฟรมเวิร์กไปเลยกับ Go มากกว่า
ถ้าใช้เฉพาะไลบรารีที่จำเป็นจริงๆ การดูแลก็ง่าย
นอกจากแพตช์ความปลอดภัยแล้ว ก็สงสัยว่ามีเหตุผลอะไรที่ต้องอัปเดตบ่อยขนาดนั้น
ตลอดปีครึ่งที่ผ่านมา ฉันอัปขึ้นเมเจอร์เวอร์ชันไป 5 ครั้ง แต่ก็ยังค่อนข้างง่าย
ถ้าวางให้รอบคอบตั้งแต่แรก ก็แทบไม่ต้องแตะอะไรไปอีกนาน
คิดว่า ประสบการณ์การอัปเกรด เป็นเรื่องที่คนประเมินต่ำไป
Next.js เปลี่ยนโครงสร้างแทบหมดทุกครั้งที่ขึ้นเมเจอร์เวอร์ชัน แต่ Rails มีรอบการเลิกใช้แบบค่อยเป็นค่อยไป (deprecation) ที่ช้ากว่า เลยเสถียรกว่ามาก
เวลาเราต้องส่งมอบผลิตภัณฑ์อย่างต่อเนื่อง เสถียรภาพของอินเทอร์เฟซ สำคัญกว่าพาราไดม์ใหม่ล่าสุดมาก
การย้ายจาก pages ไป app router ของ Next.js นั้นแทบจะเป็น การย้ายแพลตฟอร์มใหม่ทั้งระบบ
ในทางกลับกัน Rails มีเส้นทางอัปเกรดที่มีเอกสารชัดเจนและรอบ deprecation ที่คาดเดาได้
การจัดการเวอร์ชัน Ruby ก็แทบหมดปัญหาเรื่อง environment ไม่ตรงกันด้วย rbenv/asdf
ฉันทำ Rails มามากกว่าสิบปี ตั้งแต่ DevOps ไปจนถึงเว็บเดฟสายลุยเดี่ยว และถ้าต้องเลือกใหม่ก็จะเลือกเหมือนเดิม
Rails คือ เฟรมเวิร์กที่ครบถ้วน สะอาด และมี productivity สูง
ในแบบสำรวจของ Stack Overflow มันก็ยังติด “Top 5 สแตกที่อยากใช้ในโปรเจกต์ถัดไป” อยู่
แทบไม่ต้องกังวลเรื่องการตั้งค่าอินฟราหรือการ deploy เลย
สุดท้ายสิ่งสำคัญไม่ใช่สายตาคนอื่น แต่คือ การใช้เครื่องมือที่เหมาะกับตัวเอง
ออกมาก่อน Django อยู่ 1 ปี
ลิงก์แบบสำรวจ
เมื่อก่อนฉันคิดว่า Ruby/Rails คือ คำตอบที่ดีที่สุด สำหรับปัญหาส่วนใหญ่ และตอนนี้ก็ยังคิดแบบนั้นอยู่
ฉันไม่เคยใช้ Rails แต่เข้าใจความรู้สึกกับ ความวุ่นวายของสภาพแวดล้อมการพัฒนาเว็บ ในทุกวันนี้
เพราะแบบนั้นฉันเลยมองไปข้างหน้าแล้วเลือก Elixir และ Phoenix
โปรเจกต์หน้าฉันตั้งใจว่าจะต้องลองแน่นอน
อยากรู้ว่าอะไรใน Elixir ที่ทำให้มันน่าดึงดูดขนาดนั้น และสำหรับคนเริ่มต้นควรโฟกัสตรงไหน
เมื่อ 10 ปีก่อน เราสร้างฟรอนต์เอนด์สตรีมมิงของสถานีโทรทัศน์ใหญ่ในสวีเดนด้วย Rails
บน Heroku มันรองรับ ผู้ใช้พร้อมกันมากกว่า 1 ล้านคน ได้ และทำงานได้ดีมาก
หลังจากนั้นฉันย้ายไปทำเรื่องโครงสร้างพื้นฐานสตรีมมิง, API, AI/ML และอย่างอื่นต่อ แต่ไม่ใช่เพราะ Rails ล้มเหลว ทว่าเป็นเพราะ ลักษณะของปัญหาเปลี่ยนไป
Rails เหมาะกับปัญหาที่มีโมเดลข้อมูลและตรรกะทางธุรกิจเป็นศูนย์กลาง ส่วนปัญหาที่เน้น concurrency หรือ infrastructure ภาษาอื่นจะเหมาะกว่า
Ruby ยังเป็น ภาษาที่สวยงามและสื่อความหมายได้ดี จนยังคิดถึงอยู่มาก
แต่ก็รู้สึกว่ายากจะตัด อคติส่วนตัว ต่อภาษาที่ชอบออกไปได้ทั้งหมด
เลยสงสัยว่าคุณทำโปรเจกต์ถัดไปด้วยภาษาอะไร
สำหรับคนที่เสียดายเรื่องการไม่มี static type ก็มีโซลูชันดีๆ อย่าง Sorbet
คุณจะได้ทั้ง productivity ของ Ruby, static type และการผสานกับ LSP ไปพร้อมกัน
ด้วยแรงสนับสนุนจาก Shopify ทำให้ Sorbet รองรับ Rails ได้ดีด้วย
ฉันชอบ ecosystem นี้มากจนยังอยากทำงานกับ Rails ต่อไป
ด้วย พัฒนาการของเครื่องมือ AI ทุกวันนี้ ฉันคิดว่าข้อจำกัดมีแค่ขอบเขตจินตนาการเท่านั้น
ฉันสร้าง เอเจนต์อีคอมเมิร์ซ ที่ใช้มันเป็นฐานสำหรับมอนิเตอร์ร้านค้า 24 ชั่วโมงและแจ้งเตือนผ่าน Slack
ถ้าจะทำโปรเจกต์เกี่ยวกับ AI ก็ควรลองดู selzee.com/openclaw