Je možné vyvíjet weby s redakčním systémem na míru aniž byste byli skutečným programátorem? Atmosféra kolem Ruby on Rails dává naději i lidem, kteří by si dříve nebo s jinou technologií netroufli. Podívejte se jak dopadl někdo, kdo rozumí HTML a CSS, ale programování je pro něj horká kaše.
Železničářské Ministerstvo propagandy v časech recese šetří a tak nezbyly dotace na další nadšenecký článek o Rails. Radosti se místy nelze ubránit i tak, nicméně čekejte i chvíle dojemného zklamání. Článek je určen všem, kteří si myslí, že programovat weby nedokáží, ale povědomí o technologiích mají. Skuteční programátoři, ušetřete si nervy a běžte jinam.
Ostatně, mé startovací znalosti nebyly úplně mimo mísu. S Ruby on Rails (RoR) kódem přicházím pasivně do styku už přes dva roky, znalosti HTML a CSS mě živí až trapně dlouho. Věděl jsem co je to MVC, dokážu použít if a (Rubysté, ruku na klobouk) také unless. Tyhle znalosti nejsou ale tak podstatné, rozhoduje angličtina a schopnost správně se zeptat Googlu. Komunita kolem Rails je nadšená, sdílná a umí učit.
Ačkoliv o prospěšnosti RoR pro webdesign dlouhodobě nepochybuji, dost jsem nevěřil své šanci vyrobit web sám a hlavně o čase, ve kterém jsem schopen se to naučit.
Podívejte se, jak jsem postupoval a jaké problémy přitom řešil.
Začínáme s prací na projektu
Jde o primitivní eshop. Jednotlivé produkty jsou tříděny do kategorií. Pomocí jednokrokového formuláře lze objednat právě jeden produkt.
Z pohledu technického má práce na webu takovýto postup:
- Znalost obsahu a vztahů mezi jeho typy
- Správa obsahu
- Výpis obsahu do uživatelského rozhraní webu
První krok: definice typů obsahu a vztahů mezi nimi
Ať už jste programátor nebo designér, nejdříve se musíte důkladně seznámit s obsahem, se kterým pracujete. Jeden typ obsahu je v našem případě jeden Model. V tomto konkrétním projektu máme tři základní Modely: kategorii, produkt a objednávku.
Musíte znát vazby mezi Modely. V našem případě: Jeden produkt má právě jednu kategorii. Jedna objednávka obsahuje jeden produkt.
Máte? Jako uživatel Windows bych si teď představoval, že mi pokročilá technologie pro tvorbu webu poskytne nějaký klikací nástroj, kde si typy obsahu a vazby mezi nimi nadefinuji. Ani v RoR tomu tak není. Rails mají blíž k Linuxovému uživatelskému rozhraní, použijeme tedy příkazovou řádku a pomocí generátoru vytvořím Modely. Vazby mezi nimi si pak nadefinujeme ve vygenerováném kódu. Je to sice horší než klikání, ale vůbec to nebolelo.
Záměrně tady nemluvím o databázi, natož abych zmiňoval MySQL nebo jiné standardy. Výšeuvedeným postupem jsme vlastně databázi nadefinovali, ale Rails se o databázi starají jaksi samovolně. První věc, nad kterou jsem radostně výskal.
Mám tedy jednoduchý nástroj pro definici typů obsahu, data se mi nějak budou ukládat, ale já se nemusím trápit se znalostmi MySQL, SQLLite nebo čehokoliv jiného. To je hned o jednu úroveň technického myšlení a řešení problémů během práce na celém projektu méně. Místo toho můžu ženě uvařit čaj nebo podrbat naši kočku. Wow.
Druhý krok: Správa obsahu
Strukturu obsahu máme. Teď budeme potřeboval jednoduché rozhraní administrace, kde chceme samotný obsah přidávat, upravovat a mazat.
Administrační rozhraní na jedno kliknutí? Mám smůlu
Moje představa: ve chvíli kdy v klikacím rozhraní „vyrábím” Modely, hledal bych zatržítko „Vygeneruj z nich jednoduché správcovské rozhraní”. Naivní? V Rails zatím ano.
Zatržítko neexistuje, nemám dokonce ani snadnou možnost jak správcovské rozhraní oddělit (do obligátního /admin nebo jinam) od rozhraní pro zobrazování dat. Rails totiž generují kostru (říká se tomu scaffolding) uživatelského rozhraní v jednom celku. Oddělit správu jinam samozřejmě lze, ale je to mravenční práce.
Tady jsem se myslím poprvé a naposledy ocitl na hranici svých schopností a nebýt pánů Karla Minaříka a Vlada Suchého, zřejme bych v tomto levelu hry ztratil všechny životy. Zdály se mi tady sny o Djangu, které sice neznám ani tak špatně jako Rails, ale které má generování správcovského rozhraní vyřešeno na pohled docela hezky. Ani v případě Rails ovšem nevěřím, že by komunita nechala administrace-chtivé kodéry dlouho na holičkách.
Trochu krve a potu a nakonec tedy jednoduché správcovské rozhraní máme.
Třetí krok: výpis obsahu do uživatelského rozhraní webu
Výpis samotných dat v šablonách (tedy Views) je něco kvůli čemu jsme celou tu věc dělali a jste-li kodérem, budete se tady cítit jako doma. Téma Rails a šťastný kodér je ale na úplně jiný článek. Tady se bavíme o problémech nešťastného začínajícího programátora.
Hodně mi zpočátku vadilo, že bych měl pro HTML prvky využívat Rails metody (například image_tag namísto ![]()
). Takové programátorštiny s divnou syntaxí v mém krásném HTML! Jenže porovnejte dva kusy kódu:
<% unless @product.image.blank? %>
<% end %>
a
<%= image_tag(@product.image) unless @product.image.blank? %>
Ten kdo vybere druhý případ není jen programátor, ale také člověk, který chce svůj kód zanechat čitelný a snadno pochopitelný.
Migrace: olej do soukolí databáze, ale rozhraní nikoliv
Dobrá, máme nějaká data, máme jejich správu, máme výpis těch dat do uživatelského rozhraní webu. Jsme relativně šťastní, dokud… Dokud nepřijde zlý klient a neřekne, že do každého produktu by potřeboval přidat ještě anotaci a další obrázek.
Máme však výhodu, že myslíme agilně a Rails nás v tom podporují. On klient není zlý a jeho požadavek je zcela na místě. V Rails to jde samo — vytvoříme si migraci, kde ty dvě, tři pložky do databáze přidáme.
Jenže jak je přidáme do hotového rozhraní a administrace? Bohužel tušíte správně. Ručně. Svět není tak daleko, abyste se nepříjené práce nezbavili úplně. Docela by mě zajímalo, zda zrovna téhle prudy umí některá ze současných technologií zbavit.
Shrnutí: sami to určitě zkoušejte
Už dlouho se mi nestalo, že bych při adopci nějaké technologie propadal takovému jásotu nad vlastním pokrokem. Zkoušku Rails doporučuji všem kodérům, projektovým vedoucím, ale i techničtějším designérům nebo marketérům. Hlavně všem, kteří si při pohledu do PHP zdrojových kódu řekli, že „ne, to programování opravdu není pro mě”.
Berte mou chválu samozřejmě s rezervou, pokrok proběhl i jinde. Máme Django, CakePHP nebo Nette. Se všemi jsem přišel alespoň letmo do styku, leccos na nich oceňuji, ale nemám dostatečné znalosti abych byl schopen porovnání.
Soudě podle této zkušenosti s Rails, vyvíjet weby na míru bez hlubších technických znalostí zatím moc nejde, chcete-li se je ale naučit programovat, s Rails vám to může jít překvapivě snadno.