Open8

Locoを使いこなしたい話

泡沫京水泡沫京水

Locoってなあに?

Locoは、Ruby on RailsライクなRustのフレームワークであると認識していれば大体OKです。
公式ページに飛んだらデカデカと It’s Like Ruby on Rails, but for Rust. って書いてあります。
Railsによる良い開発体験を、パフォーマンスと安全性の高いRust言語上で実現するというのが目的なんだと思っています。

scaffoldが使える!

Railsでは、MVCの仕組みを採用しており、scaffoldというコマンドによって
新しいスキーマを扱いたい時、そのスキーマに関するファイルを生成してくれます。
なんと!Locoにもあります!とても嬉しいですね!

Node.js(Express)や大元のRailsより速い!

https://loco.rs/#:~:text=Loco packs a lot of features and still gives you 10x more performance compared to Node.js
もうここを見てもらった方が早いと思うのですが、
なんとNode.jsと比較して10倍の速度が得られる可能性があるとのことです

じゃあRailsからお引越しした方がいい?

https://zenn.dev/miguel/articles/f052de93fc9980
Rustがなかなか難しいところもあるので、
Rustでプログラムを書くことに慣れてからの方がいいでしょう

泡沫京水泡沫京水

必要なものを入れよう

cargo install loco
cargo install sea-orm-cli # DBを扱うことが必要なときに導入

Locoのアプリケーションを作成する

loco new

を実行すると

  • アプリケーション名
  • どんなものを作成するか?
  • どのDBを使用するか?
  • バックグラウンドで動作するワーカーはどのようなものがいい?
泡沫京水泡沫京水

Locoの開発サーバを立ててみよう

今回は

項目 回答
アプリ名 backend
作成コンテンツ Saas App with client side rendering
使用DB Postgres
バックグラウンドで動作するワーカー Async (in-process tokio async tasks)

で作成する

泡沫京水泡沫京水

そうすると、以下のようなディレクトリ構造のもと、様々なファイルが生成される

[命名したフォルダ]
├── config
├── examples
├── frontend
├── migration
├── src
├── target
└── tests
泡沫京水泡沫京水

さ〜て今回作るものは〜?

お薬飲む時間通知サーバ

法に触れないかがこわかったので聞いてみた

とても良い質問ですね!個人で「薬の飲み忘れ防止プログラム」を作成・公開する場合、日本では いくつかの法律や規制との関係を把握しておく必要 がありますが、基本的に**「医療行為」や「薬機法(旧・薬事法)」に触れないよう注意すれば大丈夫**です。

以下に主なポイントをまとめます👇


✅ 問題になりにくいケース(多くの場合これに該当)

  • 単に「服薬の時間を通知する」「ユーザーが設定した内容をリマインドする」などの一般的なリマインダーアプリである。
  • 薬の種類や効能についての診断や助言をしない
  • ユーザー自身が入力した薬の情報を使っているだけで、開発者側が処方や助言をしない

この場合は、医療行為ではなく、生活支援アプリとみなされるため、基本的に法律に触れることはありません。


⚠️ 注意が必要な点

  1. 薬機法(旧・薬事法)

    • 医薬品の「効能・効果」をうたうと広告規制に触れる可能性があります。
    • 例:「この薬を飲めば必ず治る」といった表現はNG。
  2. 医師法・薬剤師法

    • 診断や処方を行うと医師でなければ違法行為になります。
    • 例:「この薬を飲んでください」「あなたにはこの薬が合います」などの助言は禁止。
  3. 個人情報保護法

    • 薬の服用履歴は場合によっては要配慮個人情報とされる可能性があります。
    • 特にクラウド保存する場合は、適切な取り扱い・プライバシーポリシーの整備が必要です。

💡 安全に公開するためのコツ

  • アプリやサービスの説明には「医療・診断・処方を目的としたものではありません」と明記する。
  • 「ユーザーが入力した服薬時間を記録・通知するアプリです」と明確に説明する。
  • 万が一のため、プライバシーポリシーと利用規約を用意しておくと安心です。

もし具体的な機能構成や表現を考えている場合、それがグレーかどうかチェックもできますよ!

どういった機能を想定していますか?✨

泡沫京水泡沫京水

scaffoldという機能で一気に生成しちゃう!

さて、scaffoldで爆速開発をしていきましょう!
まずは、それぞれのモデルを生成する必要があります!

# Medicineモデルの作成(既存のUserモデルへの参照)
cargo loco generate scaffold Medicine user:references name:string! count:int! --api

# CronTimeモデルの作成
cargo loco generate scaffold crontime medicine:references hour:int! minute:int --api