Když se náš spoluzakladatel a inženýr Dmitriy Zaporozhets rozhodl vybudovat GitLab, rozhodl se pro Ruby on Rails, přestože v té době pracoval především v PHP. GitHub, zdroj inspirace pro GitLab, byl také založen na Rails, takže to byla logická volba vzhledem k jeho zájmu o tento framework. Generální ředitel společnosti GitLab Sid Sijbrandij si myslí, že jeho spoluzakladatel učinil dobrou volbu:

„Vyšlo to opravdu dobře, protože ekosystém Ruby on Rails umožňuje utvářet mnoho funkcí ve vysoké kvalitě,“ vysvětlil. „Když se podíváte na GitLab, má obrovské množství funkcí. Vývoj softwaru je velmi složitý a abychom si s ním pomohli, potřebujeme spoustu funkcí a Ruby on Rails je způsob, jak toho dosáhnout. Protože existují všechny ty osvědčené postupy, které jsou na vaší šťastné cestě, je to také způsob, jak udržet kód konzistentní, když dodáváte něco jako GitLab. Jste tak trochu vedeni k tomu, abyste dělali správné věci.“

Závislost na užitečných drahokamech

Drahokamy v jazyce Ruby hrají při budování GitLabu nedílnou roli, podle Sida se do něj načítá více než tisíc neuniverzálních drahokamů. Framework Ruby on Rails označuje za „velmi názorově vyhraněný“ a myslí si, že je to silné prostředí, ve kterém lze vytvořit komplexní aplikaci, jako je GitLab.

„Je kolem něj skvělý ekosystém s drahokamy, které mohou vytvářet předpoklady o tom, jak věci děláte, a v tomto ohledu je podle mě ekosystém Ruby on Rails stále bezkonkurenční,“ říká. „Když se podíváte na náš Gemfile, naznačí vám, jak velká je věž závislostí, na kterých můžeme stavět. Ruby on Rails má úžasná ramena, na kterých může stát, a vývoj GitLabu v jakémkoli jiném frameworku by byl mnohem pomalejší.“

Překonávání výzev

Nové příspěvky na blogu přímo do vaší schránky
Přihlaste se k odběru našeho dvouměsíčního newsletteru

Díky, jste
přihlášeni!
GitLab přichází do vaší schránky

To vše neznamená, že při budování GitLabu s Ruby on Rails nebyly žádné problémy. Problémem byl výkon, který se naši vývojáři snažili zlepšit mnoha způsoby, včetně přepsání kódu v jazyce Go a použití frameworku Vue. Ten se používá k přepisu často navštěvovaných stránek, jako jsou issues a požadavky na sloučení, takže se načítají rychleji, což zlepšuje uživatelský komfort.

Go se používá k řešení dalších problémů ovlivňujících dobu načítání a ke snížení využití paměti.

„Ruby bylo optimalizováno pro vývojáře, ne pro provoz v produkčním prostředí,“ říká Sid. „Věci, které jsou často zasahovány a musí být velmi výkonné nebo které například musí velmi dlouho čekat na systémové IO, přepisujeme do Go… Stále se snažíme, aby GitLab využíval méně paměti. Budeme tedy muset povolit multithreading. Když jsme GitLab vyvíjeli, nebylo to v ekosystému Ruby on Rails běžné. Nyní je to běžnější, ale protože nyní máme tolik kódu a tolik závislostí, bude to pro nás delší cesta, než se k tomu dostaneme. To by mělo pomoci; nebude to bleskově rychlé, ale alespoň to bude spotřebovávat méně paměti.“

Přidání jazyka Go do sady nástrojů GitLab vedlo k vytvoření samostatné služby Gitaly, která zpracovává všechny požadavky na Git.

Vztah k poslání GitLabu

Organizovaný, strukturovaný styl rámce Ruby on Rails odpovídá našemu hlavnímu poslání. Protože je systém Rails zjednodušený, může do GitLabu naskočit a zapojit se kdokoli, což Sida od začátku obzvlášť lákalo.

„Naším posláním je, aby mohl přispívat každý,“ vysvětluje. „Protože Ruby on Rails má opravdu vyhraněný názor na to, které části kam patří, je pro nové vývojáře mnohem snazší dostat se do kódové základny, protože víte, kam lidé věci umístili. Například v každé kuchyni, do které vstoupíte, nikdy nevíte, kde jsou umístěny nože a talíře. Ale v Ruby on Rails vstoupíte do kuchyně a vždy je to na stejném místě, a toho se chceme držet.

V každé kuchyni, do které vstoupíte, nikdy nevíte, kde jsou umístěny nože a talíře. Ale s Ruby on Rails vstoupíte do kuchyně a je to vždy na stejném místě, a toho se chceme držet.“

„Když jsem projekt otevřel a poprvé ho viděl rok poté, co ho Dmitrij spustil, velmi mě to povzbudilo. Otevřel jsem ho a je to idiomatický Rails. Dodržel všechny zásady. Nesnažil se experimentovat s nějakým módním výstřelkem, který by ho zajímal. Udělal z toho produkční aplikaci. Dmitrij všechny příspěvky pečlivě prověřoval, aby se držely těchto konvencí, a tak je tomu dodnes. Myslím, že máme velmi pěknou kódovou základnu, která umožňuje ostatním lidem na ní stavět. Jednou z našich dílčích hodnot je nudné řešení: nedělat nic efektního. To proto, aby na něm mohli stavět ostatní. Myslím, že se nám to daří opravdu dobře … a jsme opravdu vděční, že Ruby je pro nás tak stabilním ekosystémem, na kterém můžeme stavět.“

Obrázek na obálce: Elvir K na Unsplash