コンテンツにスキップ
検索語を入力してください

    はじめに

    ソースリポジトリ: kamae-rs

    Kamae(構え)— 備えの姿勢。

    Kamae Rust は、サーバーサイドのドメインコードを型で守り、レビューしやすくするための設計スタンスとガイド集である。kamae-ts の Rust 向け兄弟プロジェクトで、同じ思想を Rust のイディオムに落とし込んでいる。

    すべてのリファレンスを通読する必要はない。今のタスクに関係するトピックだけを開けばよい。各リファレンス末尾の レビュー観点 に、そのトピックのコードレビューで確認すべき項目がある。

    Kamae が守りたいのは、次のような失敗である。

    • 文字列や数値のまま混在するドメイン概念
    • status フィールドとオプショナル列で表せてしまう無効な状態
    • unwrappanic! に頼る想定内の失敗処理
    • API JSON や DB 行をそのままドメイン型として使う境界の曖昧さ
    • ログ・メトリクス・エラーへの PII 漏洩
    • 状態変更とドメインイベントの非アトミックな永続化

    Rust では、列挙型・newtype・プライベートフィールド・TryFrom といった型機能で、実用的な範囲でこれらをコンパイル時または構築時に弾く。

    • 意味を型で表す — 列挙型、構造体、newtype、検証付きコンストラクタでドメイン概念をモデル化する。
    • 無効な遷移を型で封じる — ソース状態ごとに遷移メソッドや型を分け、網羅的な match で分岐を閉じる。
    • Result で失敗を明示する — ドメイン固有のエラー列挙型とともに Result<T, E> を使い、ドメインコードでは panic!unwrap()expect() を避ける。
    • 境界で一度パースする — 外部データは DTO / 行 / 設定構造体に入れてから TryFrom でドメイン型へ変換する。
    • ユースケースは小さく配線する — ポート(トレイト)経由で依存を受け取り、アダプタはコンポジションルートで注入する。
    • 集約の変更はトランザクション内に — 実用的な範囲で、ユースケースごとに集約の変更を 1 つのトランザクション境界に収める。
    • PII とシークレットは内側に — マスキング用ラッパーの内側に置き、観測経路ではデフォルトでマスクする。
    • unsafe は境界に閉じる — ドメインロジックからは排除し、必要なら文書化された安全性不変条件を持つ小さな安全 API の背後に隠す。
    • 品質ゲートを揃えるrustfmtclippy・テスト・rustdoc をクリーンに保ち、CI をレビュー前提と一致させる。

    これらは強い既定であり、絶対ではない。既存のプロジェクト慣習と矛盾する場合は慣習に従い、ドメイン安全性に影響する逸脱は短い説明を残す。

    1. ドメインモデリング
    2. 状態遷移
    3. 境界防御エラーハンドリング
    4. 永続化、集約、イベント
    5. タクシー配車の例
    6. 仕上げ前に 品質ゲート

    既存コードベースへ段階的に導入するとき

    Section titled “既存コードベースへ段階的に導入するとき”
    1. 段階的導入
    2. 境界防御
    3. 移行したワークフローごとに、上記「新規ドメイン」のパスを続ける

    オブザーバビリティと PII だけ見るとき

    Section titled “オブザーバビリティと PII だけ見るとき”
    1. PII 保護
    2. ロギングとメトリクス
    関心リファレンス
    ユースケース配線、DIアプリケーション配線
    サービス間契約、gRPCサービス境界
    ストリーム、継続クエリストリームと継続クエリ
    マクロ、deriveドメインマクロ
    unsafe、FFIunsafe 境界
    テスト、フィクスチャテストデータ
    プロパティベーステストプロパティベーステスト
    フォーマット、lint、品質ゲート品質ゲート
    公開 API の rustdoc公開 API のドキュメント
    ローカル開発・ブートストラップ開発環境
    スキルリポジトリの開発スキルリポジトリの開発
    CICI セットアップ

    プロジェクトの Cargo.toml に応じて、必要なときだけ クレートガイド を参照する。

    用途ガイド付きクレート検出のみ(ローカル慣習の参考)
    エラーthiserroranyhoweyresnafu
    シリアライズserdeserde_jsontomlconfig
    検証 / newtypevalidatorgardenutypederive_more
    PII / シークレットsecrecyzeroize
    ログ / トレースtracinglogmetricsopentelemetryprometheus
    テストproptestquickchecktrybuild

    タクシー配車の例 で、状態遷移とドメインイベントの流れを一通り追える。