Rails через роки: Основні зміни від версії 1 до 8

pic

Рейлс через роки: ключові зміни з версії 1 до 8

Ruby on Rails став основою веб-розробки з моменту свого створення, надаючи розробникам можливість створювати масштабовані та підтримувані веб-додатки. З розвитком Rails кожна нова версія приносила нові функціональні можливості, покращення продуктивності та посилення безпеки. Завдяки відкритому вихідному коду розробники постійно вирішували існуючі проблеми та додавали поліпшення, зберігаючи фреймворк в синхронії з новими тенденціями. Отже, давайте разом розглянемо шлях Rails як фреймворка від його початку до останніх досягнень.

pic

Зміни — єдине постійне в технологіях

Народження Rails (2004): чому був створений Rails

На початку 2000-х створення веб-додатків часто вимагало написання повторюваного коду для обробки взаємодій з базою даних і логіки додатків. David Heinemeier Hansson (DHH), розробляючи Basecamp, усвідомив необхідність фреймворка, який акцентував би увагу на конвенціях над конфігурацією і щасті розробників.

  • Основна філософія Rails:

DRY (Don’t Repeat Yourself): Зменшити дублювання коду, абстрагувавши повторювані шаблони.

Конвенція над конфігурацією: Надавати розумні значення за умовчанням, щоб зменшити витрати на налаштування.

Фреймворк "повного стеку": Надати інструменти для всього процесу розробки — від міграцій бази даних до управління активами на фронтенді.

Rails був створений для того, щоб спростити веб-розробку, зменшуючи кількість коду та пропонуючи структурований, але гнучкий фреймворк.

Rails 1 (2005): Початок простоти

Rails 1 представив світу новий і революційний спосіб створення веб-додатків, зосереджуючись на продуктивності розробників та зручності використання.

  • Ключові зміни:

1. ActiveRecord: Надано ORM для керування записами в базі даних.
2. Scaffolding: Автоматично генерували моделі, уявлення та контролери, прискорюючи прототипування.
3. Міграції: Спрощено зміни схеми бази даних, зменшуючи потребу в написанні SQL вручну.
4. Допоміжні методи: Заохочувалася сепарація коду для чистіших уявлень і кращої підтримуваності.
5. Інтегроване тестування: Тестування стало важливою частиною Rails, спрощуючи процес TDD.

Rails 1 став хорошим початком. У 2006 році він отримав "Програмістську мову року" від Tiobe, але потім команда розробників зіткнулася з деякими проблемами, такими як:
1. обмежена масштабованість для більших додатків.
2. відсутність RESTful маршрутизації, що призводило до неорганізованих контролерів.
3. Уразливості безпеки, такі як ризики масового присвоєння, були поширеними.

Це призвело до наступної версії Rails — Rails 2.

Rails 2 (2007): Укріплення основи

Rails 2 укріпив фреймворк, покращивши масштабованість, запровадивши RESTful дизайн та поліпшивши безпеку.

  • Ключові зміни:

1. RESTful маршрутизація: Спрощено і стандартизовано, як додатки обробляють URL та контролери.
2. Генератори ресурсів: Покращено scaffolding для узгодженості з RESTful архітектурою.
3. HTTP кешування: Покращено продуктивність за допомогою вбудованих механізмів HTTP кешування.
4. Покращення безпеки: Захист від CSRF атак був доданий для запобігання підробці запитів.
5. Геми та плагіни: Спрощено додавання сторонніх бібліотек і плагінів.

  • Відомі методи/функції:

named_scope => для ланцюжкових запитів.
before_filter => (пізніше before_action) для DRY контролерних дій.
respond_to => для обробки кількох форматів відповіді (HTML, JSON, XML).

Популярність Rails почала зростати. Великі веб-додатки, такі як Twitter, Hulu і Shopify, почали використовувати його як базовий фреймворк.

23 грудня 2008 року був запущений Merb, ще один фреймворк для веб-додатків, що був дуже схожий на Rails і викликав багато конфліктів у їхніх спільнотах.
Це час, коли команда Rails працювала з Merb, і Merb було об'єднано з Rails. Проте система мала свої недоліки. Плагіни та гемі не мали стандартизації, продуктивність складних запитів ставала болючою проблемою, а ручне управління станом та складною логікою моделей ставало проблематичним.

Rails 3 (2010): Консолідація та Модульність

Rails 3 став важливим етапом в історії Rails, об'єднавши фрагментовані компоненти в єдину цілісну структуру. Ця версія заклала основу для сучасного Rails, спрощуючи розробку та покращуючи продуктивність.

  • Ключові зміни:

