Merhaba arkadaşlar.
Yazının ana konusu Ruby on Rails hakkında bilgilerimi aktarmak olsa da minik bir karşılaştırma da yapacağım. Türkiye'de Rails'in hakettiği ilgiyi görememiş olmasına üzülen biri olarak, orta ve büyük ölçekli projeler için fikir arayışında olanlar için nacizane fikirlerimdir..
Framework Neden Gereklidir?
Web'de biraz Türkçe kaynak araştırması yaptığınız zaman bulacağınız derslerin hala 2000'li yıllardan kopyalanan temel dersler olduğunu görürsünüz. Öyle ki size hala şifreleri veritabanına kriptolamadan kaydetmeyi anlatıyorlar. Bazısı MD5 ile nasıl kriptolayacağınızı ek bilgi olarak gösteriyor. Çünkü amaç fazla detaya girmeden kolaya kaçmak ya da copy paste yazı olması. Durum böyleyken, size PDO'dan, Bcrypt'den sözedebilecek kişi sayısı parmakla sayılacak kadar az. Özellikle devlet sitelerinin tasarımlarına ve altyapılarına gözattığınız zaman neden o sitelerin bu kadar çabuk hacklendiğini anlamanız zor olmayacaktır! Hala MD5 ler kırılamaz diye savunanları görüyorum.
İşte framework bu noktada ortaya çıkarıyor. Çünkü güvenlik denen şey sizin PDO öğrenmenizle, Bcrypt kullanmanızla da bitmiyor. Sürekli geliştirmek zorundasınız. Bunu da tek başınıza yapmak ne kadar akıl karıdır siz düşünün. Binlerce kişinin emek verdiği, kafa yorduğu kodlar dururken neden siz oturup en baştan yazacaksınız?
Hangi Framework?
Ben Laravel, Symfony ve Phalcon kullandım. Laravel en kolay ve zevkli olanıdır. Phalcon en hızlısıdır ancak kaynak sıkınıtısı mevcut, paket kavramı yoktur. Symfony tam donanımlıdır, en çok pakete sahip olandır ve diğerlerine göre zordur. Bunların detayına girmeyeceğim. Burada önemli olan Full Stack kavramıdır. Ben bunu Tam Donanımlı Framework olarak çevirmek istiyorum. Yani ihtiyacınız olan ne varsa yapabileceğiniz tek framework Symfony'dir. İstediğiniz her şeyi spagetti kod yazarak ya da diğer frameworkleri kullanarak da yapabilirsiniz. İşte o maceraya atılmadan Full Stack'ı anlamak biraz zordur.
Full Stack
Diyelim sitemizin kullanıcı girişine facebook ile de bağlanabilme seçeneği eklemek istiyoruz. Aynı zamanda bir admin paneli ekleyeceğiz. Laravel ile başlayalım. Bir çok auth paketi seçeneği var ama Sentinel en yaygınıdır ve benim de seçimimdir. Bu paketi geliştirenler Facebook giriş eklemeniz için ayrıca Sentinel Social diye bir pakette geliştirmişler, ancak paralıdır. Ücretsiz diğer paketlerden sonunda Facebook entegre ettiniz (biraz uğraştırıyor). Sıra geldi admin panele. Bir çok admin paketi var ancak hangisi Sentinel ile uyumlu çalışıyor? Ne sentinel geliştiricleri kendisiyle uyumlu çalışan paketleri belirtmiş ne dğer admin paketleri uyumlu oldukları paketleri yazmış. Bir çok paket geliştiricisi dökümantasyon bile hazırlamamış. Neyin nasıl kullanılacağı meçhul. Kimisi bir kez geliştirilip bırakılmış. Hatta sizi bir adım daha öteye götürüp şu soruyu sorayım. kullanıcı bilgileri ve diğer tüm verileri saklamak için MongoDB ya da PostgreSQL kullanmak istediniz, ne yapacaksınız? İşte orada büyük bir macera sizi bekliyor.
Buradan Symfony'ye geçiyoruz. Aynı sistemi Symfony'de deneyeceğiz. Symfony paketler Bundle olarak adlandırılıyor. Hemen auth olarak FOSUser Bundle seçtik. Zaten facebook için neleri yükleyeceğiniz, admin için neler yapacağınız tek tek açıklanmış. Mongodb için gerekli eklentiler ve dökümanlar sunulmuş. İşte bu noktada Full Stack'ı hissetmeye başlıyorsunuz. İş yükünüz azalıyor. Ancak dependency'ler öldürüyor sizi. En az 7-8 bundle kuruyorsunuz. Hele bir de versiyonlar uymuyorsa. Fabien'in kendi anlattığı tutorial bile çalışmıyor. Tamam kaynak çok ama Laravel'in o kolaylığını arıyorsunuz. Arada kaldınız.
İşte tam bu noktada "Python" mu "Ruby" mi? sorusu çıkıyor :)
Django vs Rails
Bir kez o soruyu sorduğunuzda, hele ki framework kullanıyorsanız varacağınız nokta büyük ihtimalle Django mu Rails mi olacaktır. Çünkü ikisi de Full Stack'tır.
İkisi'de PHP frameworklere göre hızlıdır. Django (Python) biraz daha hızlıdır. Bir çok kişi Python'un en kolay dil olduğunu söyler. Bana Ruby daha kolay geldi. Doğal olarak Rails de kolay
"Kolaylık" aslında bilmediğiniz şeyi size öğretecek kişi var mıdır, ne kadar sayıdadır, işe yarar bilgiler mi verir vs gibi bir çok etkene bağlı olan bir durumdur.
Bir çok konu için İngilizce dökümanlardan faydalanıyoruz maalesef. Bu doğrultuda örnek verelim.
Google ile "Upload and Crop User Photo with XXX" diye arattığınızda karşınıza XXX framework'u için bir sonuç geliyor mu? Ya da "Using Elastic Search with XXX" diye arattığınızda sonuç alıyor musunuz?
Örnekleri çoğaltabilirsiniz. Caching nasıl yaparsınız, Memcache ya da Varnish nasıl entegre edersiniz gibi...
Aklınıza gelebilecek her şeyin paketini yapmış, bir de bunları nasıl kullanacağınızı gösteren eğitim videoları hazırlamış tek framework Rails'tir.
Çünkü framework demek sadece paket yapıp sunmak değil, onu nasıl kullanacağını da göstermek olmalıdır bana göre. Paketlerin versiyonu, komutlar değiştikçe eğitimi de revize ediyorlarsa, o zaman ne kadar doğru bir seçim yaptığınızı anlıyorsunuz.
RAILS
Rails'te paketler Gem diye adlandırılıyor. Gemlerin en güzel yanı müthiş bir dökümantasyonu olması ve hepsinin birbiriyle uyumlu çalışmasıdır. Benim Rails seçmemdeki birinci neden budur.
Rails kullanırken yapmak istediğiniz bir şeyi nasıl yapacağınıza dair en ufak bir fikriniz yok diyelim. Ama "acaba şöyle bir şey denesem olur mu" dediğinizde kodunuzun çalıştığını görebiliyorsunuz. Rails sihirlidir derken bunu demek istiyorlar. Bir şey yapıyorsunuz ve Rails bunu da mı çalıştırdı diye hayrete düşüyorsunuz. Uzun süre Rails kullananlar ne demek istedğimi anlayacaktır.
Ben restful nedir biliyorum diyenler, Rails kullanmaya başladıktan sonra aslında hiçbir şey bilmediklerini görüyorlar.
Her framework en iyi paylaşımcı ve yardımcı kullanıcı kitlesinin kendilerinde olduğunu iddia eder. İddialara bakmayın, hepsinin forumuna gidin, kaç soru cevaplanmış, çözüme ulaşılmış mı ona bakın. Bu size fikir verecektir. Rails'de bir kitleden fazlası vardır. Müthiş bir döküman vardır. O da yetmemiş Railscast ve benzerleri yapılmıştır.
Railscasts: Dünyada yapılmış en iyi eğitim serisidir. 417 videoluk seri ile size A dan Z ye her şeyi öğretir. Gerçek web uygulamalarından örnekler verir. Yani size kedi miyavla, köpek havla gibi saçma örneklerle OOP öğretmez, uykunuzu getiren konuşmalar yapmaz, direk aksiyona girer. Crop nasıl yapılır, makalelere yorum uygulaması nasıl yaparsınız, thinking sphinx ile arama nasıl yaparsınız. Alternatifleri olan SOLR ve Elastic Search nasıl kullanırsınız, N+1 sorgu nedir, brakeman ne işe yarar, vps'nizi nasıl ayarlarsınız, capybara ile websitenizi nasıl yüklersiniz, mass assign nedir, sizi nasıl hacklerler, koruması nasıl yapılır gibi daha bir çok konu..Yani keşfetmenizi bekleyen bir hazinedir. Öyle ki Rails kendini geliştirdikçe, bu videolar da yeni versiyona göre revize ediliyor, çalışırlığını koruyor. Railscast dışında, Codeschool var, size nasıl kötü ve iyi kod yazılacağını gösteren, amacı size Rails öğretirken iyi ve kısa kod yazmayı öğretmek olan bir başka eğitim serisidir. O da yetmedi, onlarca eğitim serisi, kitap..
Mesela Brakeman'e değinelim. Rails için yapılmış bir gem..Kodlarınızı tarıyor, sitenizin güvenlik açıklarını buluyor, N+1 sorgularınızı buluyor. İşlem bittiğinde hepsini listeleyip nasıl düzelteceğinizi gösteriyor. Merakınızı gidermek için Railscast'in 358 nolu videosunu izleyebilirsiniz. Rails ile güvenlik başka hiçbir framework ile sahip olamayacağınız kadar sağlamdır. Brakeman örneği de size bu işlemlerin ne kadar kolay olduğunu gösteriyor..
Kodlarınız test edilebilsin mi istiyorsunuz. Rspec, Cucumber, Factory Girl, hepsi birer kitapla beraber size geliyor.
Caching ihtiyacı gittikçe artıyorken php frameworkler arasında Symfony bu konuda önde, ancak yeterli mi? Yetersiz olduğunu Fragment Caching ile sorunlar baş göstermeye başladığında anlıyorsunuz. Peki siz hiç Russian Doll Caching duydunuz mu? Rails kullanmıyorsanız muhtemelen hayır
Ancak bir çok framework ya da paket hazırlayıcısının "Rails'ten esinlendik" dediğini duymuş ya da okumuşsunuzdur . Rails'i bu kadar meşhur ve ilham verici yapan o kadar özellik var ki içine girdiğiniz de daha iyi anlıyorsunuz neden herkesin Rails gibi bir framework'e sahip olmak istediğini.
Web socket konusunda PHP dünyası Symfony hariç halen iyi bir çözüm üretememişken, NodeJS'in hakim olduğu bu alanda Rails, websocket desteği çok iyi olmasına rağmen Live Streaming ile işi daha da kolaylaştırmış ve alternatif yaratmıştır.
Yukarıda da belirttiğim gibi Russian Doll Caching, Live Streaming konusu Railscasts'te örnekle açıklanmış. Yani Rails'te size web tasarım ile ilgili bilmeniz gereken her şeyi gem + eğitim olarak sunulmuş.
DEZAVANTAJLARI
PHP nin hala popüler olmasını sağlayan şey, sunucu konusudur. PHP ile yazılmış bir siteyi herhangi bir sunucuda rahatlıkla çalıştırabilirsiniz ve bir kontrol paneliniz vardır. Ancak Rails ile bu o kadar kolay değil. Hele ki Shared Hosting ile hiç şansınız yok. En az bir VPS alacaksınız ve Ruby kurulumdan Rails'e kendiniz ayarlayacaksınız. Bunları yaparken de shell komutları kullanacaksınız, kontrol panel lüksünüz yok.
Ben bunu dezavantaj değil, avantaj olarak görüyorum. Çünkü sunucu konusunda da kendinizi geliştiriyorsunuz.
Son olarak artık Rails'in çok kolay kurulduğu sunucular ortaya çıkmaya başladı ve Railscasts'te bu firmalardan birine (isim vermeyeyim) nasıl yükleme yapılacak, sunucu nasıl ayarlanacak tek tek anlatılmış. Yani artık bu konu bir kabus olmaktan çıktı...
Bir de wordpress faktörü var. Bir çok kişisel ve kurumsal site wordpress ile yapılıyor. Wordpress PHP frameworklerden bile popüler olmaya başladı.
Ancak iş orta ve büyük ölçekli, aşırı hit alan ya da aşırı veri barındıran web sitelerine gelince değişiyor
Umarım faydalı olmuştur. Türkiye'de Rails kullanımın artması dileğiyle,