| name | rust-coding-conventions |
| description | Mastering Rust/Win32 development by enforcing strict layered architecture (GUI -> App -> Domain <- Infra) and Win32 API isolation. This skill mandates pure Rust domains, RAII-based resource management to prevent GDI leaks, and explicit safety comments for unsafe blocks. Use during code implementation or review to ensure dependency direction and memory safety. |
Rust/Win32 コーディング規約
命名規則
| 対象 | 形式 | 例 |
|---|
| 変数・関数・モジュール | snake_case | cursor_position_x |
| 型 (Struct, Enum, Trait) | PascalCase | TerminalWorkflow |
| 定数 | SCREAMING_SNAKE_CASE | MAX_BUFFER_SIZE |
| ファイル名 | 構造体名のsnake_case | terminal_service.rs |
| bool型 | 述語形式 | is_visible, has_focus, can_scroll |
例外: Win32 API FFI境界(DllMain, OnCommand等)のみPascalCase/CamelCaseを許容。lib.rs内に限定。
アーキテクチャ
依存方向: 外側 → 内側
GUI → Application → Domain ← Infrastructure
レイヤー責務
| レイヤー | 責務 | 制約 |
|---|
Domain (src/domain/) | 状態、データ表現、Repository Trait定義 | windowsクレート依存禁止 |
Application (src/application/) | ユースケース、レイヤー間調整 | 具体的な描画方法を知らない |
Infrastructure (src/infra/) | OS/外部システムとの対話 | Win32 APIをここに閉じ込める |
GUI (src/gui/) | 描画、ユーザー入力受け取り | 巨大関数を作らない |
データモデリング
プリミティブ型の羅列を避け、意味のある構造体を定義する。
fn handle_key(vk_code: u16, ctrl: bool, shift: bool)
fn handle_key(key: InputKey)
安全性ガイドライン
unsafeの局所化: 最小限に抑える
- Safety Comment必須: なぜ
unsafeが必要か、なぜ安全かを記述
- FFI境界: 生ポインタは即座に安全なRust型に変換
- リソース管理:
DropトレイトでRAIIパターンを使用(GDIオブジェクトのリーク防止)
- Panic禁止:
unwrap()/expect()を避け、Resultを返す
ファイルサイズ
1ファイル300行制限: 超えたら設計見直しを検討
テスト戦略
| レイヤー | 目標 |
|---|
| Domain | カバレッジ90%以上 |
| Application | ドメインとの協調をテスト、必要に応じてモック |
| Infrastructure/GUI | ロジックを分離し、純粋な計算部分のみテスト |
必須ツール
cargo fmt
cargo clippy