## 非機能要件 (NFRs)

要件の分割の初期段階で「システムが備えなければならない品質属性」を明示的かつ検証可能にするために使用され、ビジネス機能のみを分割して、実装/ストレステスト/ローンチ時にパッチを当てることを回避します。

適用シナリオ:
- detail/verify/impl に入る前の、あらゆるビジネス要件の「スコープとすり合わせ」
- パフォーマンス、安定性、セキュリティ、コンプライアンス、可観測性、および運用性に対する明示的な制約を持つシステム

タイプ (必要に応じて調整します。各カテゴリは「検証可能」になるように記述する必要があります):

### パフォーマンス (Performance)

「速いか、負荷に耐えられるか」、およびピーク時や異常時に制御可能であるかどうかに焦点を当てます。
- 一般的な懸念事項: 応答時間 (P50/P95/P99)、スループット (QPS/TPS)、同時実行性、ピーク、キューのバックログ、バッチ処理ウィンドウ、レート制限とキューイング戦略。
- 容量のガイドライン: 単一のAPIではなく、「重要なシナリオ」によって容量を定義します。例: 「注文 + 支払いコールバック + 在庫の控除」のエンドツーエンドの遅延と成功率。
- 検証: ストレステスト計画 (データセット/同時実行モデル/ピーク曲線/スケーリング戦略) + ローンチ後のダッシュボード (SLOとアラートしきい値)。

### 信頼性 / 可用性 (Reliability / Availability)

「一貫してサービスを提供できるか」、および障害時に回復して損失を軽減できるかどうかに焦点を当てます。
- 一般的な懸念事項: SLA/SLO、劣化、サーキットブレーカー、タイムアウト、再試行、べき等性、レート制限、分離、ディザスタリカバリ、バックアップと復元、データ整合性戦略。
- 障害の境界: 「部分的な利用不可」を許可する障害 (例: エクスポート/レポート) と、「コアフローを利用可能」に維持する必要がある障害を明確にします。
- 検証: カオスエンジニアリング (タイムアウト/依存関係の利用不可/レート制限/アクティブ-スタンバイ切り替えの注入) + RTO/RPOの受け入れ。

### セキュリティ (Security)

「バイパス、改ざん、漏洩の可能性があるか」、およびリスクが監査可能で追跡可能かどうかに焦点を当てます。
- 一般的な懸念事項: 認証、認可 (RBAC/データ権限)、セッションとトークン管理、暗号化 (転送/保存)、機密情報の処理、監査、脆弱性リスク (OWASP)、サプライチェーンセキュリティ。
- データ保護: どのフィールドが機密であるかを明確にします (匿名化された表示/エクスポート制限/透かし/アクセス監査/最小特権)。
- 検証: 権限ケース (許可/拒否/プロンプト)、セキュリティテスト (スキャン/ペネトレーション/ベースラインチェック)、監査ログのサンプリング。

### コンプライアンス (Compliance)

保持、データのライフサイクル、プライバシー、国境を越えた転送など、「必須のルールがシステムの動作に実装されているか」に焦点を当てます。
- 一般的な懸念事項: 追跡可能性と否認防止、データ保持期間、アクセス制御、エクスポート制限、プライバシー条項、国境を越えた転送、ログの保持、監査フォレンジック。
- ライフサイクル: データの「収集 → 使用 → 共有 → アーカイブ → 削除」戦略を明確にし、トリガー条件と責任者を定義します。
- 検証: 監査チェックリスト + フォレンジックドリル (時間/オペレーター/オブジェクトによってイベントを再構築できるか)。

### 可観測性 (Observability)

「問題を迅速に特定できるか」、および主要なメトリクスが継続的に監視されているかどうかに焦点を当てます。
- 一般的な懸念事項: ログ (構造化/相関ID)、メトリクス (RED/USE)、分散トレーシング、アラート、主要なイベントの追跡、ビジネスファネル、異常率。
- 最小の可観測性セット: すべての重要なフローには `trace_id` が必要であり、重要なアクションには操作ログと監査フィールドが必要です。
- 検証: 制限時間内に根本原因を特定するための、ダッシュボードとアラートのドリル (エラー率の増加/遅延/キューのバックログのシミュレーション)。

