В мире веб-разработки на сегодняшний день существует множество фреймворков и инструментов, упрощающих создание приложений. Однако большинство из них несут с собой определённую сложность, подчёркнутые архитектурные решения и громоздкие структуры, которые могут отпугнуть разработчиков, стремящихся к простоте и эффективности. Именно здесь на сцену выходит Brut — новый веб-фреймворк для Ruby с уникальным подходом, который кардинально меняет представления о том, как создавать современные веб-приложения. Brut задуман как простой и при этом полнофункциональный фреймворк, который не использует привычные концепции контроллеров, HTTP-методов и ресурсов. Вместо этого разработчики создают страницы, формы и одиночные обработчики действий, что позволяет работать напрямую с HTML, генерируемым на сервере, и при этом беспрепятственно интегрировать JavaScript и CSS по своему усмотрению.
Такой подход обеспечивает гибкость при работе с клиентской частью, даёт возможность использовать современные веб-технологии без ограничений, свойственных традиционным Ruby-фреймворкам. Одна из ключевых особенностей Brut — это отказ от излишних абстракций и лишней церемонии, свойственной многим другим веб-фреймворкам. В то же время Brut не является низкоуровневым инструментом вроде Sinatra, а представляет собой полноценную платформу с продуманными возможностями. Внутри фреймворка предусмотрена встроенная телеметрия на базе OpenTelemetry, позволяющая контролировать производительность и отслеживать события работы приложения. Для работы с данными используется мощный ORM-системный слой на базе Sequel, а для автоматизации процессов разработки интегрирован механизм командной строки с поддержкой OptionParser.
Установка и запуск приложений с использованием Brut максимально просты. Для начала работы даже не требуется установка Ruby на локальной машине — можно использовать готовый Docker-образ. Команды для создания, сборки и запуска проекта интуитивны и позволяют начать разработку буквально за считанные минуты, что значительно повышает продуктивность и снижает масштаб первоначального барьера для новых пользователей. Brut предлагает продуманную структуру приложения, где основные элементы создаются в виде классов, которые затем инстанцируются и управляются через методы. Обработка сессий, параметров форм и flash-сообщений осуществляется через специально определённые классы с явной типизацией, а не простыми хэшами или динамическими структурами.
Такой строгий подход позволяет избежать многих распространённых ошибок и облегчает поддержку кода. Разработчики фреймворка также уделили внимание единству пользовательского опыта при работе с формами. В Brut реализована унифицированная система валидации, которая работает и на клиенте, и на сервере. Это обеспечивает согласованность проверки данных на всех этапах взаимодействия пользователя с приложением, повышая надёжность и безопасность. Клиентская часть в Brut поддерживается библиотекой BrutJS — набором автономных пользовательских элементов, иначе называемых web-components.
Они позволяют элегантно расширять и улучшать HTML-структуру приложения, привнося интерактивность и динамическое поведение без излишней сложности. Кроме того, благодаря интеграции с инструментом esbuild, весь CSS мгновенно упаковывается, минимизируется и получает уникальные хэши, что упрощает процесс сборки и оптимизации стилей. При этом не используются сложные препроцессоры вроде SASS или PostCSS, что отображает стремление к простоте и «чистоте» кода. Brut обеспечивает разработчиков набором лучших практик по умолчанию. Это касается вопросов безопасности, например, настроенных по-умолчанию Content Security Policy, грамотной работы с базой данных, где столбцы по умолчанию не допускают null-значения, а внешние ключи всегда индексируются и проверяются на существование.
Помимо этого, встроенная система работы со временем и датами учитывает часовые пояса, что исключает распространённые ошибки, связанные с часовыми зонами. Важным аспектом является поддержка локализации и интернационализации. Brut использует популярный Ruby-гем i18n, однако в отличие от подавляющего большинства решений не хранит переводы в YAML-файлах, а использует Ruby-хэши. Это делает конфигурацию переводов более структурированной и гибкой, а также упрощает интеграцию с динамическими переменными и средами. Аналогично, динамическая конфигурация приложения осуществляется через переменные окружения при помощи dotenv, что гарантирует простоту и прозрачность настройки без необходимости возиться с YAML-конфигурациями.
Тестирование — неотъемлемая часть современного цикла разработки, и Brut отлично интегрируется с RSpec, самым популярным инструментом для тестирования Ruby-приложений. Фреймворк обеспечивает специализированные матчеры, упрощающие написание тестов и позволяющие сосредоточиться на функциональности, а не на инфраструктуре. Для генерации тестовых данных можно использовать Faker и FactoryBot, что ускоряет и упрощает подготовку тестовой и девелоперской среды. Phlex, инновационный Ruby DSL для генерации HTML, лежит в основе рендеринга представлений в Brut. Разработчики подчеркивают, что не планируют поддерживать альтернативные шаблонизаторы вроде HAML, что можно рассматривать как стремление к максимальной консистентности и предсказуемости в генерации интерфейса.
Одной из главных проблем при разработке с традиционными Ruby-фреймворками является постоянное использование YAML-конфигураций, сложные вопросы маршрутизации и неопределённость архитектуры. Brut стремится избавиться от этого. В его архитектуре нет абстракций там, где они не нужны, а страницы и страницы с данными чётко именуются и располагаются по понятным путям, исключая двусмысленность и облегчая взаимодействие в команде. Brut позволяет самостоятельно решать, где разместить бизнес-логику: в моделях, сервисах или отдельных классах, без навязывания сложных паттернов и концепций вроде монады или алгебраических типов данных. Всё это даёт разработчику свободу выбора и возможность строить внутреннее устройство приложения на свой вкус или в соответствии с требованиями проекта.
Для новичков Brut — отличный вариант для быстрого старта и освоения современных подходов, а для опытных разработчиков — удобный и мощный инструмент, который помогает избежать головной боли от избыточной архитектуры и рутинных задач. Возможность сосредоточиться на написании Ruby-кода, интеграции с веб-браузером и использовании современных возможностей языка Ruby 3.4 делает этот фреймворк особенно привлекательным. Brut — это не просто ещё один веб-фреймворк. Это манифест стремления упростить процесс создания веб-приложений, сохранить удовольствие от программирования и избавиться от вечных споров о лучшей архитектуре.
Если вы разработчик Ruby и ищете способ наслаждаться работой, быстро запускать проекты и создавать качественные приложения, стоит обратить внимание на этот перспективный инструмент. Уже сейчас доступен демонстрационный проект ADRs.cloud, который позволяет увидеть практическое применение Brut и оценить его преимущества на практике. В заключение можно сказать, что Brut предлагает свежий взгляд на разработку веб-приложений на Ruby. Его ориентированность на минимализм, встроенную поддержку современных инструментов и технологий, а также усилия по исключению излишних слоёв абстракции создают мощную платформу для эффективного создания веб-сервисов.
В ближайшем будущем, с выходом версии 1.0, Brut обещает стать важным игроком на рынке Ruby-фреймворков, который стоит изучить каждому, кто хочет строить современные и устойчивые веб-приложения с удовольствием и максимальной продуктивностью.