Loco はRuby on Railsに似た新しいフレームワークで、開発者はRustでMVCスタイルのウェブ・アプリケーションを書ける。同時実行性、安全性、強力な型付け、パフォーマンスといったRustの言語機能は、Railsやその派生言語よりも優れている。しかし、Locoの開発者は、MVCスタイルのアプリケーションを簡単に構築し、使い慣れた開発者エクスペリエンスを他に求める必要のないRust開発者に焦点を当てている。
Rustには、Axum、Actix、Rocket、Tokio、Warp、Reqwestといったライブラリやフレームワークの包括的なリストがある。しかし、Locoはこの種のRustエコシステム初のフレームワークである。Loco 0.3.1が最新バージョンで、2023年11月以降に16のマイナーバージョンがリリースされている。Locoは独自のCLI、アプリ作成ウィザード、ローカル開発サーバーを持ち、Railsと同じ原則に従っているが、Rustでプログラミングする開発者向けである。
Locoは、David Heinemeier Hansson氏によるブログ記事「The One Person Framework」にインスパイアされたもので、一個人がモダンなアプリケーションを作成するのに十分強力なツールキットというアイデアを推進している。一人の開発者が、アプリケーションを制作段階まで持っていく複雑なプロセスのすべてにかけられる時間はわずかだ。ライブラリの選択、堅牢性、アーキテクチャのスケーラビリティといった重要な決定は、時間と労力を必要とする課題の一部に過ぎない。「One Person Framework」は、これらの決定をフレームワークにまとめることで、開発者に代わって行う。しかし、その代わり、柔軟性を欠く可能性があり、この実装スタイルは慣習やパターンに大きく依存している。
Railsフレームワークの場合、このアプローチは長年にわたって広く称賛されてきた。Railsの普及は驚異的で、他の多くのフレームワークにも影響を与えた。そのひとつがGrailsで、JVM(Java Virtual Machine)上で動作する言語であるGroovyをベースにしている。Locoは、この機能をRust開発者に提供することを目指している。
Locoは、Rustエコシステム内の慣習にならってインストールできる。
$ cargo install loco-cli
新しいLocoアプリは、rails new
と同様に作成できる。
$ loco new
コントローラとルーティングも同様の方法で動作し、フレームワークはAxiomを使用する。以下の関数はJSONレスポンスを返す。
async fn current() -> Result<Json<HomeResponse>> {
format::json(HomeResponse::new("loco"))
}
ルートのリストは、開発者がRailsで定義する方法と同じように、次のように定義できる。
pub fn routes() -> Routes {
Routes::new()
.add("/", get(current))
.add("/loco", get(current))
.add("/:id", get(get_one))
}
Railsの強力な機能の1つは、モデルを生成してREST APIやフロントエンドのビューやコントローラと結びつける機能がある。Locoはモデルに 「sea_orm」 を使っている。モデルの生成も以下のコマンド例で簡単にできる。
$ cargo loco generate model books title:string isbn:string
動作の定義も「ActiveModelBehaviour」を使えば非常に簡単で、関数の前後を定義することも容易だ。さらに、データベースの移行も可能だ。
$ cargo loco generate migration add_web_url
Locoはテストプロセスも提供しており、開発者は「Cargo.toml」で以下のように有効にできる。
[dev-dependencies]
loco-rs = { version = "*", features = ["testing"] }
認証プロセスも、デフォルトのUserエンティティやJWTによるセキュアなAPIを使えばすぐに設定できる。また、デフォルトのAPIには、登録、アクティベーション、パスワードのリセットなど、よく使われる関数が用意されている。
アプリが 「loco-cli」 を介して 「Saas app」 として作成されると、定義済みのルートを持つスターターが生成される。例えば
$ cargo loco routes
.
.
.
[POST] /auth/forgot
[POST] /auth/login
[POST] /auth/register
[POST] /auth/reset
[POST] /auth/verify
[GET] /user/current
Locoは、Railsの経験とRustの強力な言語機能を基盤としている。モデル生成、動作定義、マイグレーション、テストなどを提供し、Rustエコシステムとうまく統合している。このプロジェクトは比較的新しいが、RustのWebフレームワークにまたひとつ面白そうなものが加わった。