functional-ts-ja
Functional Domain Modeling in TypeScript
サーバーサイドTypeScriptでドメインモデルを書くときの原則。classベースのOOPではなく、TypeScriptの型システムを最大限に活用した関数型アプローチを採る。
1. 型によるドメインモデリング
Discriminated Unionで状態を表現し、kind をdiscriminantとして統一する。type(interface ではなく)、Companion Object、Branded Types、Readonly<>、関数プロパティ記法、1概念1ファイル構成を使う。
バリデーションライブラリの検出: プロジェクトの package.json の dependencies / devDependencies を確認:
zod→ validation-libraries/zod.mdvalibot→ validation-libraries/valibot.mdarktype→ validation-libraries/arktype.md
2. 関数による状態遷移
純粋関数で状態遷移を表現する。関数の引数型が有効な遷移元を制約し、戻り値型が遷移先を明示する。無効な遷移はコンパイルエラーになる。assertNever で網羅性をチェックする。
More from iwasa-kosui/functional-ts-principles
functional-ts
Use when writing server-side TypeScript code involving domain models, use cases, repositories, state transitions, or business logic. Guides functional domain modeling with discriminated unions, pure functions, and Result types.
17functional-ts-review
Use when reviewing TypeScript server-side code for adherence to functional domain modeling principles. Checks the same principles enforced by the `functional-ts` skill — discriminated unions, companion objects, branded types, immutability, file structure, pure state transitions, exhaustiveness, Result-based error handling, boundary defense (schema validation, no `as`, PII protection), declarative style, and type-safe test data.
17functional-ts-review-ja
サーバーサイドTypeScriptコードを関数型ドメインモデリング原則に照らしてレビューする。`functional-ts-ja` スキルと同じナレッジを参照し、Discriminated Union、Companion Object、Branded Types、不変性、ファイル構成、純粋関数による状態遷移、網羅性チェック、Result型によるエラーハンドリング、境界の防御(スキーマバリデーション・`as` 禁止・PII 保護)、宣言的スタイル、型安全なテストデータをチェックする。
9