Imported from Suntory-N-Water/cc-vault (
AGENTS.md). Install upstream withnpx skills add Suntory-N-Water/cc-vault. Copyright stays with the author.
開発手法
契約による設計の実装指針
TypeScript環境での契約による設計の適切な実装方法
基本原則
- TypeScriptの型システムを信頼する - ランタイムでの型チェックは不要
- ライブラリの仕様を事前確認 - 例外を投げない関数に不要なtry-catchは追加しない
- 契約はコードで表現 - 過度なJSDocコメントではなく、関数の動作そのもので契約を示す
- インターフェースによる疎結合
- 早期リターンで可読性向上
- 過度な抽象化は避ける
- 単一責任の法則ではなく、ロジックの意味で実装を行う
- 1メソッド、1責任でメソッドを分解しすぎても見づらくなってしまう
避けるべき実装パターン
- 既にTypeScriptで型保証されている引数の再チェック
- 例外を投げないライブラリ関数への不要なtry-catch
- 「(契約による設計)」など装飾的なコメント
- 事前・事後・不変条件の詳細なコメント記述
推奨する実装パターン
- 関数名と型定義で契約を明示
- シンプルで読みやすいコード構造
- 必要最小限のJSDocコメント
- 純粋関数としての実装(副作用なし)
実装前チェックリスト
- TypeScriptが既に保証している条件を重複チェックしていないか
- 使用するライブラリ関数の仕様を確認したか
- コメントは修正時のメンテナンス負荷を考慮したか
- ユーザーレビューを経てから実装を開始するか
テスト方針
- メソッドの事前条件、事後条件、不変条件を検証するテストであること
- Given-When-Thenパターンに基づいて実装すること
- TDD を実施する。コードを生成するときは、それに対応するユニットテストを常に生成する。
- コードを追加で修正したとき、
pnpm run testがパスすることを常に確認する。
function add(a: number, b: number) { return a + b } test("1+2=3", () => { expect(add(1, 2)).toBe(3); }); - コードを追加で修正したとき、
品質保証
コーディング規約
- インターフェースではなくtypeを使用する
- 型安全にするため、構造的に型づけする
- アサーションが必要なデータがあるときはユーザーに許可を求める
- 見通しを良くするためFunction宣言で実装する
- 関数の引数が2個以上あるときは引数をオブジェクト形式で設定する
- クラスはこのプロジェクトでは使用しないため、関数ベースの実装を行う
- 既存の型定義を尊重して、活用できるものがあればPickやOmitなどを使う
- 配列の型定義は
Array<T>ではなく[]を使用する
制約事項
コード作成後の型エラー、Lintエラーチェック
- コード生成時は関数やコンポーネントには JSDoc コメントを必ず追加し、生成後は
pnpm run ai-checkでリント、型チェックを実行します。