本クレートのターゲットは x86_64-unknown-linux-musl
です。
Windowsで開発する場合はWSL2を利用してください。
以下 Ubuntu/Debian を仮定します。
rustup
で Rust ツールチェインをインストールします
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- ビルド依存パッケージをインストールします
- pkg-config, libssl-dev は OS によって異なるパッケージです、ここ を参照してください。
sudo apt install pkg-config libssl-dev build-essential musl-tools
cargo-make
とsea-orm-cli
をcargo
でインストールします
cargo install cargo-make sea-orm-cli
- ツールチェインのインストール
rustup target add x86_64-unknown-linux-musl
- 最後に
server
ディレクトリでcargo make pretty
が実行できることを確認してください。
データベース周りの接続情報は .env.example にまとまっており、 DB を起動するためには .env
ファイルが必要なため、ファイルをコピーします。
必要に応じて値を書きかえてください。
データーベースとサーバーを起動するにはリポジトリのディレクトリトップで up
タスクを実行します。
seichi-portal-backend> makers up
クリーンアーキテクチャを採用しています。
- クレート構成
server
├── app
├── domain
├── infra
│ ├── entities
│ └── resource
├── migration
├── presentation
└── usecase
サーバーの初期化に必要な操作とサーバーの設定・起動を行うサーバーのエンドポイントです。
ドメイン(seichi-portal)を表現するのに必要な構造体およびドメイン固有ロジック(構造体の impl)を置くクレートです。 リポジトリのトレイトの定義もここに置きます(リポジトリはドメイン固有型を返す必要があることに注意してください)。
外部リソースを扱うクレートです。
主にデータベースのコネクションを持つ ConnectionPool
にリポジトリトレイトを実装します。
マイグレーション定義を置くクレートです。 詳しくは SeaORM のドキュメントを参照してください。
axum とユースケースをつなぐハンドラーを実装するクレートです。
ユースケースを実装するクレートです。
実装はドメインが先で、その後はデータの流れの逆順に(データベースから)行うのがおすすめです。
- ドメイン固有型を作る (domain crate)
- リポジトリトレイトを追加する (domain crate)
- 必要ならマイグレーションモジュールを作成する (migration crate)
- マイグレーションを実行して entities を更新する (entities crate)
- ユースケース層が必要なリポジトリを実装する (resource crate)
- ハンドラが呼び出すユースケースをユースケース層に作る (usecase crate)
- axum のルートにわたすハンドラをプレゼンテーション層に作る (presentation crate)
- axum にルートを追加する (app crate)
ワークスペース内で cargo make {タスク}
または makers {タスク}
を実行することで Makefile.toml
に書かれたタスクを実行することができます。
タスク名 | 実行されるタスク | 備考 |
---|---|---|
up-db | docker compose up -d | データベースを立ち上げます |
run-server | cd server && cargo run | server/app をビルドして立ち上げます |
up | up-db -> run-server | 上記 2 つを順番にやってくれます |
cargo ワークスペースで共通のタスクはワークスペースのトップディレクトリで実行すると、すべてのクレートに対してタスクが実行されます。 各クレートのディレクトリのトップで実行すると各クレートに対してタスクが実行されます。
タスク名 | 実行されるタスク | 備考 |
---|---|---|
fix | cargo clippy --fix --allow-dirty --allow-staged | clippy が自動でコードを修正します |
test | cargo nextest run | nextest によるテストの実行を行います |
lint | cargo clippy -- -D warnings | clippy によるコードチェックを行います |
format | cargo fmt | rustfmt によるコード整形を行います |
pretty | fix -> test -> lint -> format の順に実行します | 上記 4 つをすべて実行します、push の前に行うことが推奨されます |
generate-migrate-file <ファイル名> | sea-orm-cli migrate generate <ファイル名> | sea-orm-cliによるデータベースマイグレーションファイルを生成します。 |