mcpField
D
domain-web

domain-web

github.com/actionbook開発1.6k3.2k 回インストール9 週間前に更新
リポジトリ

domain-web について

domain-web は、Rust の Web アプリケーション設計を扱うスキルです。非同期ハンドラー、スレッドセーフな状態、リクエストのライフサイクル、検証、可観測性と、それらを実現するフレームワークやパターンを説明します。

主な機能

  1. 01非ブロッキングの非同期ハンドラー
  2. 02スレッドセーフな共有アプリケーション状態
  3. 03リクエスト単位のリソース管理
  4. 04検証付きリクエスト抽出
  5. 05統一されたエラーレスポンス
  6. 06tracing と Tower のミドルウェア

活用シーン

  1. 01ブロッキングを避ける HTTP ハンドラーの設計
  2. 02ハンドラー間でのアプリケーション状態共有
  3. 03受信リクエストデータの検証
  4. 04ミドルウェアによる横断的処理の整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/actionbook/rust-skills --skill domain-web

インストール後、Claude Code で/domain-webを入力して読み込まれたか確認します。

詳細

Web ドメイン

レイヤー 3:ドメイン制約

ドメイン制約 → 設計への影響

ドメインルール設計上の制約Rust での影響
ステートレス HTTPリクエスト単位のグローバル変数を使わないエクストラクターに状態を保持
並行処理多数の接続を処理する非同期、Send + Sync
レイテンシ SLA高速な応答効率的な所有権管理
セキュリティ入力の検証型安全なエクストラクター
可観測性リクエストのトレースtracing + tower レイヤー

重要な制約

デフォルトで非同期
RULE: Web handlers must not block
WHY: Block one task = block many requests
RUST: async/await, spawn_blocking for CPU work
状態管理
RULE: Shared state must be thread-safe
WHY: Handlers run on any thread
RUST: Arc<T>, Arc<RwLock<T>> for mutable
リクエストのライフサイクル
RULE: Resources live only for request duration
WHY: Memory management, no leaks
RUST: Extractors, proper ownership

下位レイヤーへ ↓

制約から設計へ(レイヤー 2):

"Need shared application state"
    ↓ m07-concurrency: Use Arc for thread-safe sharing
    ↓ m02-resource: Arc<RwLock<T>> for mutable state

"Need request validation"
    ↓ m05-type-driven: Validated extractors
    ↓ m06-error-handling: IntoResponse for errors

"Need middleware stack"
    ↓ m12-lifecycle: Tower layers
    ↓ m04-zero-cost: Trait-based composition

フレームワークの比較

フレームワークスタイル最適な用途
axum関数型、towerモダンな API
actix-webアクターベース高パフォーマンス
warpフィルターの合成合成可能な API
rocketマクロ駆動迅速な開発

主なクレート

用途クレート
HTTP サーバーaxum, actix-web
HTTP クライアントreqwest
JSONserde_json
認証/JWTjsonwebtoken
セッションtower-sessions
データベースsqlx, diesel
ミドルウェアtower

設計パターン

パターン用途実装
エクストラクターリクエストの解析State(db), Json(payload)
エラーレスポンスエラーの統一impl IntoResponse
ミドルウェア横断的関心事Tower レイヤー
共有状態アプリ設定Arc<AppState>

コードパターン:Axum ハンドラー

async fn handler(
    State(db): State<Arc<DbPool>>,
    Json(payload): Json<CreateUser>,
) -> Result<Json<User>, AppError> {
    let user = db.create_user(&payload).await?;
    Ok(Json(user))
}

// Error handling
impl IntoResponse for AppError {
    fn into_response(self) -> Response {
        let (status, message) = match self {
            Self::NotFound => (StatusCode::NOT_FOUND, "Not found"),
            Self::Internal(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Internal error"),
        };
        (status, Json(json!({"error": message}))).into_response()
    }
}

よくある間違い

間違いドメイン違反修正方法
ハンドラー内でブロッキング処理を行うレイテンシの急増spawn_blocking
状態に Rc を使うSend + Sync ではないArc を使う
検証を行わないセキュリティリスク型安全なエクストラクター
エラーレスポンスがないUX の悪化IntoResponse を実装

レイヤー 1 へ

制約レイヤー 2 のパターンレイヤー 1 の実装
非同期ハンドラーAsync/awaittokio ランタイム
スレッドセーフな状態共有状態Arc, Arc<RwLock>
リクエストのライフサイクルエクストラクターFrom による所有権
ミドルウェアTower レイヤートレイトベースの合成

関連スキル

場合参照先
非同期パターンm07-concurrency
状態管理m02-resource
エラー処理m06-error-handling
ミドルウェアの設計m12-lifecycle

コメント