# v1.2.0 (2025-10-27)

このリリースは、Mock デバイスの閾値書き込み機能を実装した重要なアップデートです。
レスポンスキュー（Response Queue）パターンにより、ハードウェアなしで閾値設定機能をテストできるようになりました。

## ✨ v1.2.0 での改善点

このマイルストーンは、以下を実現します。

- **Mock デバイスのレスポンスキュー**: BaseMocker にレスポンスキューを追加し、デバイスシミュレーション機能を拡張
- **閾値書き込み Mock 対応**: `write_threshold()` 関数が自動的に Mock デバイスを検出しレスポンスをシミュレート
- **ハードウェア不要なテスト**: `--mock` フラグで実デバイスなしに閾値設定コマンドを実行可能
- **完全な後方互換性**: 既存の DAQ 機能は一切変更なし、既存テスト 95 件すべてが引き続き合格

## 🎯 Mock デバイスによる閾値書き込み（User Story 1 - MVP）

### 新機能: シングルチャンネル閾値設定

- **`threshold write --mock`**: Mock デバイスでの閾値書き込みが可能に
  ```bash
  haniwers-v1 threshold write --thresholds "1:100" --mock
  ```
  - リアルタイムデバイスと同じプロトコルをシミュレート
  - チャンネルエコーレスポンス（`"1"` など）を自動生成
  - デバイス拒否レスポンス（`"dame"`）の注入テストに対応

### レスポンスキューの実装

- **BaseMocker にレスポンスキュー追加**:
  - `_response_queue: deque` - 閾値レスポンス専用のキュー
  - FIFO（先入先出）方式でレスポンスを管理
  - 通常のデータ取得には影響なし

- **新メソッド `set_next_response()`**:
  - 閾値書き込み操作用のレスポンスをキュー登録
  - Mock デバイスの動作をシミュレート
  - 例：`mocker.set_next_response("1")` でチャンネル 1 の成功レスポンスを予定

- **`readline()` の拡張**:
  - Mocker と RandomMocker の両者で対応
  - キューにレスポンスがある場合は優先的に返却
  - キューが空の場合は通常のセンサーデータを返却

### Mock デバイス自動検出

- **`write_threshold()` の改善**:
  - `isinstance(device, BaseMocker)` で Mock デバイスを自動検出
  - 検出時は自動的にチャンネルエコーレスポンスをキュー登録
  - API 変更不要 - 既存コードはそのまま動作

## 🧪 テスト強化

### 新規ユニットテスト（18 件）

**レスポンスキュー機能テスト（9 件）**:
- 単一応答のキュー登録と取得
- 複数応答の FIFO 順序確認
- キュー空時のセンサーデータ取得
- クローズデバイスでのレスポンス返却
- 特殊文字・ホワイトスペースハンドリング

**Mock デバイス閾値書き込みテスト（10 件）**:
- Mock デバイス自動検出
- 成功レスポンスでの書き込み成功
- 拒否レスポンス（`"dame"`）での書き込み失敗
- チャンネル・閾値バリデーション
- マルチチャンネル順序処理
- プロトコル準拠性確認

### テスト成功率

| テストスイート | 結果 | 詳細 |
|---------------|------|------|
| 新規テスト | ✅ 18/18 | レスポンスキュー + Mock 閾値書き込み |
| v1 ユニットテスト全体 | ✅ 409/409 | 後方互換性確認済み |
| 既存 Mocker テスト | ✅ 95/95 | 既存機能影響なし |
| コード品質 | ✅ Pass | ruff format, pre-commit OK |

## 🔧 内部実装の改善

### 設計パターン: レスポンスキュー

```python
# Mock デバイス初期化
mocker = RandomMocker(config)

# 閾値書き込み（自動レスポンスキュー）
success = write_threshold(mocker, ch=1, vth=100)
# → 内部で自動的に set_next_response("1") がコール

# 拒否レスポンスをシミュレート
mocker.set_next_response("dame")
success = write_threshold(mocker, ch=1, vth=100)  # False を返却
```

### 後方互換性保証

- ✅ レスポンスキューは完全に追加的（既存コードへの影響ゼロ）
- ✅ Mock デバイス検出は `isinstance()` で非侵襲的
- ✅ DAQ 機能は一切変更なし
- ✅ 既存テスト 95 件すべて継続成功

## 📋 今後の拡張（User Story 2, 3）

### User Story 2: バッチ閾値設定

```bash
haniwers-v1 threshold write --thresholds "1:100;2:120;3:110" --mock
```

### User Story 3: Mock デバイスでのスキャン

```bash
haniwers-v1 threshold scan --mock
```

## 📦 インストール

```bash
pip install haniwers==1.2.0
```

または最新版：

```bash
pip install --upgrade haniwers
```

## 🔗 関連リンク

- [完全な変更ログ](../../CHANGELOG.md#120-2025-10-27)
- [仕様書](../../specs/018-mocker-response-queue/)
- [実装ドキュメント](../../docs/progress/entries/2025-10-27-mocker-response-queue.md)
- [ドキュメント](https://qumasan.gitlab.io/haniwers/docs/)
- [Issues](https://gitlab.com/qumasan/haniwers/-/issues)
- [リリースタグ](https://gitlab.com/qumasan/haniwers/-/tags/1.2.0)

---

**リリース担当**: shotakaha
**リリース日**: 2025-10-27
**MR**: [!100 - feat: add response queue to mocker for threshold write operations](https://gitlab.com/qumasan/haniwers/-/merge_requests/100)
