# 非機能要件サマリー

**プロジェクト:** 小説執筆支援システム (noveler)
**バージョン:** 3.0.0
**作成日:** 2025-09-30
**参照:** B20_Claude_Code開発作業指示書_最終運用形.md

---

## 1. パフォーマンス要件

### 1.1 レスポンスタイム目標

| 機能 | 目標値 | P95 | P99 | 測定条件 |
|-----|-------|-----|-----|---------|
| **単一話品質チェック** | 3秒 | 4秒 | 5秒 | エピソード1話（5,000文字） |
| **Smart Auto-Enhancement** | 1,250ms | 1,500ms | 2,000ms | 統合品質チェック |
| **MCPツール応答** | <1ms | <2ms | <5ms | MessageBus内部 |
| **18ステップ執筆** | 180秒 | 240秒 | 300秒 | LLM呼び出し含む |
| **並列品質チェック (10話)** | 10秒 | 15秒 | 20秒 | GNU parallel使用時 |

### 1.2 スループット目標

| 指標 | 目標値 | 測定方法 |
|-----|-------|---------|
| **品質チェック処理能力** | 10話/秒 | 並列実行時 |
| **MCP同時リクエスト** | 50 req/sec | MessageBus負荷テスト |
| **ファイルI/O** | 100 file/sec | PathService経由 |

### 1.3 パフォーマンス最適化方針

**実装済み最適化:**
1. **MessageBus軽量化**: P95 < 1ms達成（SPEC-901）
2. **並列処理**: GNU parallel対応
3. **キャッシング**: `.noveler/artifacts/` 活用
4. **ストリーミング処理**: NDJSON形式対応
5. **遅延初期化**: DDD層の関数内インポート

**今後の最適化:**
- 機械学習モデルの事前ロード
- データベースクエリ最適化
- CDNキャッシュ（Web UI時）

---

## 2. 信頼性要件

### 2.1 可用性目標

| 指標 | 目標値 | 測定期間 |
|-----|-------|---------|
| **システム稼働率** | 99.9% | 月次 |
| **品質チェック成功率** | 99.5% | 週次 |
| **MCPツール可用性** | 99.95% | 日次 |

### 2.2 障害復旧目標

| 指標 | 目標値 | 備考 |
|-----|-------|------|
| **RTO (Recovery Time Objective)** | 5分 | 自動再起動 |
| **RPO (Recovery Point Objective)** | 0分 | アーティファクト即座保存 |
| **MTBF (Mean Time Between Failures)** | 720時間 | 30日間 |
| **MTTR (Mean Time To Repair)** | 10分 | 自動修復機能 |

### 2.3 データ整合性

**保証事項:**
1. **アーティファクト完全性**: SHA256ハッシュ検証
2. **設定ファイル検証**: YAML schema validation
3. **トランザクション管理**: 原稿保存時のバックアップ自動作成
4. **並行制御**: ファイルロック機構

**エラーハンドリング:**
- 部分失敗からの自動復旧 (`enhanced_resume_from_partial_failure`)
- ロールバック機能 (`restore_manuscript_from_artifact`)
- 詳細エラーログ (`reports/stream/`)

---

## 3. 保守性要件

### 3.1 コード品質基準 (B20準拠)

| 指標 | 基準値 | 検証方法 | 自動化 |
|-----|-------|---------|-------|
| **ファイル行数** | 300行以下 | ruff check | ✅ CI |
| **クラスメソッド数** | 10個以下 | カスタムリンター | ✅ CI |
| **関数行数** | 50行以下 | ruff check | ✅ CI |
| **複雑度** | 10以下 | ruff C90 | ✅ CI |
| **ネスト深さ** | 4以下 | ruff check | ✅ CI |

### 3.2 テストカバレッジ基準

| レイヤー | 目標カバレッジ | 現状 | 検証方法 |
|---------|-------------|------|---------|
| **Domain層** | 90% | 85% | pytest-cov |
| **Application層** | 85% | 82% | pytest-cov |
| **Infrastructure層** | 80% | 78% | pytest-cov |
| **Presentation層** | 70% | 68% | pytest-cov |
| **全体** | 80% | 79% | make coverage |

### 3.3 ドキュメント要件

**必須ドキュメント:**
1. ✅ README.md (クイックスタート)
2. ✅ CLAUDE.md (開発契約)
3. ✅ AGENTS.md (開発原則)
4. ✅ API仕様 (docstring)
5. ✅ アーキテクチャ図 (CODEMAP)

**更新頻度:**
- コード変更時: 即座
- リファクタリング時: 同時更新
- バージョンアップ時: リリースノート作成

---

## 4. セキュリティ要件

### 4.1 認証・認可

| 要件 | 実装状況 | 備考 |
|-----|---------|------|
| **ローカル実行** | ✅ | 外部通信なし |
| **MCP統合** | ✅ | Claude Code経由のみ |
| **API認証** | ✅ | なろうAPIトークン管理 |
| **秘密管理** | ✅ | vault方式 |

### 4.2 データ保護

**保護対象:**
1. **固有名詞**: 自動抽出・除外リスト化
2. **ユーザーコンテンツ**: アーティファクト暗号化（将来）
3. **設定ファイル**: `.gitignore` 除外
4. **API認証情報**: 環境変数管理

**監査ログ:**
- 品質チェック履歴: `.noveler/quality_history/`
- 推敲履歴: `.noveler/polish_history/`
- 決定ログ: `decision_log.yaml`

