Loco: удобство ROR, скорость Rust

Backend
15 мая 2026 Время чтения 5 мин

Loco — это современный web-framework для Rust, вдохновлённый философией Ruby on Rails. Его главная идея — дать разработчику “rails-подобный” DX (developer experience): генераторы, MVC-архитектуру, convention over configuration, встроенную инфраструктуру и быстрый старт.

Если Rails исторически сделал web-разработку продуктивной в мире Ruby, то Loco пытается сделать то же самое для Rust: сохранить удобство разработки, но добавить безопасность памяти, высокую производительность и строгую типизацию. Больше о выборе Rust для продакшена — в нашем материале о приложениях на Rust и Zig.


Почему Loco вообще появился

Rust долгое время ассоциировался с низкоуровневыми сервисами, async-инфраструктурой и сложным backend-кодом. Для web-разработки существовали:

  • Axum
  • Actix Web
  • Rocket

Но все они скорее “конструкторы”, чем полноценные фреймворки «всё включено».

Loco строится поверх Axum и пытается дать:

  • готовую структуру проекта;
  • MVC;
  • генерацию кода;
  • ORM-интеграцию;
  • кеширование;
  • фоновые задачи;
  • аутентификацию;
  • миграции;
  • CLI-инструменты.

То есть то, к чему Rails-разработчики привыкли много лет назад.


Архитектура Loco

Loco использует классическую MVC-архитектуру:

  • Models — работа с данными;
  • Views — представление;
  • Controllers — обработка HTTP-запросов.

Это максимально напоминает Rails.

Структура проекта

Типичный проект выглядит примерно так:

src/
   ├── controllers/
   ├── models/
   ├── views/
   ├── workers/
   ├── tasks/
   ├── middleware/
   └── app.rs

Очень похоже на Rails:

app/
   ├── controllers/
   ├── models/
   ├── views/

Разработчику не нужно придумывать архитектуру проекта — фреймворк задаёт соглашения (conventions).

Models в Loco

Loco тесно интегрирован с SeaORM — одной из самых популярных ORM для Rust.

Почему SeaORM

SeaORM хорошо подходит Loco по нескольким причинам:

  • async-first архитектура;
  • строгая типизация;
  • генерация сущностей;
  • поддержка PostgreSQL/MySQL/SQLite;
  • интеграция с миграциями;
  • ActiveRecord-подобный стиль.

В отличие от Rails ActiveRecord, SeaORM более явный и типобезопасный.

Пример модели

use sea_orm::entity::prelude::*;

  #[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
  #[sea_orm(table_name = "users")]
  pub struct Model {
      #[sea_orm(primary_key)]
      pub id: i32,

      pub email: String,
      pub password: String,
  }

Здесь видно сходство с Rails:

class User < ApplicationRecord
  end

Но в Rust всё более строго типизировано.

ActiveModel и изменения данных

SeaORM использует концепцию ActiveModel.

Пример создания пользователя:

let user = users::ActiveModel {
      email: Set("test@example.com".to_string()),
      password: Set("secret".to_string()),
      ..Default::default()
  };

  user.insert(db).await?;

Rails делает это проще:

User.create!(
    email: "test@example.com",
    password: "secret"
  )

Но Loco/SeaORM выигрывают в:

  • проверках на этапе компиляции;
  • контроле типов;
  • производительности;
  • отсутствии сюрпризов в рантайме.

Controllers

Контроллеры в Loco отвечают за HTTP-маршруты и бизнес-логику.

Пример:

pub async fn list(State(ctx): State<AppContext>) -> Result<Response> {
      let users = users::Entity::find()
          .all(&ctx.db)
          .await?;

      format::json(users)
  }

Это очень напоминает Rails:

class UsersController < ApplicationController
    def index
      render json: User.all
    end
  end

Но под капотом Loco использует async Rust и Axum.

Views

Loco поддерживает представления (views), хотя в API-проектах чаще используется JSON.

Можно использовать:

  • HTML-шаблоны;
  • JSON-ответы;
  • серверный рендеринг;
  • API-only режим.

Для шаблонов обычно применяются шаблонизаторы для Rust:

  • Askama
  • Tera

Генерация кода через CLI

Одна из ключевых “rails-фич” Loco — мощный CLI.

Rails известен своими генераторами:

rails generate model User
  rails generate controller Users

Loco предлагает похожий рабочий процесс.

Генерация проекта

cargo loco new

или

loco new myapp

