Ruby Digest #99: Травень у Ruby — AI-прорив, безпековий хаос та нові інструменти

Друзі, всім привіт! 👋

Травень довів: екосистема Ruby не просто живе, а мчить уперед на шаленій швидкості. Цей місяць приніс нам важливі безпекові апдейти, потужний розвиток AI-інструментів та свіжі фічі, які полегшать життя кожному розробнику.

У цьому випуску — розбір головних подій місяця, гучні оновлення популярних бібліотек, а також соковита добірка матеріалів про Rails, оптимізацію продуктивності та виживання складних проєктів.

Новини

🔹Ruby 4.0.5 Released — безпекове оновлення Ruby 4.0.5, яке виправляє CVE-2026-46727 і регресію системи збірки в Ruby 4.0.4 під C locale.

🔹4.0.12 Released — RubyGems 4.0.12 і Bundler 4.0.12 приносять невеликі покращення та виправлення, зокрема зміни в роботі BUNDLE_VERSION, lockfile і bundle config.

Корисне

🔹thoughtbot / factory_bot — незамінний інструмент для створення тестових даних отримав потужний апдейт. У травні релізнули версію 6.6.0, де прокачали lint-перевірки та додали нову подію для точного відстеження запуску фабрик. Ну і без технічних зачисток не обійшлося.

🔹rubyzip / rubyzip — інструмент для роботи з ZIP-архівами в Ruby; у травні вийшла версія 3.3.0, де Zip::InputStream зробили ближчим до стандартної поведінки Ruby IO.

🔹elastic / elasticsearch-ruby — офіційний клієнт Elasticsearch для Ruby; у травні вийшла версія 9.4.0 з оновленнями API, новими параметрами та підтримкою Ruby 4.0.

🔹rubygems / rubygems.org — сайт і сервіс для публікації Ruby-гемів; у травні запропонували ідею «Alumni», щоб показувати колишніх мейнтейнерів гемів і зменшити потребу тримати зайві права доступу.

🔹discourse / mini_scheduler — інструмент для запуску повторюваних завдань у Sidekiq; у травні проєкт з’явився в Ruby-спільноті як окремий гем для планування фонових задач.

🔹sergey-homenko / llm_cost_tracker — рішення для підрахунку витрат на запити до мовних моделей; у травні вийшло кілька оновлень з новою сторінкою цін, фільтрами, покращеннями панелі й виправленнями міграцій.

🔹marckohlbrugge / sessy — помічник для перегляду подій Amazon SES: доставок, відмов, скарг, відкриттів і кліків; у травні проєкт з’явився як відкрите рішення для спостереження за email.

🔹onetimesecret / onetimesecret — сервіс для безпечного передавання секретів через одноразові посилання; у травні вийшли оновлення v0.25.x і всі регіони перевели на одну версію.

🔹envato / zxcvbn-ruby — інструмент для перевірки надійності паролів; у травні вийшла велика версія 2.0.0 з міграційними змінами, для яких автори окремо підготували інструкцію переходу.

🔹rouge-ruby / rouge — рішення для підсвічування коду; у травні вийшла велика версія 5.0.0, де прибрали підтримку Ruby 2.7, переробили HTML Formatter і додали новий лексер для Apache Thrift.

Цікаве

🔹Formatting an entire 25 million line codebase overnight: the rubyfmt story — розповідь Stripe про те, як у великій Ruby-кодовій базі впровадили масове автоматичне форматування за допомогою rubyfmt.

🔹GemStuffer Campaign Abuses RubyGems as Exfiltration Channel Targeting UK Local Government — дослідження кампанії, у якій RubyGems використали як канал виведення даних через шкідливі gem-пакети.

🔹Why Ruby Still Feels Like Home After All These Years — автор пояснює, чому Ruby й далі залишається для нього зручним середовищем завдяки виразному синтаксису, вбудованим можливостям і сильній екосистемі інструментів.

🔹Why thoughtbot is joining the Ruby Alliance — thoughtbot пояснює, чому долучається до Ruby Alliance, щоб підтримати довготривалу стійкість Ruby-інфраструктури й ширшої екосистеми.

Статті й туторіали

🔸Use class_names to Conditionally Apply CSS Classes — як навести лад у в’юхах Rails. Стаття показує, як елегантно прокидати CSS-класи за умовою через class_names або звичайний масив, назавжди викинувши з шаблонів монструозні тринарні оператори та спагетті-код.

