Peluncuran Rails 8 telah memicu kembali diskusi yang penuh gairah tentang kompleksitas pengembangan web, dengan para developer mempertanyakan apakah ekosistem JavaScript modern telah menjadi terlalu rumit tanpa alasan yang jelas. Sebuah artikel terbaru yang menyoroti kontras antara pendekatan batteries-included Rails dengan toolchain frontend modern yang luas telah menyentuh saraf sensitif komunitas developer.
Perdebatan ini berpusat pada skenario yang familiar: developer didorong untuk mengadopsi toolkit yang ekstensif termasuk Vite , React , TypeScript , Tailwind CSS , ESLint , Prettier , dan berbagai tool lainnya, padahal aplikasi Rails sederhana mungkin dapat mencapai tujuan yang sama dengan kompleksitas yang jauh lebih rendah. Percakapan ini telah berulang selama lebih dari satu dekade, namun kemampuan yang ditingkatkan Rails 8 telah membawanya kembali ke fokus yang tajam.
Perbandingan Toolchain JavaScript Modern
| Kategori Tool | Default Rails 8 | Stack JS Modern |
|---|---|---|
| Build Tool | Import Maps | Vite/Webpack |
| Frontend Framework | Hotwire/Stimulus | React/Vue/Svelte |
| CSS Framework | Built-in Tailwind | Tailwind + PostCSS |
| Type Checking | Ruby (dynamic) | TypeScript |
| Code Formatting | RuboCop | Prettier + ESLint |
| Deployment | Kamal | Docker + K8s |
Dilema Kompleksitas
Banyak developer berargumen bahwa pengembangan web modern telah menjadi terlalu rumit tanpa perlu, dengan setiap tool menyelesaikan masalah yang diciptakan oleh tool lain dalam siklus yang tak berujung. Komunitas terbagi antara mereka yang melihat kompleksitas ini sebagai hal yang melekat pada aplikasi web modern dan mereka yang percaya bahwa hal ini sebagian besar adalah masalah yang diciptakan sendiri. Para pendukung Rails menunjuk pada filosofi framework tentang convention over configuration sebagai solusi untuk spiral kompleksitas ini.
Namun, para kritikus mencatat bahwa Rails sendiri telah mengalami perubahan signifikan selama bertahun-tahun, bergerak dari Bundler ke Webpacker ke Sprockets ke Propshaft , dan dari CoffeeScript ke berbagai solusi JavaScript . Evolusi ini telah menciptakan tantangan upgrade tersendiri, dengan banyak aplikasi Rails terjebak pada versi lama karena kesulitan mengikuti perubahan-perubahan ini.
Perpecahan Framework Frontend
Sebagian besar diskusi berfokus pada pendekatan pengembangan frontend. Sementara Rails 8 mempromosikan Hotwire dan Stimulus sebagai alternatif yang lebih sederhana dari solusi berbasis React , banyak developer merasa tool-tool ini membingungkan dan terbatas untuk interaksi yang kompleks. Komunitas semakin beralih ke solusi seperti Inertia.js , yang menjembatani backend Rails dengan framework frontend modern seperti React atau Vue .
Saya menggunakan Rails dengan Inertia Rails . Saya mendapatkan kesenangan penuh dari Rails tetapi saya dapat membuat komponen React yang mewakili halaman apa pun yang ingin saya tulis dalam React . Inertia akan melakukan serialisasi dan meneruskan data dari controller saya. Jadi tidak ada state. Hanya membangun UI murni.
Pendekatan hybrid ini tampaknya memuaskan developer yang menginginkan kemampuan backend Rails sambil mempertahankan akses ke ekosistem komponen dan tool frontend yang kaya.
Solusi Hybrid
- Inertia.js: Menjembatani backend Rails dengan frontend React/Vue/Svelte
- Turbo-Mount: Integrasi React minimal untuk Rails
- Rails API + SPA: Pemisahan concern secara menyeluruh
- Islands Architecture: Pemasangan komponen selektif untuk interaktivitas
Ukuran Tim dan Skala Proyek Penting
Perdebatan ini mengungkap faktor penting yang sering diabaikan: ukuran tim dan kompleksitas proyek. Banyak developer mencatat bahwa Rails vanilla bekerja dengan sangat baik untuk tim kecil dan aplikasi CRUD yang sederhana, tetapi tim yang lebih besar dengan set keterampilan yang beragam mungkin mendapat manfaat dari pendekatan yang lebih modular. Pasar perekrutan juga berperan, karena menemukan developer yang berpengalaman dengan Hotwire dan Stimulus jauh lebih menantang daripada menemukan developer React atau Vue .
Lingkungan enterprise menghadirkan pertimbangan tambahan, dengan pipeline deployment yang sudah mapan, persyaratan keamanan, dan kebutuhan integrasi yang mungkin lebih menguntungkan toolchain yang lebih standar daripada default opinionated Rails .
Paradoks Produktivitas
Meskipun ada kekhawatiran tentang kompleksitas, banyak developer melaporkan bahwa kembali ke Rails setelah bertahun-tahun di ekosistem JavaScript telah meningkatkan produktivitas mereka secara dramatis. Ekosistem gem framework yang matang yang bekerja dengan baik bersama-sama kontras tajam dengan sifat terfragmentasi paket npm , di mana masalah kompatibilitas dan konflik versi adalah hal yang umum.
Perbaikan Rails 8 , termasuk tool deployment yang lebih baik seperti Kamal dan penanganan JavaScript yang disederhanakan melalui import maps, telah membuat pendekatan Rails vanilla lebih menarik. Beberapa developer melaporkan waktu deployment turun dari 30 menit menjadi 5 menit setelah menghapus proses build JavaScript yang kompleks.
Fitur Utama Rails 8
- Import Maps: Solusi JavaScript tanpa build untuk manajemen dependensi yang lebih sederhana
- Kamal: Tool deployment yang disederhanakan untuk mengurangi kompleksitas deployment
- Hotwire/Stimulus: Framework interaksi frontend pilihan Rails
- Propshaft: Solusi asset pipeline saat ini
- Tailwind Integration: Dukungan built-in untuk CSS framework
Melihat ke Depan
Diskusi ini menyoroti ketegangan fundamental dalam pengembangan web antara kesederhanaan dan kemampuan. Sementara Rails menawarkan jalur untuk pengembangan yang cepat dengan tooling minimal, evolusi ekosistem frontend menuju arsitektur berbasis komponen dan interaksi yang kaya telah menciptakan nilai nyata yang enggan ditinggalkan oleh banyak developer.
Munculnya asisten coding AI mungkin dapat mengubah keseimbangan kembali ke pendekatan yang lebih sederhana dan konvensional seperti Rails , karena tool-tool ini berkinerja lebih baik dengan pola yang sudah mapan dan data pelatihan yang ekstensif. Namun, pilihan akhir sering kali bergantung pada keahlian tim, persyaratan proyek, dan pertimbangan pemeliharaan jangka panjang daripada superioritas teknis yang absolut.
Referensi: You're doing Rails wrong.
