Институциональное принятие

Как запустить Hanami в браузере с помощью WebAssembly: практический опыт и рекомендации

Институциональное принятие
Putting Hanami in the Browser via WASM

Обзор процесса интеграции Ruby-фреймворка Hanami в браузерную среду с использованием WebAssembly. Подробное руководство по настройке, возникающим трудностям и способам их преодоления, а также примеры кода и советы по оптимизации рабочего процесса.

В последние годы WebAssembly (WASM) стал настоящей революцией в веб-разработке, позволяя запускать на клиентской стороне приложения, ранее ограниченные серверной средой или конкретными платформами. В этой статье мы рассмотрим, как можно запустить Ruby-фреймворк Hanami непосредственно в браузере с помощью WebAssembly, основываясь на опыте российского разработчика и энтузиаста программирования, Паwла Свёнковского. Его эксперимент, которым мы поделимся, демонстрирует реальные возможности и вызовы технологии, а также предоставляет практические решения, которые могут пригодиться каждому, кто заинтересован в совмещении Ruby и браузерных приложений через WASM. Самая красивая особенность такого подхода – возможность снизить порог входа для начинающих разработчиков, позволив им взаимодействовать с фреймворком без необходимости сложных локальных настроек и установок Ruby, менеджеров версий и расширений на C. Идея запуска Hanami в браузере звучит особенно заманчиво, ведь этот фреймворк отличается модульностью и лёгкостью, что делает его отличным кандидатом для подобных экспериментов.

Среди причин обратить внимание на Hanami – его чёткая архитектура, современный синтаксис и активное сообщество. При этом традиционные Ruby-приложения требуют мощных серверов и сложных инструментов настройки, чего можно избежать, предоставив среду исполнения прямо в браузере. Однако для реализации такого решения потребовалось преодолеть ряд технических препятствий и несовершенств текущих инструментов WASM. Исходная точка работы – репозиторий ruby.wasm, являющийся официальной частью Ruby-организации на GitHub.

В этом проекте собран основной инструментарий, необходимый для компиляции и запуска Ruby-кода с помощью WebAssembly. В частности, можно выделить утилиту ruby_wasm, доступную через RubyGems, которая облегчает подготовку и сборку WASM-пакетов. Тем не менее, просто запустить Hanami в WASM не так просто, как кажется. Фреймворк использует ряд зависимостей, среди которых такие, как bigdecimal, которые на момент написания эксперимента не компилируются в WebAssembly. Для решения этой проблемы была применена хитрость, подсказанная в подкасте Владимира Дементьева – вместо настоящей реализации BigDecimal была создана заглушка.

Она не содержит функционала, но позволяет обойти ошибку компиляции и продолжить работу. Помимо этого пришлось модифицировать процесс компиляции WASM, чтобы пропустить нежелательные компоненты и встроить необходимые кастомные зависимости. Еще один важный момент – сам Hanami контриллеры и валидаторы были задействованы без полноценного роутера и механизмов HTTP запросов, поскольку полная эмуляция серверного окружения в браузере пока невозможна из-за ограничений WASM и Ruby. Автору удалось добиться запуска отдельного действия с валидациями, демонстрирующего базовую работу фреймворка в таком окружении. Реализация поддержки пользовательского кода в браузере выглядела следующим образом: сначала загружался WASM-файл, содержавший скомпилированный слой Ruby и необходимые гемы.

Далее создавалась виртуальная машина Ruby и выполнялся инициализационный скрипт, добавлявший пути к шеллам (shims) и подключавший ключевые библиотеки Hanami. В итоге в браузере была определена Ruby-модель, которая исполнялась через специальный метод run_action. Этот метод принимал класс действия и сериализованные параметры, запускал процесс и возвращал результат, что позволило реализовать взаимодействие с пользователем непосредственно в браузерном интерфейсе. Сам код на JavaScript использует современные асинхронные функции для загрузки WASM, создания виртуальной машины и затем исполняет Ruby-строки, встраивая пользовательский ввод, что открывает широкие возможности для интерактивных приложений на Ruby без серверной части. В качестве дополнительного шага автор подготовил скрипт сборки, который управляет процессом компиляции Ruby в WASM с помощью ruby_wasm и RubyWasm::Packager.

В скрипте помимо прочего исключается гем bigdecimal, который не компилируется, и задаются пути к шёллам и выходным файлам. На практике размер итогового WASM-файла составлял порядка 50 мегабайт, что стало серьёзным ограничением для популярных сервисов, таких как Cloudflare Pages и Netlify. Поэтому было принято решение разместить демонстрационную версию на дешевом VPS, что позволило избежать проблем с ограничениями хостинга и убедиться, что эксперимент работает у реальных пользователей. Несмотря на то, что запуск Hanami целиком в браузере – пока недостижимая цель из-за технических и функциональных ограничений, опыт показывает, что отдельные его модули и действия вполне реализуемы. Это открывает перспективы использования Ruby и Hanami в новых сценариях, расширяя фронтиры веб-разработки.

