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: сохранить удобство разработки, но добавить безопасность памяти, высокую производительность и строгую типизацию.


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

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

  • Axum
  • Actix Web
  • Rocket

Но все они скорее “конструкторы”, чем полноценные batteries-included frameworks.

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

  • готовую структуру проекта;
  • MVC;
  • генерацию кода;
  • ORM-интеграцию;
  • cache;
  • background jobs;
  • auth;
  • миграции;
  • CLI-инструменты.

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


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

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

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

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

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

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

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

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

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

Разработчику не нужно придумывать архитектуру проекта - framework задаёт conventions.


Models в Loco

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

Почему SeaORM

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

  • async-first архитектура;
  • строгая типизация;
  • генерация сущностей;
  • поддержка PostgreSQL/MySQL/SQLite;
  • интеграция с migrations;
  • 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 выигрывают в:

  • compile-time safety;
  • контроле типов;
  • производительности;
  • отсутствии runtime surprises.

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 templates;
  • JSON responses;
  • server-side rendering;
  • API-only режим.

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

  • Askama
  • Tera

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

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

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

rails generate model User
  rails generate controller Users
  

Loco предлагает похожий workflow.


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

cargo loco new
  

или

loco new myapp
  

Framework создаёт:

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

Генерация models

cargo loco generate model User
  

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

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

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


Генерация controllers

cargo loco generate controller Users
  

Создаются:

  • routes;
  • controller file;
  • handlers;
  • шаблон CRUD-операций.

Очень похоже на Rails generators.


Генерация views

Loco также умеет создавать views/templates через CLI.

Например:

cargo loco generate scaffold Post
  

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


Встроенная работа с cache

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

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

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

  • in-memory cache;
  • Redis;
  • async cache layer.

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

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")
  

Background jobs и workers

Как и Rails ActiveJob/Sidekiq ecosystem, Loco поддерживает workers.

Структура:

src/workers/
  

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

  • email jobs;
  • async tasks;
  • scheduled jobs;
  • background processing.

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

Loco использует layered config-систему:

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

Почти идентично Rails environments.


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

1. Convention over configuration

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

2. CLI generators

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

3. MVC

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

4. Batteries included

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

5. Scaffold philosophy

Быстрый CRUD-development.


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

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

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

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

  • high-load APIs;
  • realtime systems;
  • микросервисов;
  • low-latency backend.

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

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

  • memory safety;
  • отсутствие data races;
  • меньше runtime ошибок.

Rails relies heavily on runtime.


Сложность

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

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

  • ownership;
  • lifetimes;
  • async ecosystem;
  • generics.

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


SeaORM vs ActiveRecord

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

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

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

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


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

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

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

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

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

  • зрелости ecosystem
  • количестве gems
  • скорости MVP-разработки
  • hiring
  • документации
  • community

Rails - battle-tested framework с огромной историей.

Loco пока молод.


Итог

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

Framework сочетает:

  • MVC
  • generators
  • SeaORM
  • cache
  • workers
  • conventions
  • современный async Rust

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

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

developer happiness + Rust performance + type safety.