🔸The Execution Boundary in Rails — стаття про те, чому фонові задачі, after_commit і відкладені дії в Rails варто сприймати як окрему межу виконання, де змінюються час, стан, видимість даних і поведінка при помилках.

🔸kamal-backup: Scheduled Rails Backups for Kamal Apps — допис про kamal-backup, інструмент для регулярних резервних копій Rails-застосунків на Kamal, який охоплює базу даних, файли Active Storage, відновлення й перевірку резервних копій.

🔸Blue Ridge Ruby 2026 Recap — огляд конференції Blue Ridge Ruby 2026 з акцентом на сталу розробку, великі рефакторинги, Hanami, htmx і практики роботи з моделями.

🔸Rails Security, AI, and IBB — текст про те, як хвиля низькоякісних звітів, згенерованих моделями, ускладнила роботу з безпековими повідомленнями в Rails і збіглася із зупинкою нових виплат через IBB.

🔸Asset pipelines: just say no — автор пояснює, чому відмовився від asset pipeline, фронтенд-бандлерів і окремого JS runtime та як обходитися без них у власних проєктах.

🔸RubyLLM 1.15: Image Editing, Cost Tracking and Less Tool Boilerplate — оновлення RubyLLM 1.15 додає редагування зображень, підрахунок вартості запитів, простіше передавання параметрів інструментам і кілька поліпшень для Rails.

🔸Generating Charts in Pure Ruby Without JavaScript — матеріал про серверне створення графіків у Ruby без JavaScript, браузера чи зовнішніх сервісів, з використанням ruby-libgd для генерації PNG напряму з коду.

🔸Live Background Job Progress in Rails 8.1 with Rails.event and Continuations — допис розказує, як у Rails 8.1 відображати хід фонової задачі в реальному часі через Rails.event і ActiveJob::Continuable без ручного broadcast_* у тілі job.

🔸Rails 8 Adds Thruster as the Default HTTP/2 Proxy Server — стаття про те, як Rails 8 додає Thruster як типовий HTTP/2 проксі для контейнерного запуску з TLS, кешуванням статичних файлів, X-Sendfile і стисненням відповідей.

🔸One engine, many tools — Introducing Rubydex — матеріал про Rubydex, спільний механізм аналізу Ruby-коду, який став основою для Ruby LSP та має використовуватися й в інших інструментах, зокрема для роботи моделей із кодовою базою.

🔸One year of Ruby on Rails configuration — автор підсумовує рік власних Rails-налаштувань: від типів і часових зон до Turbo, GoodJob і дрібних покращень, частина з яких згодом потрапила в сам Rails.

🔸Ractors: Real Parallelism in Ruby Without the GVL — стаття пояснює, як Ractor дає справжній паралелізм у Ruby завдяки ізоляції об’єктів, правилам спільного доступу та передачі даних через копіювання або перенесення.

🔸When Agentic Coding Goes Off the Rails — допис про ризики активного використання засобів автоматичного написання коду, зокрема поступовий дрейф архітектури, зайві залежності й втрату важливого контексту під час перевірки змін.

🔸Migrating from Sprockets to Propshaft in Rails 8 — матеріал про перехід Rails 8 на Propshaft як типовий механізм роботи з ресурсами замість Sprockets.

🔸Inbound email in Rails apps with Fuik — стаття показує, як використовувати Fuik для приймання й обробки вхідних листів у Rails через вебхуки, без обов’язкової прив’язки до Action Mailbox і Active Storage.

🔸Inside Ruby’s Object Model — це розбір внутрішньої моделі об’єктів у MRI Ruby, зокрема include, prepend, extend, singleton class і пошуку методів.

🔸Rails 8.1 Adds Native Markdown Rendering Support — стаття про те, що Rails 8.1 додає вбудовану підтримку рендерингу Markdown через звичні для фреймворку механізми format і to_markdown.

🔸Ruby Beyond the Server — автор нагадує, що Ruby давно виходить за межі серверної розробки й розглядає інші напрями його використання, зокрема в браузері через WebAssembly.

🔸Why Duck Typer? — матеріал пояснює, навіщо тестами перевіряти узгодженість спільного інтерфейсу між класами, які мають поводитися однаково.