Кроме того, стоит отметить важность изучения сторонних ресурсов и опытных разработчиков, таких как Владимир Дементьев, чей код и электронная книга выступили источником знаний и готовых решений для преодоления сложностей внедрения Ruby в WASM. Такой обмен опытом ускоряет изучение технологии и вдохновляет на новые эксперименты. В целом, использование WebAssembly для запуска Ruby-кода и Hanami в браузере – это перспективное направление, хотя и наполненное «драконами» и «шероховатостями». Научиться правильно конфигурировать сборку, обходить несовместимые зависимости, создавать виртуальную машину и обрабатывать ошибки – это ценный навык, который пригодится разработчикам, стремящимся к инновациям и улучшению пользовательского опыта. Несмотря на ограничения, уже сегодня возможна реализация небольших промо-демо, обучающих материалов и минимальных серверов приложений, работающих полностью на клиентской стороне с помощью WASM.

В будущем, по мере развития инструментов и экосистемы Ruby-WASM, можно ожидать улучшения поддержки гемов, оптимизации размера и скорости загрузки, а также появления полноценных приложений с маршрутизацией и другими функциями. Для тех, кто хочет начать свой путь – стоит внимательно ознакомиться с репозиторием ruby.wasm, изучить ruby_wasm tool, пользоваться готовыми примером и следить за сообществом разработчиков. Не менее важен опыт погружения в асинхронный JavaScript и взаимодействие с виртуальными машинами через WASM. Кроме технических знаний, эксперимент Паwла подчеркивает ценность настойчивости и готовности изучать новое – за полчаса можно получить работающую демо, но по-настоящему освоить технологию пришлось провести часы в попытках понять код других и устранять ошибки.

В итоге, перспектива запускать Hanami и Ruby в браузере через WASM становится всё более достижимой, а опыт подобных исследований важен для развития современного веба.

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
How close should you live to a park?
Среда, 24 Сентябрь 2025 Какое расстояние до парка считается оптимальным для комфортной жизни?

Обзор важности близости парковой зоны к жилому дому, влияния зеленых пространств на здоровье и качество жизни, а также рекомендаций по выбору жилья с удобным доступом к паркам.

The software engineering "squeeze" – by Anton Zaides
Среда, 24 Сентябрь 2025 Профессиональный стресс в индустрии разработки ПО: почему инженеры оказываются в «зажиме» и как выжить

Исследование причин и последствий явления «зажима» в сфере программной инженерии, а также советы по адаптации и развитию в условиях изменяющегося рынка труда для разработчиков различного уровня.

Vor Bio back from brink with autoimmune drug deal rising to $4bn
Среда, 24 Сентябрь 2025 Возрождение Vor Bio: путь от кризиса к сделке на $4 млрд в сфере аутоиммунных заболеваний

История трансформации компании Vor Bio и её стратегическое партнёрство с китайской биотехнологической компанией RemeGen, открывающее новые перспективы в лечении аутоиммунных заболеваний и потенциальное расширение присутствия на мировом фармацевтическом рынке.

Why used-car dealer Carvana is pushing real-time billing
Среда, 24 Сентябрь 2025 Почему Carvana внедряет оплату в режиме реального времени в автомобильной торговле

Carvana, ведущий онлайн-ретейлер подержанных автомобилей, активно внедряет технологию оплаты в режиме реального времени, чтобы упростить процессы покупки и снизить операционные издержки, что меняет подход к автомобильной торговле.

Tether Buys Treasurys, Cuts Commercial Paper, Adds Non-US Debt - Markets Insider
Среда, 24 Сентябрь 2025 Tether увеличивает долю казначейских облигаций, сокращает коммерческие бумаги и добавляет долги за рубежом: что это значит для рынка стабильных монет

Подробный анализ изменений в резервах Tether: увеличение доли государственных облигаций США, сокращение коммерческих бумаг и добавление долговых обязательств иностранных государств, а также влияние этих событий на стабильность и доверие к одной из крупнейших стейблкоинов в криптоиндустрии.

Core Scientific Soars 25% as WSJ Reports Buyout Talks With CoreWeave
Среда, 24 Сентябрь 2025 Core Scientific и CoreWeave: новые перспективы в мире майнинга и облачных технологий

Акции Core Scientific резко выросли на 25% на фоне сообщений о переговорах с CoreWeave по поводу возможного выкупа. В статье рассмотрены детали сделки, влияние на рынок майнинга криптовалют и потенциал обеих компаний в области облачных вычислений и искусственного интеллекта.

Ripple Integrates Wormhole With XRP Ledger to Power Institutional Multichain Moves
Среда, 24 Сентябрь 2025 Интеграция Wormhole с XRP Ledger: Новый этап развития межцепочечной совместимости для институциональных инвесторов

Ripple интегрирует протокол Wormhole с XRP Ledger и его EVM-совместимым сайдчейном, обеспечивая беспрепятственное перемещение криптоактивов и токенов реальных активов между более чем 35 блокчейн-сетями. Эта инновация открывает новые возможности для создания мультичейн-приложений с акцентом на соответствие нормативам, минимальные издержки и быструю обработку транзакций.