はじめに
ソースリポジトリ: kamae-rs
Kamae(構え)— 備えの姿勢。
Kamae Rust は、サーバーサイドのドメインコードを型で守り、レビューしやすくするための設計スタンスとガイド集である。kamae-ts の Rust 向け兄弟プロジェクトで、同じ思想を Rust のイディオムに落とし込んでいる。
すべてのリファレンスを通読する必要はない。今のタスクに関係するトピックだけを開けばよい。各リファレンス末尾の レビュー観点 に、そのトピックのコードレビューで確認すべき項目がある。
何を目指すか
Section titled “何を目指すか”Kamae が守りたいのは、次のような失敗である。
- 文字列や数値のまま混在するドメイン概念
statusフィールドとオプショナル列で表せてしまう無効な状態unwrapやpanic!に頼る想定内の失敗処理- API JSON や DB 行をそのままドメイン型として使う境界の曖昧さ
- ログ・メトリクス・エラーへの PII 漏洩
- 状態変更とドメインイベントの非アトミックな永続化
Rust では、列挙型・newtype・プライベートフィールド・TryFrom といった型機能で、実用的な範囲でこれらをコンパイル時または構築時に弾く。
- 意味を型で表す — 列挙型、構造体、newtype、検証付きコンストラクタでドメイン概念をモデル化する。
- 無効な遷移を型で封じる — ソース状態ごとに遷移メソッドや型を分け、網羅的な
matchで分岐を閉じる。 Resultで失敗を明示する — ドメイン固有のエラー列挙型とともにResult<T, E>を使い、ドメインコードではpanic!・unwrap()・expect()を避ける。- 境界で一度パースする — 外部データは DTO / 行 / 設定構造体に入れてから
TryFromでドメイン型へ変換する。 - ユースケースは小さく配線する — ポート(トレイト)経由で依存を受け取り、アダプタはコンポジションルートで注入する。
- 集約の変更はトランザクション内に — 実用的な範囲で、ユースケースごとに集約の変更を 1 つのトランザクション境界に収める。
- PII とシークレットは内側に — マスキング用ラッパーの内側に置き、観測経路ではデフォルトでマスクする。
unsafeは境界に閉じる — ドメインロジックからは排除し、必要なら文書化された安全性不変条件を持つ小さな安全 API の背後に隠す。- 品質ゲートを揃える —
rustfmt・clippy・テスト・rustdoc をクリーンに保ち、CI をレビュー前提と一致させる。
これらは強い既定であり、絶対ではない。既存のプロジェクト慣習と矛盾する場合は慣習に従い、ドメイン安全性に影響する逸脱は短い説明を残す。
状況別の読み方
Section titled “状況別の読み方”新規ドメインを設計するとき
Section titled “新規ドメインを設計するとき”既存コードベースへ段階的に導入するとき
Section titled “既存コードベースへ段階的に導入するとき”オブザーバビリティと PII だけ見るとき
Section titled “オブザーバビリティと PII だけ見るとき”インフラ・開発環境の整備
Section titled “インフラ・開発環境の整備”| 関心 | リファレンス |
|---|---|
| ユースケース配線、DI | アプリケーション配線 |
| サービス間契約、gRPC | サービス境界 |
| ストリーム、継続クエリ | ストリームと継続クエリ |
| マクロ、derive | ドメインマクロ |
unsafe、FFI | unsafe 境界 |
| テスト、フィクスチャ | テストデータ |
| プロパティベーステスト | プロパティベーステスト |
| フォーマット、lint、品質ゲート | 品質ゲート |
| 公開 API の rustdoc | 公開 API のドキュメント |
| ローカル開発・ブートストラップ | 開発環境 |
| スキルリポジトリの開発 | スキルリポジトリの開発 |
| CI | CI セットアップ |
依存クレート
Section titled “依存クレート”プロジェクトの Cargo.toml に応じて、必要なときだけ クレートガイド を参照する。
| 用途 | ガイド付きクレート | 検出のみ(ローカル慣習の参考) |
|---|---|---|
| エラー | thiserror、anyhow、eyre | snafu |
| シリアライズ | serde | serde_json、toml、config |
| 検証 / newtype | validator、garde、nutype | derive_more |
| PII / シークレット | secrecy | zeroize |
| ログ / トレース | tracing、log、metrics | opentelemetry、prometheus |
| テスト | proptest | quickcheck、trybuild |
リファレンス一覧
Section titled “リファレンス一覧”- アプリケーション配線
- 段階的導入
- ドメインモデリング
- 状態遷移
- エラーハンドリング
- 境界防御
- PII 保護
- ロギングとメトリクス
- unsafe 境界
- 品質ゲート
- 公開 API のドキュメント
- CI セットアップ
- 開発環境
- スキルリポジトリの開発
- 永続化、集約、イベント
- ストリームと継続クエリ
- ドメインマクロ
- サービス境界
- テストデータ
- プロパティベーステスト
タクシー配車の例 で、状態遷移とドメインイベントの流れを一通り追える。