Brut - Ruby için yeni bir web çerçevesi
(naildrivin5.com)- Ruby ekosistemi için “düşük soyutlama, düşük tören (low-ceremony)” odaklı basit ve güçlü bir web çerçevesi; kontrolör ve REST kaynağı kavramı olmadan sayfa, form ve tek eylem odaklı bir yapı sunar
- Sunucu render'lı HTML, doğrudan yazılan JS/CSS, OpenTelemetry entegrasyonu, Sequel·OptionParser gibi modern Ruby araçları dahili olarak gelir; kurulum ve geliştirme dakikalar içinde yapılabilir
- Sınıf tabanlı yapı, gerçek tip temelli oturum, form ve parametre yönetimi ile dinamik metot/hash kullanımını en aza indirerek net kod ve otomatik dokümantasyon hedefler
- Modern web platformunun aktif kullanımı: sunucu-istemci doğrulamanın bütünleştiği form UX, BrutJS(Web Components), esbuild ile CSS paketleme ve hashleme, güvenlik politikaları ve DB tasarımındaki temel yapıların güçlendirilmesi
- YAML'in minimuma indirilmesi, Ruby/Hash tabanlı ayarlar ve net adlandırma/rol ayrımıyla, gereksiz soyutlama veya desen dayatmadan Ruby ile tarayıcı teknolojilerini eğlenceli şekilde kullanmayı hedefler
Brut çerçevesinin ana özellikleri
Tamamen yeni bir yapı – kontrolör olmadan sayfa odaklı
- Kontrolör, REST kaynağı ve route action yerine sınıf tabanlı sayfa, form, tek eylem işleyicileri ile oluşturulur
- HTML doğrudan sunucuda üretilir, JS/CSS istediğiniz gibi yazılabilir
- Örnek: Zaman gösterimi sayfası doğrudan
TimePage < AppPageile tanımlanır
Modern web platformunun aktif kullanımı
- Sunucu ve istemci doğrulamasını bütünleştiren form UX
- BrutJS(Web Components) ile HTML'in kademeli genişlemesi desteklenir
- esbuild ile CSS paketleme ve hashleme; PostCSS veya SASS olmadan sade bir şekilde yapılır
Geliştirme verimliliği ve temel yetenekler dahili
- OpenTelemetry tabanlı enstrümantasyon, Sequel tabanlı veri erişimi, OptionParser tabanlı komut satırı otomasyonu
- Temel güvenlik politikaları, DB kolon/foreign key varsayılanları ve indeksler, her zaman timezone-aware zamanlar, kolay lokalleştirme (Localization)
- RSpec testleri, Faker/FactoryBot ile veri üretimi, Phlex ile HTML üretimi
YAML dışlama, net ayar yapısı
- I18n, Ruby Hash tabanlıdır; dinamik ayarlar dotenv ile yönetilir (YAML neredeyse hiç kullanılmaz)
- docker-compose yalnızca istisna olarak YAML kullanır
Gereksiz soyutlama veya desen zorunluluğu yok
- Açık adlandırma ve rol ayrımı (ör.
WidgetsPage,/widgetsadresine gider) - Veri katmanı (DB::Widget) ile alan katmanı (Widget) tamamen ayrılabilir
- Kontrolör kavramı yok, iş mantığını istediğiniz şekilde uygulayabilirsiniz
- Karmaşık fonksiyonel desenler, monadlar, Proc vb. zorunlu kılınmaz
Geliştirme deneyimi ve esneklik
- RSpec gibi modern Ruby ekosistemi araçları temel olarak dahildir
- Phlex(HTML), Faker/FactoryBot, Sequel, OpenTelemetry gibi ana kütüphaneler aktif şekilde kullanılır
- Tekrarlayan boilerplate/ayar/karar süreçlerinden kurtulup, Ruby ve tarayıcı teknolojilerinin “zevkine” odaklanır
Neden Brut?
- Rails gibi mevcut çerçevelerin tekrarlayan kurulumları, sürekli tasarım/ yapı tartışmaları ve gereksiz esneklik yerine kodun kendi keyfini hedefler
- Hızlı bir şekilde inşa edilebilen, Ruby tabanlı bir web uygulaması çerçevesi olarak geliştirmeyi ve dağıtımı eğlenceli hale getirmek üzere verimlilik ve açıklıka odaklanır
Başlangıç ve gelecek yol haritası
- Brut resmi Docker imajı, komut bazlı hızlı uygulama oluşturma ve çalıştırma desteği
- ADRs.cloud gibi gerçek dünya örnek uygulamalar sunar
- 1.0 sürümü ve resmi yol haritasının güncellemeleri düzenli olarak planlanıyor
3 yorum
https://naildrivin5.com/blog/2025/…
Sanırım bu bağlantıyla düzeltmek gerekiyor
Bağlantı yanlış verilmiş gibi görünüyor.
Hacker News görüşleri
forms ve pages odaklı yaklaşımı beğendim; ben de uygulamalarımda buna benzer bir yaklaşım kullanıyorum. Tüm etkileşimler Forms ve Links tarafından yönlendiriliyor, JavaScript ile yaptığım tüm iyileştirmeler de aslında mevcut bir formu (gizli olanlar dahil) tıklamaktan ibaret. HTML'i her zaman doğrudan inceleyebildiğim için hangi route'un etkileşimi gerçekten işlediğini net biçimde görebiliyorum. controllers bence gereğinden fazla kullanılıyor; pratikte forms ve models (backend) ile views (Pages) yeterli oluyor. Ayrıca framework, çok sayıdaki validation işini veya controller içinde tekrar eden prosedürleri daha zarif biçimde ele alabilir.
Monad, algebraic data types, currying ya da her şeyi Proc ile ele almak gibi karmaşık kavramları mutlaka anlamak gerekmediğine dair açıklamayı beğendim. İş mantığında functor kullanmak istiyorsanız bu tamamen sizin tercihiniz olabilir. Bu esneklik hoşuma gitti; birkaç yetkin çalışma arkadaşıyla birlikte yürütülen bir yan projede denemek isteyebilirim.
Bu framework, Sinatra'nın sadeliği ile Rails'in zenginliği arasında harika bir orta nokta olabilir gibi görünüyor. Ben basit uygulamalarda Sinatra, gerektiğinde de Rails kullandım; ama karmaşık olmayan uygulamalarda Rails bazen gereksiz derecede ağır geliyordu. Bunu yeni bir seçenek olarak denemeyi heyecan verici buluyorum.
Değerlendirilebilecek bir alternatif olarak Roda da var. Küçük projelerde benim için çok iyi sonuç verdi ve ölçeklenebilirliği de iyiydi. Plugin sistemi sayesinde yeteneklerini genişletmek kolaydı, routing tree ile çalışmak da rahattı.
Benim için hanami en iyi orta noktaydı, ama bundan sonra bruts'ın nasıl gelişeceğini yakından izleyeceğim.
David'in Sustainable Rails kitabını gerçekten çok seviyorum; Rails konusunda her zaman önerdiğim bir kitaptır. Bu framework'ün yaklaşımı da etkileyici. Bu küçük alternatif framework'lerden biri Sorbet'i tam anlamıyla benimseyip bunu form validation gibi alanlarda kullansa gerçekten ilginç olurdu. Elbette bu, gradual typing yaklaşımıyla çelişebilir ama deneysel olarak eğlenceli olurdu.
David sadece çok yetenekli bir geliştirici değil, aynı zamanda çok iyi bir konuşmacı. Kitabın temasıyla da örtüşen şu video konuşmasını tavsiye ederim: https://www.youtube.com/watch?v=CRboMkFdZfg
Sorbet güzel ama yapı zorlaması ve veri doğrulama için kişisel olarak dry-rb ekosistemini tercih ediyorum.
Bu framework'ün alışılmadık bir lisans kullandığını görüyorum; peki bu, source code'u göremeyeceğimiz anlamına mı geliyor?
Kaynak kodu GitHub'da görebilirsiniz: https://github.com/thirdtank/brut
Lisansın biraz garip hissettirdiği konusunda katılıyorum.
Bu proje bana eski Camping framework'ünü hatırlattı, sadece dinamik parent class oluşturucuları yok.
Brut'un resmi sitesinde de (https://brutrb.com/overview.html) ilginç içerikler vardı.
Örnek sitede giriş yapmayı denedim ama GitHub kimlik doğrulamasından hemen sonra hata aldım.
Henüz Ruby kullanmıyorum ama projeyle ilgilendiğim için yıldız verdim; bu proje gerçekten Ruby'yi denememe vesile olabilir.
Özellikle Phlex seçimini beğendim. Ayrıca bu framework'ün Datastar js library ve onun SSE (server-sent events) kullanımına da ne kadar uygun olacağını merak ediyorum, teşekkürler.