# GenreType 値オブジェクト仕様書

## 1. 目的
小説のジャンルを表現し、ジャンルごとの品質チェック設定を提供する値オブジェクト

## 2. 前提条件
- ジャンル名は空文字列不可
- 値オブジェクトとして不変性を保証（frozen=True）
- ジャンルごとに異なる品質チェック基準を持つ

## 3. 主要な振る舞い

### 3.1 初期化と検証
- **入力**: ジャンル名（文字列）
- **処理**: 空文字列チェック
- **出力**: GenreTypeインスタンス
- **例外**: ValueError（空文字列の場合）

### 3.2 ジャンル名取得
- **入力**: なし
- **処理**: 内部のvalue属性を返す
- **出力**: ジャンル名（文字列）

### 3.3 デフォルト品質設定取得
- **入力**: なし
- **処理**: ジャンルに応じた品質設定を返す
- **出力**: 品質設定辞書
- **サポートジャンル**:
  - ファンタジー: ひらがな比率45%以下、会話比率25-55%
  - 恋愛: ひらがな比率40%以下、会話比率35-65%（会話重視）
  - ミステリー: ひらがな比率35%以下、会話比率30-55%（説明重視）
  - その他: デフォルト設定（ひらがな比率40%以下、会話比率30-60%）

### 3.4 等価性比較
- **入力**: 比較対象オブジェクト
- **処理**: GenreType同士のvalue比較
- **出力**: bool値

### 3.5 ハッシュ化
- **入力**: なし
- **処理**: valueのハッシュ値を計算
- **出力**: ハッシュ値（int）

## 4. 実装チェックリスト
- [x] 空文字列検証
- [x] 不変性の保証（frozen=True）
- [x] ジャンル別品質設定の定義
- [x] 等価性比較の実装
- [x] ハッシュ化の実装
- [ ] テストケース作成
