Ruby Digest #102: Архітектурні деталі, магія Ractor та AI-експерименти в Rails
Привіт, спільното! 👋
Фінішуємо літо якісним технічним хардкором! У серпневому випуску пірнаємо у внутрішній устрій Ruby, випробовуємо Ractor на міцність, підключаємо AI та розбираємо практичні кейси з Rails-передової.
На вас чекають головні новини місяця, свіжі бібліотеки та добірка матеріалів, які прокачають ваш кодинг. Приємного читання!
Новини
🔹 4.0.19 Released — оновлення RubyGems і Bundler із виправленнями встановлення гемів, роботи з lockfile та безпечнішої обробки даних.
🔹 Security advisories — у бібліотеці resolv виявили дві вразливості безпеки; розробникам рекомендують оновити гем до виправленої версії.
Корисне
🔹 rubocop / rubocop — аналізатор і форматувальник Ruby-коду; у серпні вийшов RuboCop 1.89.0 з можливістю індексувати також код із гемів для міжфайлового аналізу.
🔹 ruby / rbs — мова типів для Ruby отримала стабільний реліз. Усередині — оновлені сигнатури стандартної бібліотеки та підтримка non-ASCII ідентифікаторів.
🔹 rubycdp / ferrum — бібліотека для керування Chrome через CDP без Selenium; у серпні вийшла версія 0.18.0, яка додала окреме обмеження часу для внутрішніх CDP-викликів.
🔹 Freika / dawarich — Rails-застосунок для самостійного зберігання та перегляду історії місцезнаходжень; у серпневій гілці розвитку продовжили перехід на нову карту, додали синхронізацію налаштувань мобільного застосунку та розширили API.
🔹 usetrmnl / terminus — сервер на Ruby та Hanami для самостійного керування пристроями TRMNL; проєкт активно оновлювався в серпні.
🔹 we-promise / sure — відкритий Rails-застосунок для керування особистими фінансами; у серпні активно готували 0.7.4: серед змін — вхід через passkey, нові бюджети, покращення звітів і нові MCP-можливості.
🔹 basecamp / once-campfire — відкритий Rails-застосунок для групових чатів; у серпні вийшли 1.4.8 і 1.4.9, зокрема додано механізми резервного копіювання та відновлення для ONCE.
🔹 otwcode / otwarchive — великий відкритий Rails-застосунок, на якому працює Archive of Our Own.
🔹 fatkodima / online_migrations — гем для виявлення небезпечних PostgreSQL-міграцій і безпечного їх виконання у великих Rails-застосунках.
🔹 ruby-git / ruby-git — бібліотека для роботи з Git-репозиторіями з Ruby; у серпні вийшла серія оновлень до версії 5.2.0.
Цікаве
✨ Tales of the Autistic Developer — Bringing It Into Focus — особистий текст про нестандартний спосіб розв’язання складних задач через візуалізацію систем, зміну погляду на проблему та використання ШІ для перевірки різних ідей.
✨ Meet RubyConf 2026 Scholar: KJ Loving — про перші кроки в екосистемі Ruby, досвід участі в головній конференції року та реальну користь від програми підтримки Scholars & Guides.
✨ Ruby Runway Spotlight: Adam Dalton, Andy Davis, and Larissa Dalton of Stowzilla — інтерв’ю з фаундерами проєкту про створення сервісу зберігання речей та огляд Ruby-інструментів, на яких тримається їхній продакшн.
Статті й туторіали
🔸 Hooking into ActiveRecord’s Connection Pool: A Clean Way to Enable PostgreSQL Row-Level Security — про налаштування PostgreSQL Row-Level Security через пул з’єднань ActiveRecord, щоб ізоляція даних працювала для запитів, фонових задач і консолі.
🔸 Measuring Code Coverage For Non-Ruby Runners — про об’єднання покриття Ruby-коду від Minitest із тестами Cypress або Playwright через SimpleCov і Coverband.
🔸 Bringing Rails into the Ractor-age — про експеримент із Ractor у Rails, який дає справжнє паралельне виконання й може значно зменшити споживання пам’яті порівняно з окремими процесами Puma.
🔸 Maintaining an organizational knowledge graph with an LLM and event sourcing — про систему на Rails Event Store, яка збирає знання з листів, чатів і зустрічей та за допомогою мовної моделі формує з них пов’язаний граф.
🔸 Beyond travel_to: The Block-Scoped State Pattern Hidden in Rails Testing — стаття показує спільний підхід у тестах Rails, де тимчасовий стан діє лише всередині блоку й автоматично відновлюється після його завершення.
🔸 Speeding Up (small) Ruby Hashes — про оптимізацію невеликих Hash у Ruby, де пошук ключа пришвидшують обробкою кількох байтів за одну операцію замість послідовного перебору.
🔸 The Case of the Vanishing Fiber: A Ruby Mystery — розбір помилки в Ruby 3.4.10, через яку збирач сміття міг видалити Fiber, поки внутрішній код Ruby ще продовжував із ним працювати.
🔸 Benchmarks Are Free Now — автор показує, як швидко створений за допомогою ШІ тест швидкодії допоміг знайти п’ятикратне уповільнення в ruby-enum.
🔸 Ruby Instance Variables Are Not Inherited (and Why That Breaks Your DSL) — стаття пояснює, чому змінні екземпляра класу не успадковуються та як це спричинило кілька помилок у ruby-enum.
🔸 Thinking about tests: assertions and matchers — про різницю між звичайними перевірками й matcher-ами та про те, як вони допомагають робити тести коротшими і зрозумілими.
🔸 How to Distribute Private Gems — огляд способів поширення приватних gem-пакетів через Git, власні сховища та закриті реєстри з контролем доступу.
🔸 ArchSpec 1.0: Executable Architecture Specification for Ruby’s Agentic Coding Era — про інструмент, який дає змогу описати архітектурні правила Ruby-проєкту й автоматично перевіряти, чи новий код їх не порушує.
🔸 Rails: The Sharp Parts. The Block Is Not the Transaction — стаття пояснює, що транзакція Active Record охоплює лише операції з базою даних, а зовнішні запити, фонові задачі та інші дії автоматично не скасовуються.
🔸 The Case of the Missing Line: A Ruby Mystery — розбір помилки в Ruby, через яку TracePoint міг не показати виконаний рядок через оптимізацію переходів у байткоді.
🔸 A fresh look at Hanami — перші враження Rails-розробника від Hanami 3 з акцентом на чіткий поділ відповідальності, модульність і меншу кількість прихованої поведінки
🔸 RubyLLM 2.0: Providers, Protocols, and Provider Gems — про нову архітектуру RubyLLM 2.0, де постачальники моделей відокремлені від протоколів, додано нові сервіси й генератор для власних інтеграцій.
🔸 Adventures in Daylight Saving, Norfolk Island, and Time Zone Math (in Ruby) — розбір помилок у розрахунках проміжків часу через часові пояси й перехід на літній час на прикладі Ruby-бібліотеки distance_of_time_in_words.
🔸 The Race Your Rails Validation Cannot Prevent — стаття пояснює, чому перевірка унікальності в Rails не захищає від одночасного створення дублікатів і чому для цього потрібен унікальний індекс у базі даних.
🔸 A Guide to using Batches in SolidQueue — практичний розбір пакетів задач у Solid Queue 1.7: спільне відстеження, обробка успіху чи помилки та додавання нових задач у вже запущений пакет.
Подкасти
Drifting Ruby
📌 Function Calling — практичний гайд про те, як інтегрувати виклики функцій у Rails-застосунок, щоб мовна модель могла самостійно запускати потрібні дії та використовувати внутрішні дані.
Remote Ruby
✔️ Shipping Podia’s New Shop, AI Code Woes, and a Major Rails libvips CVE — про запуск нового магазину Podia, помилки в коді від Claude та серйозну вразливість Active Storage, пов’язану з libvips.
✔️ Ernesto Tagwerker — розмова про використання Claude Code для оновлення й підтримки Rails-проєктів, ризики надмірної довіри до згенерованого коду та важливість чітких стандартів розробки.
✔️ MCP Implementations and Rails World Preparations — про створення MCP-сервера для Rails, роботу з Ruby MCP SDK і OAuth, а також підготовку до Rails World 2026.
On Rails
✔️ Aaron Patterson: Ractors, JIT Compilers, and Rewriting How Gems Install — про розвиток Ractor і JIT у Ruby, прискорення встановлення gem-пакетів та практичне використання ШІ для роботи з великими кодовими базами.
✔️ Joanna Wang: Code Is Cheap Now; Developers Still Valuable — розбір складних воркфлоу в Rails, перехід від власної оркестрації до Hatchet та погляд на те, як ШІ-агенти змінюють роботу програміста.
1 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарівДякую за дайджест. З усього списку найбільше відгукнулася «The Race Your Rails Validation Cannot Prevent» — зустрічав таку теорію раніше, але на практиці з таким не стикався.
І окремо дякую за зв’язку «Bringing Rails into the Ractor-age» + подкаст з Aaron Patterson. Цікаво, чи в когось Ractor уже реально в проді, чи це поки переважно синтетичні бенчмарки? Поки половина гемів не ractor-safe, здається, що для типового I/O-bound Rails економія пам’яті ще не переважує біль від екосистеми.