RailsみたいなRustフレームワーク「Loco」でWebAPIを爆速で立ち上げよう!

先日、列車を走らせましたので解説していきます。

前提

・Rust実行環境があること

https://www.rust-lang.org/ja/learn/get-started

Rustフレームワーク「Loco」とは?

公式サイト(https://loco.rs/)によると

「サイドプロジェクトやスタートアップのためのRustの一人用フレームワーク」

と定義されています。

高速でRust APIを立ち上げるためのサーバーサイドフレームワークと言えるでしょう。

うちのチームはクリエイター主体でエンジニアは僕しかいないので最適かもしれません。

以下が挙げられている特徴になります。

バッテリー付属

1人チームを強化します。サービス、データ、メール、バックグラウンドジョブ、タスク、それを動かすCLI、すべてが含まれています。

Railsは素晴らしい


LocoはRailsに従っています。Railsのコンセプトは、最新のRust開発に注意深く適応されています。

自信を持って提供する

一人で開発する人のために最適化されています。複雑な作業や大掛かりな作業は必要ありません。

必要に応じて拡張


必要なときに Loco の一部だけを分割、再構成、または使用できます。苦痛を伴うことなく構築し、成長させることができます。

段階的に構築


必要なものを使う。サービス、データベース付きサービス、バックグラウンドジョブワーカー、タスク。

すべてテスト駆動


わずかな労力でアプリをテストできます。モデル、コントローラ、バックグラウンドジョブなど、自信を持って迅速に出荷。

立ち上げ

cliをインストールします。

$ cargo install loco-cli
$ cargo install sea-orm-cli

新規アプリケーションを作成します。

$ loco new
✔ ❯ App name? · myapp
? ❯ What would you like to build? ›
  lightweight-service (minimal, only controllers and views)
  Rest API (with DB and user auth)
❯ Saas app (with DB and user auth)
🚂 Loco app generated successfully in:
myapp

ポスグレを立ち上げます。

$ docker run -d -p 5432:5432 -e POSTGRES_USER=loco -e POSTGRES_DB=myapp_development -e POSTGRES_PASSWORD="loco" postgres:15.3-alpine

error returned from database: role “loco” does not exist

となった場合は、別のポスグレのdocker image, container, volumeなどを削除してみてください。

myappに移動します。

$ cd myapp

立ち上げます。

$ cargo loco start
Finished dev [unoptimized + debuginfo] target(s) in 21.63s
    Running `target/debug/myapp start`

    :
    :
    :

controller/app_routes.rs:203: [Middleware] Adding log trace id

                      ▄     ▀
                                 ▀  ▄
                  ▄       ▀     ▄  ▄ ▄▀
                                    ▄ ▀▄▄
                        ▄     ▀    ▀  ▀▄▀█▄
                                          ▀█▄
▄▄▄▄▄▄▄  ▄▄▄▄▄▄▄▄▄   ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▀▀█
 ██████  █████   ███ █████   ███ █████   ███ ▀█
 ██████  █████   ███ █████   ▀▀▀ █████   ███ ▄█▄
 ██████  █████   ███ █████       █████   ███ ████▄
 ██████  █████   ███ █████   ▄▄▄ █████   ███ █████
 ██████  █████   ███  ████   ███ █████   ███ ████▀
   ▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀ ██▀
       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

started on port 3000