SKILL.md
F#↔C# Type Conversion Patterns
概要
このSkillは、F# Domain/Application層とC# Infrastructure/Web層の境界で発生する型変換パターンを自律的に適用します。Phase B1 Step7で確立・実証された4つの変換パターンを提供します。
使用タイミング
Claudeは以下の状況でこのSkillを自律的に使用すべきです:
- F#↔C#境界コード実装時
- Contracts層のTypeConverter実装 - Blazor ServerコンポーネントからF# Applicationサービス呼び出し - C# Infrastructure層からF# Domainモデル変換
- 型変換エラー発生時
- IsOkアクセスエラー - Record型のRead-onlyプロパティエラー - Discriminated Unionのパターンマッチングエラー - Option型のnull参照エラー
- 契約層作業時
- contracts-bridge Agent作業時の自動参照 - DTOとDomainモデル間の変換実装時
4つの型変換パターン
1. F# Result型 ↔ C# 統合パターン
詳細: [patterns/result-conversion.md](./patterns/result-conversion.md)
概要:
- IsOk/ResultValueアクセスパターン(推奨)
- NewOk/NewError生成パターン
- Railway-oriented Programming統合
典型的なエラー: Error CS1061: 'FSharpResult<T, E>' does not contain a definition for 'IsOk'
2. F# Option型 ↔ C# 統合パターン
詳細: [patterns/option-conversion.md](./patterns/option-conversion.md)
概要:
- Some/None生成パターン
- IsSome/Valueアクセスパターン
- null許容型変換パターン
典型的なエラー: Option型のnull参照エラー
3. F# Discriminated Union ↔ C# 統合パターン
詳細: [patterns/du-conversion.md](./patterns/du-conversion.md)
概要:
- switch式パターンマッチング
- Role型(Discriminated Union)のC#統合
- Enumとの違い(重要)
典型的なエラー: Error CS0246: The type or namespace name 'Role' could not be found
4. F# Record型 ↔ C# 統合パターン
詳細: [patterns/record-conversion.md](./patterns/record-conversion.md)
概要:
- コンストラクタベース初期化パターン(必須)
- camelCaseパラメータ使用
- Read-onlyプロパティ対応
典型的なエラー: Error CS0200: Property or indexer cannot be assigned to -- it is read only
品質基準
このSkillを適用した実装は以下を満たすべきです:
- ✅ 型安全性: コンパイル時型チェック完全通過
- ✅ 実行時安全性: null参照例外ゼロ
- ✅ パフォーマンス: 不要な変換オーバーヘッドなし
- ✅ 可読性: F#/C#それぞれの慣用句に準拠
Phase B1での実証結果
- 実装箇所: 36ファイル(Contracts層7ファイル・Web層3コンポーネント)
- 修正エラー数: 36件の型変換エラーを完全解決
- 品質評価: 97/100点(Clean Architecture準拠)
- 成功率: 100%(0 Warning/0 Error達成)
関連Agents
- contracts-bridge: F#↔C#境界実装専門Agent(このSkillの知見を活用)
- csharp-web-ui: Blazor Server実装時にこのSkillを参照
- csharp-infrastructure: Infrastructure層実装時にこのSkillを参照
注意事項
- F# Record型は不変型: C#のオブジェクト初期化子は使用不可
- Discriminated UnionはEnumではない: switch式でパターンマッチング必須
- Option型はnullではない: IsSome/Noneチェック必須
- Result型は例外ではない: IsOk/ErrorValueで明示的処理
参考資料
- Phase B1 Step7実装記録:
Doc/08Organization/Completed/PhaseB1/Step07_完了報告.md - contracts-bridge Agent定義:
.claude/agents/contracts-bridge.md - techstackand_conventionsメモリー: F#↔C# 型変換パターンセクション