🔸Rails 8 Solid Queue: Database-Backed Background Jobs — стаття про Solid Queue як типовий бекенд фонових задач у Rails 8, що зберігає job у базі даних замість Redis і додає вбудовані черги, планування та обмеження паралельності.

🔸Extending Ruby LSP with Prism — як розширити Ruby LSP через add-on і Prism, щоб додати перехід до partial у Rails-шаблонах через render.

🔸Exploring Ruby’s OpenSSL stdlib internals: from C bindings to Ruby APIs — тут матеріал як Ruby обгортає OpenSSL на рівні C-розширення і перетворює його можливості на звичні Ruby API для TLS, сертифікатів, шифрування й хешування.

🔸Ruby Concurrency: What Actually Happens — пояснення, як у Ruby на практиці працюють процеси, потоки, fibers і Ractors та де в кожного підходу реальні межі.

🔸A Ruby Timeout that works — автор пропонує gem, який використовує TCP_USER_TIMEOUT, щоб жорстко обмежувати завислі TCP-з’єднання й не покладатися на ненадійний Timeout.timeout.

Відео

📌Blue Ridge Ruby 2026 — добірка записів конференції Blue Ridge Ruby 2026 з усіма виступами й lightning talks.

Подкасти

Drifting Ruby

📌Ten Years of Frontend — про те, як за десять років змінювалися підходи до фронтенду й роботи з клієнтською частиною, та який підхід автор вважає найкращим зараз.

📌Tone Check — про перевірку тону тексту за допомогою інструментів на основі моделей у Rails-застосунку.

📌Broadcasting Shell Output — про передавання виводу shell-команд у застосунок у реальному часі.

📌.gitignore globally — про налаштування глобального .gitignore, щоб спільні локальні файли не потрапляли в репозиторії.

Remote Ruby

✔️Behind the Scenes: Developing Podias New Version — розмова про поступове розгортання нової версії Podia з міграцією, feature flags, внутрішнім тестуванням і подальшим прибиранням старої логіки.

✔️Direct Routes and Data Queries — епізод про direct routes у Rails, практичне використання засобів на основі моделей у командах і розширення навчального Rails-проєкту до більш реалістичного магазину.

✔️Stripe Changes, File Upload Quirks, Scaling Sidekiq — розмова про нові оголошення Stripe, складнощі з завантаженням файлів і обробкою зображень у Rails, а також про підходи до побудови черг у Sidekiq.

✔️Blue Ridge Ruby Insights & Experiences — епізод із враженнями від Blue Ridge Ruby, розмовою про цінність невеликих конференцій і практичні уроки з Rails та Stripe у реальних проєктах.

✔️Rails World Tickets, New JavaScript Package Managers, and Security Worries — випуск про квитки на Rails World, нові менеджери JavaScript-пакетів, атаку через шкідливі gem-пакети й інші свіжі новини Ruby-екосистеми.

On Rails

✔️Jason Meller: Rails, Security, and the AI Advantage — розмова про те, чому Rails лишається дуже ефективним для розробки з мовними моделями, і як при цьому зростають ризики для безпеки, зокрема навколо локального середовища, доступів і автономних інструментів.

✔️Tom Rossi: Staying as Rails as Possible — епізод про те, як Buzzsprout свідомо тримається якомога ближче до стандартного Rails, поєднуючи це з міграцією з Paperclip на Active Storage, переходом до ClickHouse для аналітики та використанням Hotwire.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

class_names

Так забавно, як розробники самі придумають велосипед з квадратними колесами і потім самі ж шукають інший костиль як зробити колеса круглі.

В нас є css який би з легкістю покрив все в 1 чи 2 селекторами в залежності від ситуації, а тепер ми додаємо tailwindcss, наліплюємо побільше класів і ще і тернарний оператор. Да і пофіг, що в нас css задумувався для опису стилістики і щоб меньше коду було в html. Ми ще і лібу будемо тягнути (бо так «швидше» розробляти) для цього і навантажувати html щоб все перемальовалось якщо не один css файл.

По факту, щоб вийти з цієї ситуації ми майже нативний html вбиваємо бо class_names це елегантно. Замкнуте коло.

Дякую за статтю.

Дуже дякую!

Підписатись на коментарі