### 運用性 (Operability)

「ローンチと変更は制御可能か」、および運用アクションは再現可能、ロールバック可能、監査可能かどうかに焦点を当てます。
- 一般的な懸念事項: 構成管理、カナリアリリース、ロールバック戦略、変更ウィンドウ、データ移行、機能フラグ、ランブック、オンコールと緊急計画。
- 変更管理: カナリアリリースが必要な変更、ダウンタイムウィンドウが必要な変更、ロールバックのトリガー条件、ロールバック手順を明確にします。
- 検証: シミュレートされたリリース (カナリア → 拡大 → ロールバック) により、データ移行とロールバックの操作性を検証します。

### アクセシビリティ (a11y)

「障害のある/高齢の/一時的に制限のあるユーザーが使用できるか」に焦点を当て、法律または組織の標準 (例: WCAG) に準拠します。
- 一般的な懸念事項: キーボードのアクセシビリティ (Tabの順序/表示されるフォーカス)、セマンティック構造 (ARIA)、コントラスト、スケーラブルなフォント、スクリーンリーダーのサポート、フォームのエラープロンプト、切り替え可能なアニメーション。
- インタラクションの要件: すべてのコア操作は、マウス/タッチの精度なしで完了できる必要があります。エラープロンプトはスクリーンリーダーで読み取れる必要があります。
- 検証: 自動スキャン (a11y lint) + 手動ウォークスルー (キーボード/スクリーンリーダー/ハイコントラスト) + 重要なページの受け入れチェックリスト。

### 風習 / ローカリゼーション (Locale & Cultural Conventions)

「異なる地域のユーザーの習慣が尊重されているか」に焦点を当て、互換性のない形式、表現、またはプロセスによる誤用や苦情を回避します。
- 一般的な懸念事項: 言語と用語、時間/タイムゾーン/カレンダー、数値と通貨の形式、小数/千の区切り文字、住所の形式、名前の順序、電話番号のルール、休日と営業日、色/アイコンの意味、コンプライアンスのコピーの違い。
- インタラクションの要件: 時間と金額はタイムゾーン/通貨を指定する必要があります。デフォルトの形式は地域によって異なりますが、ユーザーの切り替えを許可します。文化的仮定をルールにハードコードしないでください。
- 検証: 地域別のテストケース (フォーマット/ソート/検索/検証/エクスポート) + 重要なコピーのレビュー (ローカリゼーションとコンプライアンス)。

### 互換性 (Compatibility)

ブラウザ、デバイス、OSバージョン、APIバージョン、外部依存関係など、「ターゲット環境で実行できるか」に焦点を当てます。
- 一般的な懸念事項: ブラウザ/デバイスのマトリックス、解像度と入力方法 (マウス/タッチ)、APIバージョンの互換性、外部依存関係の互換性と置換戦略、劣化戦略。
- バージョン戦略: 最小サポートバージョンと非推奨戦略を明確にします。互換性を破る変更 (breaking change) には、移行ウィンドウと互換性レイヤーが必要です。
- 検証: 互換性マトリックステスト (メインストリーム + 最小サポート) + リグレッションベースライン + 依存関係の置換ドリル (モック/劣化)。

### 移植性 (Portability)

展開環境の移行、クラウドベンダーの移行、DB/ミドルウェアの置換、地域の拡大など、「移行コストはどのくらい高いか」に焦点を当てます。
- 一般的な懸念事項: 環境に依存しない構成 (12-factor)、インフラストラクチャの抽象化、置換可能な依存関係 (DB/Cache/MQ/Object Storage)、データの移行とロールバック、クロスリージョン展開。
- アーキテクチャの制約: ビジネスレイヤーにベンダーの機能をハードコードすることは避けてください。依存関係には、最小限の機能セットとアダプターレイヤーが必要です。
- 検証: 2番目の環境 (またはローカルのコンテナ化された環境) でエンドツーエンドの展開とリグレッションを完了します。コア依存関係 (例: DB/MQの切り替え) で置換検証を実行します。