1. Об'єднання компонентів Rails: Об'єднання компонентів Rails (ActionPack, ActiveModel тощо) в єдину цілісну структуру для зменшення фрагментації та покращення підтримки.
2. ActiveRelation: Введення для покращення запитів ActiveRecord через ланцюгування методів, що підвищує читаємість і продуктивність.
3. Рефакторинг валідацій: Виділення і модульність валідацій ActiveModel, що дозволило їх повторне використання поза ActiveRecord для більшої гнучкості.
4. Покращення маршрутизації: Спрощення визначень маршрутів через новий DSL, що дозволяє створювати більш читабельні та організовані маршрути.
5. Захист від XSS за замовчуванням: Покращена безпека за замовчуванням для боротьби з уразливостями, пов'язаними з міжсайтовими скриптами.

  • Помітні методи/функції:

Метод where для ActiveRecord для спрощення складних запитів.

respond_to було покращено для елегантної обробки кількох форматів відповідей.

Asset pipeline (додано в 3.1) для стандартизації управління JavaScript, CSS та зображеннями, що вирішувало проблеми масштабованості для фронтенд-активів.

Проте ці зміни також призвели до нових проблем. Asset pipeline додав складнощі в робочі процеси розробки. Проблеми з продуктивністю почали виникати в масштабних розгортаннях, а обробка фонових завдань була обмежена.

Rails 4 (2013): Покращення Продуктивності та Конвенцій

Розвиваючи солідну основу Rails 3, Rails 4 удосконалив продуктивність, покращив безпеку та запровадив конвенції, що зробили додатки більш стабільними.

  • Ключові зміни:

1. Strong Parameters: Додано для запобігання вразливості масового призначення, враховуючи зростаючі проблеми з маніпуляцією параметрами.
2. Turbolinks: Підвищення продуктивності завдяки завантаженню часткових HTML-сторінок замість повних перезавантажень, що вирішувало проблему повільної навігації.
3. Фонові завдання: Введено ActiveJob як абстракцію, що дозволяє стандартизовано обробляти фонові завдання через різні бекенди завдань.
4. Покращення ActionMailer: Спрощення шаблонів електронної пошти та введення попереднього перегляду вбудованих повідомлень для підвищення продуктивності розробників.
5. Concerns: Заохочення розділення спільної логіки в concerns, що покращує організацію коду та зменшує його роздування в моделях.

  • Помітні методи/функції:

Тепер асоціації belongs_to стали обов'язковими за замовчуванням, щоб уникнути проблем з цілісністю даних.

enum для ActiveRecord для управління станом за допомогою цілих чисел, що відповідає потребі в простішому управлінні станом.

has_secure_password був інтегрований безпосередньо в ActiveModel для спрощення процесу аутентифікації.

У цій версії turbolinks викликав несумісності зі складними JavaScript-додатками, продуктивність asset pipeline сповільнилася зі збільшенням розміру додатків, а залежність від Redis для фонових завдань збільшила складність інфраструктури. Це викликало потребу в наступній версії Rails — Rails 5.

Rails 5 (2016): API-режим та Реальний Час

Rails 5 відгукнувся на зростаючий попит на API та реальний час, створивши базу для більш інтерактивних і масштабованих додатків.

  • Ключові зміни:

