Путівник галактикою Ruby
Вітаю! Мене звати Володимир Воробйов, я CEO компанії RubyGarage і автор щомісячного Ruby/Rails дайджесту на DOU. Цією статтею хочу розпочати серію матеріалів про Ruby.
Я сам колись займався програмуванням і обрав цю мову. І, як можете судити з назви компанії, команда RubyGarage у своїй роботі здебільшого спирається на технології Ruby. Але чому ми й сотні команд у всьому світі обрали саме Ruby? А також які можливості пропонують Ruby-розробникам українські компанії, де вивчати Ruby й Rails початківцям та шукати натхнення зрілим і досвідченим розробникам і, зрештою, які roadmaps й прогнози розвитку Ruby — про все це поговоримо в статті.
Ruby
Ruby у світі
Перша стабільна версія мови Ruby з’явилася понад 20 років тому в
У дослідженні HackerRank 2018 року, у якому взяли участь близько 40 тис. розробників, ідеться про технології, яким розробники віддають перевагу та які планують вивчати в майбутньому. За результатами дослідження, Ruby посідає
Джерело: HackerRank
Актуальність Ruby підтверджують і результати інших опитувань: згідно з рейтингом RedMonk та індексом TIOBE, Ruby входить до 15 найпопулярніших мов програмування. Також про неослабний інтерес до Ruby з боку ІТ-спільноти свідчить і статистика Stack Overflow, у рейтингу якої мова Ruby посіла
Джерело: GitHub, RedMonk, TIOBE
Джерело: Stack Overflow
Постійне оновлення, поповнення та поліпшення екосистеми Ruby — це друга з ключових причин, чому Ruby понад 20 років надійно займає свою нішу й цікавить розробників. Яка ж перша причина? Усе просто: Ruby створено задля потреб людей, а не машин, а точніше, програмістом — для потреб програмістів.
Світ Ruby
Юкіхіро «Matz» Мацумото, автор і головний розробник мови програмування Ruby, вклав у свою розробку натхненний меседж: «Сподіваюся, що Ruby допоможе кожному розробникові бути проактивним, насолоджуватися процесом програмування та почуватися щасливим. Це і є першочергова мета мови Ruby».
У
Andy Croll, доповідач на конференції GORUCO у Нью-Йорку, червень 2018
З яких саме причин розробники так люблять Ruby? Ця технологія спирається на сильну культуру, сповнену пристрасті до улюбленого заняття, яка також надає великого значення написанню якісного й чистого коду, швидкості процесу й результату розроблення та наслідуванню кращих практик програмування.
Нижче — детальніше про ключові принципи культури, на які спирається світова Ruby-спільнота.
Принцип 1: Ruby створено для розробників
Один із чинників, що зумовлюють зручність роботи з Ruby, полягає в синтаксисі. Код цієї мови інтуїтивний, тож потрібно значно менше зусиль для його написання, розуміння й подальшої підтримки.
Деякі розробники називають Ruby навіть не мовою програмування, а розмовою, що ведеться за допомогою коду. Певною мірою Ruby — це мова, якою ми розмірковуємо.
Розгляньмо приклад.
Прочитайте вголос ось такий вираз:
5.times { print "Odelay!" }
В англійській мові пунктуація в реченнях (крапка в кінці, знак оклику, дужки) свідчить про паузу. Пунктуація додає значення словам, допомагає зрозуміти, про що саме автор намагається сказати в конкретному реченні. Тож, якщо прочитати наведений вище вираз саме як речення, вийде: «Five times print „Odelay!“» (дослівно: «П’ять разів надрукуй „Odelay!“»).
Цей вираз означає буквально те, що виконує ця невеличка Ruby-програма: на моніторі п’ять разів буде надруковано вигук «Odelay!» змішаною іспанською мовою.
Ще один приклад. Прочитайте також цей вираз:
exit unless "restaurant".include? "Aura"
За допомогою цієї програми ми перевіряємо реальність фактів. Програма здійснює команду exit (завершиться), якщо тільки слово «restaurant» не міститить в собі іншого слова «aura». Знову, якщо прочитати вираз як звичайне речення, вийде: «Exit unless the word „restaurant“ includes the word „aura“» (дослівно: «Заверши програму, якщо тільки слово „restaurant“ не містить у собі слова „aura“»).
Ruby дозволяє писати чистий код з мінімальною кількістю синтаксичного й семантичного «шуму», пропонує безліч бібліотек для реалізації різноманітного функціоналу та підтримує такі аспекти, як об’єктно-орієнтоване програмування, динамічна типізація та метапрограмування. Чому це важливо?
Об’єктно-орієнтоване програмування
Ruby є об’єктно-орієнтованою мовою. Більшість сутностей у Ruby, включно з логічними, числовими й рядковими літералами та деякими елементарними сутностями, можна відтворити як об’єкти й методи. Такий підхід дозволяє легко проектувати складні системи та масштабувати їх без дублювання коду.
Динамічна типізація
Підтримка динамічної типізації (за якої перевірка типів здійснюється під час виконання програми, а не під час компілювання) дозволяє Ruby-розробникам значно спростити написання невеликих скриптів і макросів, порівняно, скажімо, зі статичною типізацією, повторно використовувати змінні, розробляти гнучкіші й легші фреймворки та в цілому зручніше працювати над створенням застосунків.
Метапрограмування
Метапрограмування дозволяє створювати програмний код і бібліотеки, які інші розробники можуть багаторазово використовувати та легко налаштовувати згідно з потребами й завданнями, які вони мають вирішити.
Удаючись до метапрограмування, розробники можуть створювати DSL — Domain-Specific Languages для вирішення складних завдань у межах певних галузей. DSL — це додаткові прості мови, які дозволяють фахівцям вищого рівня (скажімо, системним адміністраторам) працювати з ПЗ та вносити в нього зміни.
Інструменти, як-от Chef і Puppet, пропонують просту мову для конфігурування серверів. Це, власне, і є приклад DSL — мови, створеної за допомогою Ruby задля того, щоб спрощувати життя DevOps-фахівцям.
Розгляньмо елегантність DSL на прикладі самого коду Ruby, зокрема на виведенні CSV-даних:
csv_string = CsvShaper.encode do |csv| csv.headers :name, :age, :gender, :pet_names csv.rows @users do |csv, user| csv.cells :name, :age, :gender if user.pets.any? csv.cell :pet_names end end end
Принцип 2: Якість коду — понад усе
Якість коду значною мірою залежить від дотримання єдиних стандартів і кращих практик. В екосистемі Ruby норми й стандарти написання та структурування коду затверджено світовою спільнотою розробників і зафіксовано в Ruby style guide і, відповідно, Rails style guide.
Прекрасний приклад ефективної стандартизації в Ruby — механізм створення бібліотек, або інструментів, які називають гемами (gems). Усі бібліотеки Ruby мають однакову структуру і зберігаються в єдиному репозиторії — Ruby Gems. Це зумовлює швидкість одержання потрібних бібліотек і можливість легко орієнтуватись у нових інструментах.
Екосистема Ruby пропонує повноцінний toolkit для тестування: Ruby-спільнота створила безліч фреймворків та інструментів, зокрема для здійснення автотестування. Серед них фреймворки (RSpec, Capybara та Cucumber) і бібліотеки (Minitest), що підтримують підхід BDD та є зручними для написання різних типів тестів; численні інструменти для створення тестових даних (Factory_bot, WebMock); веб-драйвери, що дозволяють писати й здійснювати автотестування (Selenium WebDriver, Watir) та інші інструменти (детальніше — далі в цій статті в розділі «Інструменти»).
Крім того, Ruby приділяє багато уваги перевірці, наскільки код відповідає нормам і стандартам. Наприклад, в екосистемі цієї мови чимало інструментів, що дозволяють здійснювати автоматичне code review, виявляти code smells та потенційно вразливі частини коду (RuboCop, SimpleCov, RubyCritic, Rails_best_practices), а також дотримуватись якості завдяки підходу Continuous Integration (Travis CI).
Приділяючи значну увагу якості, і розробники, і (що не менш важливо) бізнес та product owners одержують чимало переваг. Ось лише деякі з них:
- Програмування без багів: чистий код забезпечує рівномірну та стабільну продуктивність і, як наслідок, зумовлює чудовий користувацький досвід.
- Простота в підтримці: завдяки інтуїтивності Ruby-розробники легко розуміють, як саме працюють застосунки, і швидко орієнтуються в новому для них коді й проекті.
- Можливість швидко додавати новий функціонал: наявність чітких єдиних стандартів щодо імплементації змін дозволяє дотримуватись високої якості коду.
- Можливість масштабувати процес розробки й кількість людей у команді: стандарти, яких дотримується спільнота Ruby, поширюються й на організаційні процеси, зокрема зумовлюють швидкий і зрозумілий процес онбордингу нових розробників та гнучкість у масштабуванні кількості людей у команді залежно від обсягу роботи.
- Простий дебагінг: чудовий toolkit для написання автотестів (зокрема інструменти Pry, Pry-byebug, awesome_print), практика code review.
Принцип 3: Жива культура Ruby
Активна спільнота Ruby збудувала навколо цієї технології унікальну культуру, яка сповнена безпосередності й водночас уважності до якості програмних продуктів і яка також заохочує розробників ділитися досвідом та постійно вивчати нове.
Розробники Ruby переконані, що успіх полягає в об’єднанні спільних зусиль, тож вони організовують численні конференції, події, зустрічі й вебінари та беруть у них участь. До того ж у кожній країні є свої регулярні заходи й конференції, що відбуваються за підтримки локальних спільнот.
Упевнений, що вам знайомі найпопулярніші з щорічних Ruby-конференцій:
- RubyKaigi — головна конференція в Японії, батьківщині Ruby;
- RubyConf — конференція, що об’єднує видатних ентузіастів з усього Ruby-світу;
- EuRuKo — щорічна європейська конференція, де учасники можуть дізнатися про останні оновлення у світі Ruby.
Культура Ruby є всеосяжною й відкритою для кожного, хто бажає стати частиною спільноти. Наприклад, чудовий проект Rails Girls просуває цінності Ruby серед жінок та заохочує їх вивчати цю технологію і створювати свої перші проекти.
Для таких розробників та ентузіастів, як ми, Ruby — не лише інструмент, це радше стиль життя. Можу сказати з власного досвіду та з огляду на знайомих мені досвідчених програмістів: розробники, які врешті приходять у Ruby, — це спеціалісти, які шукають досконалого способу розробки, високої культури й стандартів у роботі та інноваційності.
Тож не дивно, що Ruby-розробники настільки віддані цій мові. Попри плітки про так звану смерть Ruby, ця мова була, є і, щиро сподіваюся, залишиться однією з провідних мов програмування у світі.
Принцип 4: Постійна підтримка з боку спільноти
Спільнота Ruby — одна з головних причин успіху й популярності цієї мови. Завдяки спільноті новачки дістають допомогу в опануванні мови Ruby, адже вона пропонує безліч курсів, книжок і дискусійних майданчиків (про деякі з них згадаємо наприкінці цієї статті), а також сприяє постійному розвитку Ruby, рухові вперед і виникненню нових фреймворків, інструментів та бібліотек, а відтак — створенню нових переваг для розробників і, що найважливіше, для користувачів платформ і застосунків.
Чудовий приклад — Ruby on Rails, найпопулярніший і найвідоміший фреймворк Ruby, за допомогою якого з’явилися й досягли успіху тисячі проектів. Ruby on Rails спирається на угоду писати менше коду й уникати повторів. Цей фреймворк існує у форматі open source — відкритого й безкоштовного ПЗ для використання навіть з комерційною метою.
Спільнота Ruby створила чимало корисних open-source рішень, за допомогою яких розробники легко будують з нуля повнофункціональні застосунки, що відповідають вимогам безпеки та є ефективними з погляду витрат з боку клієнтів і з погляду розробки — у контексті програмування.
Rails — не єдиний фреймворк Ruby, але він найпопулярніший, а отже, вартий окремої уваги.
Ruby on Rails
Ruby on Rails несправедливо називають застарілим і повільним фреймворком. Ясна річ, я не погоджуюся з такою думкою і маю відповідні аргументи. Оновлені версії Rails, зокрема з
Продукти та платформи на Rails
Згідно зі статистикою Built With, існує понад 1 млн веб-платформ, побудованих на Ruby on Rails. Напевно, вам траплялися в мережі статті про найвідоміші з них:
Basecamp | Інструмент для управління й командної роботи над проектами, на базі якого виник фреймворк Ruby on Rails. |
GitHub | Знайомий більшості читачів ресурс, що об’єднує розробників, які діляться кодом зі знайомими, колегами й цілковитими незнайомцями. |
Airbnb | Платформа для пошуку й короткострокової оренди житла в усьому світі (об’єднує понад 190 країн). |
Shopify | Ecommerce платформа, що об’єднує понад 300 тис. ритейлерів у 100 країнах світу, які продають свої товари онлайн та звичайних магазинах. |
Codecademy | Ресурс, що пропонує вивчення програмування. |
SoundCloud | Платформа, що об’єднує тих, хто створює різноманітну музику й перебуває в пошуку нових треків та артистів. |
Dribbble | Величезна спільнота дизайнерів, де вони розміщують свої проекти й показують процес роботи над ними. |
Сервіс мікроблогінгу та новин, яким щомісяця користується понад 336 млн користувачів. | |
Kickstarter | Найбільша у світі платформа для збору коштів на реалізацію творчих проектів. |
Netflix | Медіаресурс із понад 125 млн підписників. |
А ось яку саме цінність, на думку засновників цих бізнесів, вносить у їхні проекти Ruby on Rails:
Shopify
GitHub
Airbnb
SoundCloud
Rails — чудове рішення для стартапів
Більшість наведених вище продуктів і платформ починалася як стартапи. Зараз це зрілі великі бізнеси. Ruby on Rails цілком справедливо називають фреймворком, створеним саме для стартапів: він гнучкий і пропонує бізнесу широкі можливості:
- Швидка розробка. Ruby on Rails має безліч готових плагінів і модулів, використання яких прискорює процес розробки приблизно до
30-40%, з мого досвіду. Подібно до Ruby, у Rails також існує угода щодо стандартів програмування: код має залишатися структурованим і зрозумілим для читання та підтримки. Архітектурні шаблони, зокрема MVC (Model—view—controller), — ще один чинник, що прискорює розробку. Щоб продукувати більш зрозумілий та готовий до кращого масштабування код, у Rails є можливість створювати додаткові шари абстракцій. - Економічна доступність. Швидший процес розробки дає змогу зменшити відповідні витрати. Але є й інші чинники, що сприяють заощадженню. Rails — відкритий фреймворк, за який не потрібно платити. Крім того, спільнота Rails пропонує приголомшливу колекцію вільних для використання гемів (бібліотек, що містять вирішення для будь-якої потреби — від авторизації користувача до плати за послуги й товари). І, нарешті, завдяки кращим практикам програмування, на які спирається Rails, розробники продукують код найвищої якості, а отже, витрачають менше часу на його тестування і, зрештою, на загальний процес розробки.
- Безкомпромісна якість. Ruby on Rails приділяє значну увагу автотестуванню, а також спирається на підходи, за допомогою яких досягають якості, консистентності та структурованості коду, — це KISS (коротше і простіше), DRY (не повторюй себе) та інші патерни.
- Масштабування. У Rails чудовий потенціал, що дозволяє закласти надійний фундамент в архітектуру продукту для його подальшого масштабування. Зрозуміло, що масштабування не є привілеєм якогось одного окремого фреймворку, утім модульність Ruby on Rails додає йому балів у цьому контексті.
- Підтримка. Поки що Rails — найпопулярніший фреймворк екосистеми Ruby. Наразі кількість контриб’юторів, що зробили свій внесок у розвиток і поліпшення фреймворку Rails, сягнула 5 тисяч.
Як щодо Rails для Enterprise?
Ruby on Rails виник як фреймворк саме для стартапів. Але з часом команда Rails осягнула ключові бізнес-потреби, притаманні також і великим компаніям, та зосередилася на них:
- Надійність. Щонайменше впродовж останнього десятиріччя Rails довів свою надійність і продемонстрував усі можливості для послідовного масштабування будь-якого продукту. Тож цілком справедливо визначати цей фреймворк як надійну основу для більшості найуспішніших платформ різного масштабу — від стартапів і зростаючих компаній до великих enterprise-підприємств.
- Продуктивність. Рівень продуктивності (зокрема швидкість, ефективність і кількість ресурсів ПЗ, що витрачаються) Ruby on Rails для enterprise — цілком достатній. Насправді це не велика новина: Rails демонструє досить високу продуктивність ще з часів 1.9 версії Ruby та Rails 3 і продовжує розвиватися й пропонувати щодалі вищі показники.
- Інтеграції. Завдяки зусиллям Rails-спільноти й активності IT-лідерів (зокрема Apple та Microsoft) інтеграція різноманітного enterprise ПЗ на базі Ruby/Rails відбувається набагато швидше й ефективніше, ніж, наприклад,
5-7 років тому. Крім того, Ruby може інтегруватись й ефективно співіснувати з Java, .NET та іншими платформами. - Digital transformation. Rails цілком придатний для розв’язання актуального нині питання диджиталізації enterprise-компаній. Він пропонує готові «рішення з коробки» буквально для будь-якої потреби великого бізнесу: від автоматизації операційних процесів до поліпшення обробки користувацьких замовлень і налагодження процесів керування працівниками, фінансовими ресурсами й усіма типами даних, які збирає та обробляє компанія.
За допомогою Ruby/Rails можна швидко «зібрати» й кастомізувати безліч вирішень:
- ERP-системи — Compass;
- CRM-системи — Fat Free CRM;
- управління проектами — Redmine, GitLab, OpenProject, Hours, Travis CI;
- дискусійна платформа — Discourse;
- керування фінансами — Open Source Billing;
- платформи електронної комерції — Spree, Solidus, Sharetribe;
- керування контентом — Refinery CMS, Locomotive CMS;
- і ще безліч готових open source Rails-рішень та Ruby-гемів.
ТОП-десятка компаній Ruby on Rails
За версією Clutch ТОП-десятка (з майже 200) IT-компаній, які розробляють проекти на Ruby on Rails, виглядає так:
№ | Назва компанії | Головний офіс, країна | Частка проектів на Rails від загальної кількості |
1 | MLSDev | Україна | 70% |
2 | Raizlabs | США | 50% |
3 | Monterail | Польща | 80% |
4 | Table XI | США | 100% |
5 | Railsware | Польща | 100% |
6 | Infinum | США | 60% |
7 | RubyGarage | Україна | 75% |
8 | Railwaymen | Польща | 60% |
9 | Digiryte | США | 80% |
10 | Sloboda Studio | Україна | 90% |
Слід зауважити, що, на відміну від класичних аутсорсерів, у Ruby/Rails-компаніях переважає культура «бутиковості» (boutique). Вони зосереджуються на вирішенні конкретних завдань замовників і працюють з продуктом клієнта як з власним. Культура Ruby/Rails-компаній — від розроблення до технічного вузькоспеціалізованого консалтингу — ґрунтується на сервісно-орієнтованому підході.
Ruby/Rails і тенденції українського IT-ринку
Світова статистика, яку я наводив на початку статті й у розділі Rails, свідчить про те, що інтерес міжнародної IT-спільноти до Ruby/Rails не згасає й ці технології надійно займають свою нішу.
Звісно, на кожному ринку (Нідерланди, Велика Британія, Австралія тощо) попит на певні технології різний. Утім, наведу тенденції ринку США, які здаються мені цікавими. За версією LinkedIn, кількість пропозицій для Ruby/Rails-розробників у США — понад 27 тис. вакансій. Для порівняння: Python — більш як 70 тис. вакансій, PHP — майже 55 тис., Scala — (до речі, попри підвищену цікавість з боку розробників, якщо згадаєте першу діаграму) — лише близько 9 тисяч.
Які висновки треба зробити на основі цих даних? Високий попит на Ruby/Rails у США зумовлюється тим, що там саме Rails — ключовий фреймворк для створення стартапів. Гадаю, із часом тенденції США щодо потрібності Ruby/Rails серйозно вплинуть на інші локальні labor markets, зокрема на український ринок IT.
Що пропонують Ruby/Rails розробникам українські IT-компанії
Загальна кількість Ruby/Rails вакансій в Україні в липні 2018 року сягає близько 90 (85 та 83 за даними LinkedIn і DOU відповідно). Це значно менше, ніж попит на Python (331 — LinkedIn, 158 — DOU) та PHP (456 — LinkedIn, 371 — DOU).
Ситуація з вакансіями в ключових містах:
Джерело: DOU
Відносно невеликий попит на Ruby/Rails-фахівців частково зумовлюється саме тією «бутиковістю», про яку я згадував вище. Ruby/Rails-розробники значно менше працюють з legacy-кодом та значно більше — із цікавими проектами й складними завданнями. Крім того, професійний розвиток Ruby/Rails працює both ways: перейти на Ruby з іншої мови програмування відносно легко, як і навпаки — вивчення нових додаткових мов і технологій на базі та культурі Ruby дає переваги та дозволяє «перестрибнути» сходинку junior у новій технології.
Рівень доходу Ruby/Rails-розробника
Цікаві тенденції спостерігаються і щодо фінансових показників. Згідно з результатами нещодавнього (червень — липень 2018 р.) опитування DOU, рівень доходу Ruby/Rails-розробників вищий за дохід PHP- та Python-програмістів.
Досягнувши рівня Middle, Ruby/Rails-розробник має чудові перспективи професійного й фінансового зростання.
Джерело: DOU
Інструменти
У цій статті я чимало згадував про високу культуру програмування Ruby/Rails і маю декілька аргументів на користь цього твердження. Хочу навести стислий огляд ключових інструментів екосистеми Ruby.
Наразі в арсеналі Ruby-розробників понад 140К гемів, які полегшують програмування і допомагають створювати продукти. Нижче — деякі з цих гемів, які найчастіше використовуються в роботі:
- Ruby on Rails — ідеальний фреймворк для стартапів;
- Hanami — новий веб-фреймворк, який фокусується на enterprise-компаніях;
- Sinatra — сервісно-орієнтований фреймворк.
Style Guides
Тестування та якість
Фреймворки:
- RSpec — BDD-фреймворк із простим синтаксисом, що дозволяє писати тести «людською» мовою;
- Capybara — інструмент для написання приймальних тестів;
- Cucumber — інструмент, який підтримує BDD-підхід і допомагає узгодити всі специфікації, тести й проектну документацію;
- Minitest — бібліотека для написання unit-тестів, простіший аналог RSpec;
- Shoulda-matchers — набір додаткових matcher-методів для RSpec.
Створення тестових даних:
- Factory_bot — бібліотека для створення тестових об’єктів, потрібних для тестів;
- Faker — бібліотека для створення тестових даних;
- WebMock — бібліотека, що дозволяє створювати й використовувати відповіді на HTTP-запити для прискорення виконання тестів.
Веб-драйвери:
- Selenium WebDriver — інструмент для написання автотестів, які наслідують принцип взаємодії з веб-сайтом і поведінку реальних користувачів;
- Poltergeist — драйвер до Capybara, що дозволяє проводити тести на базі браузера WebKit;
- Watir — інструмент для здійснення автотестування.
Аналіз коду та відповідність нормам
- RuboCop — відстежує порушення синтаксису та стежить за відповідністю до code style;
- Simplecov — відображає відсоток покриття коду тестами;
- RubyCritic — допомагає знайти проблемні частини в коді, різноманітні code smells;
- Rails_best_practices — інструмент перевірки відповідності коду Rails нормам;
- Brakeman — інструмент, який сканує код і визначає потенційно вразливі місця;
- bundler-audit — дозволяє перевірити наявність вразливостей у бібліотеках, які використовуються в застосунку.
Зневаджування
- Pry — інтерактивна консоль з додатковою функціональністю;
- Pry-byebug — інструмент для дебагінгу коду;
- awesome-print — бібліотека, яка дає змогу поліпшувати виведення різноманітної інформації на екран: вкладені масиви, хеші тощо.
Автентифікація та авторизація
- Warden — бібліотека для реалізації функціональності автентифікації;
- Devise — бібліотека для побудови автентифікації будь-якої складності;
- JWT — впровадження стандарту JSON Web Token у Ruby;
- Doorkeeper — OAuth2-провайдер для Rails;
- OAuth2 — бібліотека для роботи з протоколом OAuth 2.0;
- CanCanCan — використовується для реалізації функціональності авторизації;
- Pundit — ще одна альтернатива, подібна до CanCanCan, але яка витрачає менше ресурсів та пам’ яті;
- Rolify — корисна бібліотека, яка дозволяє реалізувати функціональність ролей користувачів.
API
- ActiveModel::Serializers — інструмент для генерування JSON у Rails-застосунку;
- GraphQL-Ruby — бібліотека для роботи зі специфікацією GraphQL;
- Grape — мікрофреймворк, що дає змогу створити REST-подібні API;
- JSONAPI::Resources — бібліотека для роботи з форматом JSON API;
- Apipie — інструмент для ведення документації API;
- Swagger — більш розвинений інструмент для створення документації API.
Організація коду та абстракція даних
- Dry-rb — набір бібліотек для програмування на Ruby у функціональному стилі;
- Trailblazer — фреймворк, який дозволяє краще структурувати архітектуру Rails-застосунку;
- Waterfall — дозволяє писати код у Railway-підході;
- Interactor — дозволяє структурувати бізнес-логіку.
Assets
- Sass і Less — одні з найпопулярніших розширень стандартного CSS;
- Asset_sync — дозволяє синхронізувати активи із сервісом Amazon S3;
- Autoprefixer — в автоматичному режимі додає CSS-властивості для забезпечення кращої крос-браузерності.
Розгортання ПЗ
Веб-сервери:
DevOps:
- Chef або Puppet — інструменти для оркестрації інфраструктури програмного продукту;
- Capistrano — бібліотека для реалізації процесу розгортання;
- Vagrant — дозволяє керувати віртуальними машинами;
- Backup — дає змогу створювати резервні копії бази даних.
Continuous integration:
- Travis CI — сервіс для автоматичного запуску та моніторингу різноманітних тестів.
Керування пакетами та середовищами
- RVM — утиліта для керування версіями бібліотек Ruby;
- RubyGems — репозиторій бібліотек Ruby;
- Bundler — менеджер залежностей бібліотек.
Data Persistence
Об’єктно-реляційне відображення (ORM):
- ActiveRecord — реалізація об’єктно-реляційного відображення (object-relational mapping) у Rails;
- Sequel — простий, гнучкий і потужний набір інструментів для реалізації ORM, має велику кількість плагінів;
- ROM-rb — ще одна реалізація ORM.
Клієнти для баз даних: MongoDB, Redis, Elasticsearch, DynamoDB:
- Mongoid — реалізація об’єктно-документного відображення (object-document mapping) в Ruby з використанням бази даних MongoDB;
- Redis-rb — бібліотека для роботи з базою даних Redis;
- Redis Store — бібліотека, яка дозволяє зберігати різноманітну інформацію в базі даних Redis, як-от: Cache, I18n, Session, HTTP Cache тощо;
- Dynamoid — реалізація ORM для роботи з сервісом Amazon DynamoDB.
Створення HTTP-клієнта
- HTTParty — дозволяє працювати з HTTP-запитами в зручнішому вигляді;
- Faraday — бібліотека, яка надає єдиний інтерфейс для роботи з різноманітними адаптерами, наприклад: NET::HTTP;
- GraphQL-client — бібліотека для роботи із запитами GraphQL.
Створення інтерфейсів командного рядка
- Rake — бібліотека, що дозволяє створювати різноманітні утиліти подібно до утиліти Make;
- Thor — набір інструментів, який дає змогу будувати різноманітні застосунки для роботи в консолі;
- GLI — парсер аргументів консольних команд.
Обробка зображень і відео
- MiniMagick або RMagick — «обгортка» до консольних утиліт ImageMagick або Graphics Magick;
- Streamio FFMPEG — «обгортка» до консольної утиліти FFMPEG, яка дає змогу виконувати різноманітні маніпуляції з відео (кропінг, процесинг тощо).
Оброблення черг даних і фонових завдань
- Sidekiq або Resque — інструмент для реалізації відкладених завдань;
- Delayed_job — ще один інструмент для оброблення фонових завдань, який зберігає інформацію про черги в базі даних; цей інструмент витягнуто з Shopify;
- Daemons — дає змогу запускати Ruby-застосунки як системні сервіси та керувати ними;
- Foreman — ще один інструмент для запуску Ruby-застосунків, які описуються у Procfile;
- Whenever — дає можливість керувати cron-завданнями.
Пошук
- Elasticsearch-ruby — бібліотека для інтеграції та роботи з базою даних Elasticsearch;
- Mongoid Search — бібліотека для інтеграції та роботи з базою даних MongoDB;
- Pg_search — бібліотека, яка дозволяє реалізувати функціональність повнотекстового пошуку.
Адмін-інтерфейс, керування контентом, блогінг, Wiki
- ActiveAdmin або RailsAdmin — фреймворк, який дає змогу створювати адмінпанелі дуже зручно й швидко;
- RefineryCMS — розширення фреймворку Ruby on Rails, яке реалізує CMS;
- Discourse — платформа для реалізації різноманітних спільнот, форумів тощо;
- Publify — CMS-платформа;
- Gollum — бібліотека для реалізації wiki-системи, яка ґрунтується на утиліті Git;
- Jekyll або Middleman — платформи для реалізації статичних сайтів і блогів.
Мобільна розробка
- RubyMotion — набір бібліотек для крос-платформного розроблення (iOS, OS X та Android) на Ruby;
- Ruboto — платформа для розроблення повноцінних Android-застосунків на базі мови й бібліотек Ruby;
- Ruby Push Notifications — інструмент для реалізації push-повідомлень у застосунках iOS, Android і Windows Phone;
- Rpush — ще один сервіс для реалізації push-повідомлень.
Робототехніка
- Artoo — Ruby-фреймворк для програмування в галузі робототехніки, обчислювальної техніки та Інтернету речей.
Машинне навчання
- Machine-learning-with-ruby — список бібліотек, фреймворків, методів, алгоритмів, а також статей, презентацій та інших ресурсів для роботи в галузі машинного навчання Ruby.
Штучний інтелект (AI)
- ai4r — проект для дослідників AI за допомогою мови Ruby: алгоритми для різних призначень та індустрій.
Список вийшов чималенький, утім він ще далеко не повний. Більше інструментів — у колекції Awesome Ruby та в статті RubyGarage, присвяченій гемам.
Обмеження Ruby
У Ruby чимало можливостей для вирішення різноманітних завдань. Втім, як і будь-яка інша мова програмування, Ruby не є ідеальною.
Ось декілька параметрів, за якими Ruby поступається іншим мовам:
- Швидкість виконання. Попри високу швидкість розроблення, Ruby демонструє не найвищу швидкість виконання. З одного боку, Ruby виконує чимало операцій для зручності розробника, зокрема здійснює керування пам’яттю для динамічної типізації. З іншого — звісно, обсяг таких операцій впливає на швидкість виконання. Цей критерій не є найпроблемнішим, утім міг би бути кращим.
- Багатопотоковість. Ruby підтримує багатопотоковість, але цей алгоритм реалізовано не найкращим чином, що може призводити до проблем з продуктивністю. Крім того, алгоритм багатопотоковості Ruby дещо непередбачуваний: він може перемикатися від одного потоку до іншого у будь-який момент, який складно передбачити чи контролювати. Це впливає на результат обробки даних та внесення змін і в цілому на швидкість усього процесу. Наразі розробники Ruby-спільноти працюють над вирішенням цієї проблеми.
- Домінування Rails. Ще одне обмеження Ruby стосується його фреймворків. Багато було сказано про Rails, це чудове рішення. Утім, його популярність послаблює та уповільнює розвиток інших фреймворк — Sinatra та Hanami.
Де вивчати Ruby/Rails
Початківцю
Відносно нещодавно на DOU було опубліковано статті Ruby для початківців та Поради сеньйорів: як прокачати знання junior Ruby. У цих статтях є чимало посилань на корисні ресурси для навчання. Трохи доповню цей список онлайн- та офлайн-курсами й стажуваннями:
Онлайн-ресурси
Ruby:
Rails:
Курси та стажування в компаніях
Курси / Навчання | Місто |
* RubyGarage | Дніпро |
#pivorak | Львів |
Nix Solutions | Харків |
EPAM | Львів |
SoftServe | Івано-Франківськ |
Masters Academy | Черкаси |
* RubyForce | Львів |
Стажування / Інтернатура | Місто |
Provectus | Одеса |
* InterLink | Львів |
Datarocks | online |
Camp | Місто |
* Coax, Ruby Boot Camp | Івано-Франківськ |
* офлайн-курси та стажування, на які ще триває прийом заявок
Добірка матеріалів для досвідчених Ruby-розробників
Найцікавіші матеріали з усього світу Ruby та Rails, що їх відбирає команда RubyGarage, публікуємо для вас у щомісячному дайджесті (свіжий випуск тут), утім окремо пораджу декілька ресурсів і посилань на Ruby/Rails opinion leaders, за якими стежу сам:
Корисні email-розсилки
Telegram-канали
- Gaar4ica — канал з щоденними оновленнями про Ruby;
- proRuby — чат для Ruby та Rails-розробників;
- @evilmartians — неофіційний канал Evil Martians, де йдеться про стартапи, веб-розроблення, онлайн-бізнес, бекенд (у тому числі про Ruby та Rails), фронтенд (JavaScript) і мобільну розробку (#iOS), а також DevOps і Data Science.
Експерти
- David Heinemeier Hansson (DHH) — засновник Basecamp та автор Ruby on Rails.
- Robert C. Martin — автор принципів SOLID, провідний доповідач Ruby/Rails-конференцій, культовий розробник.
- Aaron Patterson — відомий розробник, частий доповідач на конференціях, регулярно публікує оновлення у власному Ruby-блозі.
- Sandi Metz — «ветеран» розробки, викладачка, доповідачка на конференціях, авторка Practical Object-Oriented Design in Ruby, 2013 року одержала нагороду Ruby Hero.
- Avdi Grimm — розробник, ведучий вебкасту Ruby Tapas і співведучий подкасту Ruby Rogues, автор Objects on Rails, володар нагороди Ruby Hero 2016.
- Sarah Mei — розробниця Ruby, архітекторка в Salesforce, співзасновниця RailsBridge і директорка Ruby Central, 2015 року одержала нагороду Ruby Hero.
- Jason Fried — співзасновник Basecamp, співавтор «Rework: Ця книжка змінить ваш погляд на бізнес» і «Remote: Офіс не обов’язковий».
- Michael Hartl — підприємець, викладач, має репутацію «суперлиходія», автор @RailsTutorial, засновник @LearnEnough та @TauDay.
- Sam Ruby — автор Agile Web Development with Rails 5.
- David A. Black — автор Well-Grounded Rubyist.
Подкасти й скринкасти
Roadmaps: чого чекати найближчим часом у 2018-му
- Ruby: Спільнота Ruby працює над оновленою версією 2.6, реліз якої заплановано на кінець грудня 2018 року.
- Rails: У квітні 2018 р. відбувся реліз версії Rails 5.2.0, у якій з’явився додатковий функціонал (Active storage, Built-in Redis cache store) і декілька поліпшень (підтримка pg 1.0, recycle cache keys, freeze_time тощо). Наразі команда працює над версією 6.0. Тимчасом доповідачі на світових конференціях (зокрема Eileen M. Uchitelle з GitHub і Prem Sichanugrist із CookPad) уже діляться своїми думками щодо можливостей оновленої версії та майбутнього Rails 6.0.
Ключові думки
Кілька ключових думок замість підсумків до цієї статті:
- Ruby однаково гідно приймає виклик як від «прямих конкурентів», приміром, Python чи PHP, так і від новостворених мов, що набувають популярності й інтересу.
- У Ruby є свої обмеження, над якими варто попрацювати або віднайти рішення.
- Екосистема технологій Ruby пропонує широкі можливості для втілення всього розмаїття функціоналу, включно з мобільною розробкою і такими провідними галузями, як машинне навчання, робототехніка та штучний інтелект. Список численних інструментів Ruby зростає далі завдяки активній Ruby-спільноті.
- Фреймворк цієї екосистеми Rails «тримає» на собі понад 1 млн веб-платформ і залишається одним з найкращих і найбажаніших для стартапів у 2018 році.
- Серед платформ, збудованих на Ruby, — найпопулярніші ресурси й сервіси для навчання, проектної роботи, подорожей, онлайн-продажів, світові медіа та продукти ще в безлічі індустрій.
- Ситуація на локальному IT-ринку в Україні в певному розумінні сприятлива для Ruby-розробників: компанії пропонують вакансії не лише в столиці, але й у провідних IT-містах України. Вакансій небагато, але вони здебільшого в проектах-продуктах і передбачають цікаві завдання. Крім того, рівень доходу Ruby-розробників досить високий, зокрема, перевищує доходи Python- і PHP-розробників.
- Ruby пропонує початківцям відносно «низький» поріг входу й безліч корисних ресурсів для навчання та натхнення як для тих, хто лиш починає знайомитися з цією мовою, так і для досвідчених Ruby/Rails-розробників.
Я і сам володію різними мовами програмування, тому чудово розумію, що немає кращої чи гіршої мови. Утім, зі спостережень за розробниками й підприємцями світового рівня і з власного більш як десятирічного досвіду в IT-бізнесі, можу з упевненістю сказати, що Ruby — потужний, бізнес-орієнтований і сповнений натхнення для розробників спосіб розробляти ПЗ.
Запрошую до обговорення! Буду вдячний за ваші коментарі й запитання!