Loco: удобство ROR, скорость Rust
BackendService Lab.
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.


