はじめに
PONOS Advent Calendar 2023の22日目の記事です。
最近Ruby on Rails(以下Rails)を触っていると、「うーん、型が欲しい」とわがままな悩みを抱えていました。
そこでC#のBlazorを触りはじめ、「おー!型だ!」と喜んでいました。
ただBlazorを触っていると「書きずらいな...」とさらに悩みを抱えました。(シンプルに努力不足)
そんな贅沢な悩みを抱えている中、
「RailsライクなWebフレームワークがRustからでたぞ!」
という記事を拝見し「どんなものか...」と触り、「あ、めっちゃRailsや」と感動したので今回のアドベントカレンダーの記事にすることにしました。
Locoとは?
クラスメソッドさんがまとめてくださっているので引用させていただきます。
Loco は、Rails からインスピレーションを得た Rust用のWebフレームワーク
ほぼすべての Rails 機能が含まれているControllerとaxum経由のルーティング
ActiveRecordライクにSeaORMでモデル操作
Rust の安全性・型指定・concurrency モデル・安定したライブラリとエコシステム
デプロイでは単一のバイナリをサーバーにコピーしています。
手間をかけずに100,000 req/secリクエスト捌ける
DB呼び出しでは 50,000 req/sec
前提条件
コマンドラインで扱うcargo、gcloudはインストール済み
GCPの課金も設定済み
開発・実行環境
- ローカル環境
Ubuntu22.04 on WSL2
Visual Studio Code
Docker - クラウドサービス
Google Cloud Platform
準備
https://github.com/loco-rs/loco
のQuick Startを参考にし、一部変更を加えながら準備していきます。
$ cargo install loco-cli
次にloco newを実行
$ loco new
App name? > hello_loco
What would you like to build? › Stateless HTML
ディレクトリをhello_locoへ
$ cd hello_loco
> ~/hello_loco$
Dockerfileと.dockerignoreを準備
# Use the official Rust image.
# https://hub.docker.com/_/rust
FROM rust:1.74.1-slim
# Copy local code to the container image.
WORKDIR /usr/src/app
COPY . .
# Install production dependencies and build a release artifact.
RUN cargo build --release
# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 3000
# Run the web service on container startup.
ENTRYPOINT ["target/release/hello_loco"]
# cargo loco "start"
CMD ["start"]
target
test
DockerとGCP
Docker
イメージ作成
docker build -t hello_loco .
Artifact Registry用にイメージを複製
docker tag hello_loco asia-northeast1-docker.pkg.dev/プロジェクトID/hello-loco-repo/hello_loco:latest
GCP
Artifact Registry
GCPへログイン
gcloud auth login
Artifact Registry へのリクエストを認証するように Docker を構成
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
Artifact Registryの作成
gcloud artifacts repositories create hello-loco-repo --repository-format=docker --location=asia-northeast1 --description="loco Docker repository"
Artifact Registryへイメージをpush
docker push asia-northeast1-docker.pkg.dev/プロジェクトID/hello-loco-repo/hello_loco
Cloud Run
今回Cloud RunはGCP上で操作していきます
- 既存のコンテナ イメージから 1 つのリビジョンをデプロイする
- 選択 Artifact Registry pushしたイメージを選択
- 認証
- 未認証の呼び出しを許可
- コンテナポート
- 3000
上記の操作ができたら「作成」をクリック
作成後にできたURLをクリックして「Welcom to Loco website」が表示されたら完了!
終わりに
いかがでしたでしょうか?
今回超ミニマムな環境構築を行いましたが、モデルやコントローラーもRailsライクに追加できるみたいなので色々試していきたいと思います。(あと型があるので最高)
それでは次回は@oryzae29さんです。
参考・引用