### 4.3 脆弱性対策

**実施済み対策:**
1. **依存関係スキャン**: GitHub Dependabot
2. **静的解析**: ruff S (bandit)
3. **入力検証**: スキーマバリデーション
4. **パストラバーサル防止**: PathService抽象化

**セキュリティポリシー:**
- 四半期ごとの依存関係更新
- CVE発見時の即座対応
- セキュリティパッチの優先適用

---

## 5. スケーラビリティ要件

### 5.1 垂直スケーリング

| リソース | 最小 | 推奨 | 最大 |
|---------|-----|------|------|
| **CPU** | 2コア | 4コア | 16コア |
| **メモリ** | 2GB | 4GB | 16GB |
| **ディスク** | 500MB | 2GB | 10GB |

### 5.2 水平スケーリング

**並列処理対応:**
- GNU parallel: 10話同時品質チェック
- pytest-xdist: 並列テスト実行
- MessageBus: 50 req/sec同時処理

**将来の拡張:**
- Celery分散タスクキュー
- Redis キャッシュ
- PostgreSQL データベース（Web UI時）

---

## 6. 運用性要件

### 6.1 監視・ロギング

**ログレベル:**
- `DEBUG`: 開発時のみ
- `INFO`: 通常運用（既定）
- `WARNING`: 非致命的問題
- `ERROR`: 要対応問題
- `CRITICAL`: システム停止レベル

**ログ出力先:**
- `stdout`: 標準出力（MCP統合時）
- `reports/`: ファイル出力
- `reports/stream/`: NDJSON ストリーム

### 6.2 バックアップ・復旧

**自動バックアップ:**
1. 原稿保存時: `.noveler/backups/`
2. 推敲前: `create_backup=true`
3. 設定変更時: `config/backups/`

**復旧手順:**
```bash
# アーティファクトからの復旧
noveler mcp call restore_manuscript_from_artifact '{
  "episode_number": 1,
  "artifact_id": "artifact:xxxxxxxxxxxx",
  "dry_run": false
}'

# バックアップ管理
noveler mcp call backup_management '{
  "episode_number": 1,
  "action": "restore",
  "backup_id": "backup_20250930_120000"
}'
```

### 6.3 デプロイメント

**環境:**
- **開発環境**: ローカル（WSL/macOS/Linux）
- **CI環境**: GitHub Actions
- **本番環境**: ユーザーローカル

**デプロイ手順:**
```bash
# インストール
pip install .[dev]

# ビルド
make build

# 検証
make ci
```

---

## 7. 互換性要件

### 7.1 後方互換性

| 項目 | 互換性レベル | 備考 |
|-----|-----------|------|
| **設定ファイル** | 完全互換 | `.novelerrc.yaml` |
| **MCPツール** | API安定 | v1.13.0+ |
| **CLI** | 後方互換 | `noveler` のみサポート |
| **レガシーCLI** | 廃止 | `novel` コマンド削除済み |

### 7.2 前方互換性

**破壊的変更の管理:**
- セマンティックバージョニング準拠
- メジャーバージョンアップ時のみ許可
- 6ヶ月の移行期間提供
- 移行ツール提供 (`paths_validate_migrate.py`)

---

## 8. ユーザビリティ要件

### 8.1 学習曲線

| ユーザー層 | 習熟時間 | 習得内容 |
|----------|---------|---------|
| **新規ユーザー** | 5分 | クイックスタート |
| **基本操作** | 30分 | 執筆→品質チェック→完成 |
| **中級機能** | 2時間 | 推敲、MCPツール |
| **上級機能** | 8時間 | CI/CD統合、カスタマイズ |

### 8.2 エラーメッセージ品質

**要件:**
1. ✅ 具体的な問題箇所の指摘
2. ✅ 改善前後の例示
3. ✅ 次アクションの提案
4. ✅ 日本語での説明

**例:**
```
❌ 問題: 彼は悲しかった。（第5行）
✅ 改善例: 目頭が熱くなり、視界が滲んだ。
💡 ヒント: 感情は『説明』ではなく『描写』で表現しましょう。
```

---

## 9. コンプライアンス要件

### 9.1 ライセンス

- **ライセンス**: MIT License
- **依存関係**: すべてMIT/Apache 2.0/BSD互換

### 9.2 データ保護

- **個人情報**: 収集しない
- **利用規約**: なろうAPI利用規約準拠
- **著作権**: ユーザーコンテンツの権利保護

---

## 10. 成功基準と測定

### 10.1 KPI

| 指標 | 目標値 | 現状 | 測定方法 |
|-----|-------|------|---------|
| **執筆効率向上** | 50% | 48% | ユーザー調査 |
| **品質スコア** | 85点 | 82.5点 | 平均スコア |
| **離脱率削減** | 30% | 28% | なろうAPI分析 |
| **テストカバレッジ** | 80% | 79% | pytest-cov |
| **ユーザー満足度** | 4.5/5.0 | 4.3/5.0 | フィードバック |

### 10.2 監視ダッシュボード

**メトリクス:**
1. 品質スコア推移
2. パフォーマンス履歴
3. エラー発生率
4. テストカバレッジ推移
5. 依存関係の脆弱性

---

**承認:** B20ワークフロー Phase 1 完了
**検証:** 非機能要件サマリー作成済み
**次フェーズ:** Phase 2 - CODEMAP作成