Фреймворк создаёт:

  • структуру проекта;
  • конфиги;
  • controllers;
  • models;
  • migrations;
  • routes.

Генерация models

cargo loco generate model User

CLI может автоматически создать:

  • SeaORM entity;
  • migration;
  • boilerplate код.

Это значительно ускоряет разработку.

Генерация controllers

cargo loco generate controller Users

Создаются:

  • routes;
  • файл контроллера;
  • handlers;
  • шаблон CRUD-операций.

Очень похоже на генераторы Rails.

Генерация views

Loco также умеет создавать представления и шаблоны через CLI.

Например:

cargo loco generate scaffold Post

Scaffold-подход напрямую вдохновлён Rails.


Встроенная инфраструктура: кеш, воркеры и конфигурация

Встроенная работа с кешем

Loco включает встроенную инфраструктуру кеширования.

Это важное отличие от “минималистичных” фреймворков на Rust, где кеш приходится собирать вручную.

Поддерживаются:

  • кеш в памяти;
  • Redis;
  • асинхронный слой кеширования.

Пример использования кеша

ctx.cache.set("key", value).await?;

Получение:

let value = ctx.cache.get("key").await?;

Это напоминает Rails cache store:

Rails.cache.write("key", value)
  Rails.cache.read("key")

Фоновые задачи и воркеры

Как и экосистема ActiveJob/Sidekiq в Rails, Loco поддерживает воркеры.

Структура:

src/workers/

Можно выполнять:

  • задачи отправки email;
  • асинхронные задачи;
  • задачи по расписанию;
  • фоновую обработку данных.

Конфигурация

Loco использует многослойную систему конфигурации:

config/
   ├── development.yaml
   ├── production.yaml
   └── test.yaml

Почти идентично окружениям Rails.


Что Loco заимствует у Rails

1. Convention over configuration

Минимум ручной настройки.

2. CLI-генераторы

Автогенерация boilerplate.

3. MVC

Чёткое разделение ответственности.

4. «Всё включено» (batteries included)

Много возможностей “из коробки”.

5. Scaffold-подход

Быстрый CRUD-development.


Где Loco отличается от Rails

Производительность

Rust существенно быстрее Ruby.

Loco подходит для:

  • высоконагруженных API;
  • систем реального времени;
  • микросервисов;
  • backend с низкой задержкой.

Безопасность

Rust гарантирует:

  • безопасность работы с памятью (memory safety);
  • отсутствие гонок данных (data races);
  • меньше ошибок в рантайме.

Rails во многом полагается на проверки в рантайме.

Сложность

Rails проще для новичков.

Loco наследует сложность Rust:

  • владение (ownership);
  • времена жизни (lifetimes);
  • async-экосистему;
  • дженерики.

Порог входа выше.

SeaORM vs ActiveRecord

Сравнение ORM — ключевой момент.

Возможность SeaORM ActiveRecord
Типизация Строгая Динамическая
Async Да Ограниченно
Проверки на этапе компиляции Да Нет
DX Хороший Отличный
Производительность Высокая Средняя
Гибкость SQL Высокая Средняя

ActiveRecord более “магический”.

SeaORM — более явный и безопасный.


Когда стоит выбирать Loco

Loco особенно интересен, если нужны:

  • Rust + высокая производительность;
  • rails-подобный DX;
  • строгая типизация;
  • async backend;
  • удобный CRUD;
  • современная архитектура.

Если вы выбираете Rust в качестве основного языка проекта, взгляните на наше сравнение стратегий Rust и C++.

Когда Rails всё ещё лучше

Ruby on Rails остаётся сильнее в:

  • зрелости экосистемы;
  • количестве гемов (gems);
  • скорости MVP-разработки;
  • найме разработчиков;
  • документации;
  • сообществе.

Rails — проверенный временем фреймворк с огромной историей.

Loco пока молод.


Итог

Loco — одна из самых интересных попыток перенести философию Rails в мир Rust.

Фреймворк сочетает:

  • MVC
  • генераторы
  • SeaORM
  • кеш
  • воркеры
  • conventions
  • современный async Rust

Главная идея Loco — сделать Rust web-разработку не только быстрой, но и удобной.

Если Rails дал разработчикам “developer happiness”, то Loco пытается дать:

developer happiness + производительность Rust + типобезопасность.

Обсудим ваш проект?

Расскажите о вашей задаче — вернёмся с оценкой сроков и стоимости в течение двух рабочих дней.

Обсудить проект