1. API-режим: Введено команду rails new app --api, що дозволяє створювати легковагові додатки, орієнтовані тільки на API, у відповідь на бурхливе зростання мобільних і односторінкових додатків.
2. ActionCable: Інтеграція підтримки WebSocket для додавання реальних функцій, таких як передача даних в реальному часі та чат, що стало необхідним через зростаючий попит на ці можливості.
3.`
**API для атрибутів ActiveRecord (ActiveRecord Attributes API):
Дозволив налаштовувати поведінку та типи атрибутів, підвищуючи гнучкість ActiveRecord.
4. Turbolinks 5: Розширено підтримку для мобільних додатків, зменшуючи час завантаження та покращуючи мобільну розробку.
5. Перейменування контролерів: Розділили ApplicationController на APIController та BaseController для спрощення розробки API.

  • Помітні методи/функції:

Покращені хук-методи after_commit та after_rollback для точнішого контролю за транзакціями бази даних.

Команда rails db:setup спростила налаштування бази даних, створюючи схему та заповнюючи її даними за одну команду.

Хоча Rails 5 ввів API-режим, багато додатків все ще стикалися з проблемами у розділенні монолітних структур, що призводило до проблем з продуктивністю у великих додатках. Незважаючи на введення ActionCable, підтримка WebSockets у реальному часі призводила до складнощів зі масштабуванням і розгортанням, а відсутність єдиного способу управління чергами фонових завдань викликала непослідовність і залежність від кількох гемів. Це стало причиною появи Rails 6.

Rails 6 (2019): Продуктивність та Масштабованість

Rails 6 зосередився на підвищенні продуктивності розробників та масштабуванню, щоб забезпечити здатність додатків на Rails витримувати сучасні вимоги.

  • Ключові зміни:

1. ActionText: Введено для роботи з вмістом багатого тексту, що вирішувало потребу в інтегрованому та зручному редагуванні тексту.
2. Підтримка кількох баз даних: Додано рідну підтримку кількох баз даних, оскільки додатки потребували горизонтального масштабування.
3. Паралельне тестування: Зменшено час виконання тестів завдяки паралельному запуску тестів, що відповідає потребі у швидших циклах розробки.
4. Webpacker за замовчуванням: Перехід до управління JavaScript через Webpack, щоб відповідати сучасним інструментам для фронтенду.
5. ActionMailbox: Дозволив обробляти вхідні електронні листи безпосередньо в моделях Rails, спрощуючи робочі процеси з електронною поштою.

  • Помітні методи/функції:

Метод has_rich_text спростив управління багатим текстом.

Команда rails db:system:change дозволила безперешкодно змінювати двигун бази даних.

Покращено продуктивність для асоціацій has_many :through.

У Rails 6 Sprockets став повільнішим для великих додатків, що спричинило проблеми з продуктивністю. Webpacker покращив управління активами, але налаштування було складним та схильним до помилок. Оновлення до новіших версій стало важким через проблеми з webpack. Хоча була введена підтримка кількох баз даних, кешування та налаштування продуктивності все ще вимагали значних ручних зусиль.

Rails 7 (2021): Розробка повного стеку та простота

Rails 7 спростив розробку повного стеку, мінімізуючи залежності від JavaScript та просуваючи більш Rails-орієнтований підхід.

Ключові зміни:

1. Import Maps: Відмовилися від Node.js або Webpack для JavaScript, спрощуючи управління фронтенд-активами.

2. Інтеграція Hotwire: Привнесли Turbo та Stimulus на передній план, сприяючи мінімальному використанню JavaScript для швидших фронтенд-взаємодій.

3. Асинхронні запити: Додано підтримку асинхронних запитів ActiveRecord для обробки довготривалих операцій з базою даних.

4. Zeitwerk за замовчуванням: Покращено автозавантаження, що допомогло усунути проблеми з продуктивністю під час запуску додатка.

5. Оновлення безпеки: Посилено захист від CSRF для зменшення атак.

  • Помітні методи/функції:

Команда config.load_defaults 7.0 спростила оновлення до нових за замовчуванням.

Команда rails new app --css=tailwind спростила інтеграцію Tailwind CSS.

Введено шифрування для чутливих атрибутів ActiveRecord.

До цього часу обробка фонових завдань сильно залежала від Redis, збільшуючи витрати на інфраструктуру та складність, а відсутність вбудованої аутентифікації змушувала використовувати Devise або кастомні реалізації, що збільшувало накладні витрати на проект.

Rails 8 (2024): Ефективність, Простота та Нові Інструменти Розгортання

Rails 8 вводить ряд функцій, що надають пріоритет ефективності розгортання, зменшеним налаштуванням та безперебійній аутентифікації.

  • Ключові зміни:

1.`
**Легке розгортання (Effortless Deployments):
Інтеграція з Kamal 2 та Thruster спрощує робочі процеси розгортання.
2. Solid Queue для фонових завдань (Solid Queue for Background Jobs): Замінює Redis, дозволяючи Active Job обробляти фонові завдання без залежності від зовнішніх систем.
3. Propshaft Asset Pipeline: Легший варіант Sprockets, що спрощує управління активами.
4. Вбудована аутентифікація (Built-in Authentication): Аутентифікація "з коробки", що зменшує залежність від зовнішніх гемів, таких як Devise.
5. Папка скриптів і генератор (Script Folder and Generator): Нова директорія script для організації кастомних скриптів та спрощений генератор для швидшого створення шаблонного коду.

  • Помітні методи/функції:

Метод authenticate безпосередньо в контролерах для обробки сесій.
Команда deploy для безперебійного розгортання.
Метод propshaft.append_path для налаштування управління активами.

pic

Чоловік, що чекає, аби розкрити містичний світ Rails, потужний завдяки AI

Висновок

Rails пройшов шлях від простого веб-фреймворку до потужного, масштабованого рішення для сучасних веб-додатків. Кожна версія відображає еволюцію потреб розробників і технологічного ландшафту. Незалежно від того, чи підтримуєте ви старий додаток на Rails 3, чи починаєте з нуля на Rails 7, розуміння цього шляху допомагає створювати кращі, швидші та безпечніші додатки. Крім того, майбутнє Rails вказує на розробку з використанням AI та новітні технології, такі як WebAssembly, які продовжують інновувати і спрощувати робочі процеси. Тож стежте за останніми оновленнями.

Для посилань, відвідайте wikipedia, rails-guides, rails.

Ви можете слідкувати за мною:

Я тут, щоб зробити спільноту сильнішою, ділячись знаннями. Слідуйте за мною та моєю командою, щоб бути в курсі останніх новинок у світі веб- та мобільних технологій.

Перекладено з: Rails Through the Years: Key Changes from Version 1 to 8

Leave a Reply

Your email address will not be published. Required fields are marked *