Home
Get Started
実践ガイド
外部仕様設計
バッチ処理仕様設計
UAC 仕様設計
データ仕様設計
インフラ設計
移行計画
テスト方針・計画
開発プロセス・規約
非機能要件の実現方式
要件定義で定められた非機能要件を、具体的な技術手段とアーキテクチャで実現するための設計方針と実装方式を定義します。性能、可用性、セキュリティ、保守性、拡張性の各観点から、測定可能な目標値と実現手段を明確化します。
🎯 概要
- 目的: 要件定義で定義された非機能要件(性能、可用性、セキュリティ、保守性など)を具体的な技術手段やアーキテクチャで実現する方式を決定し、開発チームが実装可能な設計に落とし込む
- スコープ: 性能・パフォーマンス、可用性・信頼性、セキュリティ、保守性・運用性、拡張性などの非機能要件の実現方式をカバーする。個別の機能要件の実現方式は対象外
- 推奨する実施タイミング: 通常、システムアーキテクチャ検討の後、各機能の詳細設計を行う前に実施する
- 関連するステークホルダー: システムアーキテクト、プロジェクトマネージャー、インフラチーム、セキュリティチーム、運用チーム
📥 重要な前提知識・インプット
- 前提知識: 非機能要件の分類と評価指標、性能設計の基礎知識、可用性設計パターン、セキュリティ対策の基本、運用設計の考え方
- インプット: 非機能要件一覧(要件定義書)、システムアーキテクチャ設計書、システム全体構成図、技術スタック、既存システムの性能データ
📄 成果物の定義
- ドキュメントテンプレート: 📄
[テンプレ]非機能要件の実現方式
- 必須要素: 非機能要件実現方式一覧、性能要件実現方式、可用性・信頼性設計、セキュリティ対策一覧、保守性・運用性設計、拡張性設計
✅ 品質基準・レビュー観点
✅ 品質チェックリスト:
| チェック項目 | チェック内容 |
|---|---|
| 要件網羅性 | 全ての非機能要件に対して実現方式が定義されている |
| 目標値の明確性 | 定量的な目標値(レスポンスタイム、可用性率など)が設定されている |
| 実現可能性 | 技術的に実現可能で、チームのスキルで実装できる |
| 測定可能性 | 要件達成を測定・検証する方法が明確である |
| トレードオフの考慮 | 性能とコスト、可用性と複雑性などのトレードオフが検討されている |
👁️🗨️ レビュー観点:
- 要件との整合性: 要件定義の非機能要件が漏れなく実現方式に反映されているか
- 具体性: 実装チームが設計・実装に進めるだけの具体性があるか
- 技術的妥当性: 選択した技術手段が要件を満たすために適切か
- 運用・保守の考慮: 本番運用時の監視、障害対応、保守作業が考慮されているか
- コスト妥当性: インフラコスト、ライセンス費用、運用コストが予算内に収まるか
🧪成果物のサンプル
# 非機能要件の実現方式
## 性能・パフォーマンス要件の実現方式
### レスポンスタイム目標値
| 処理種別 | 目標レスポンスタイム | 実現方式 |
|----------|---------------------|----------|
| 画面表示 | 3秒以内(95%ile) | キャッシュ活用、CDN配信、遅延ロード |
| API応答 | 1秒以内(95%ile) | データベースインデックス最適化、クエリチューニング |
| バッチ処理 | 1時間以内(夜間バッチ) | 並列処理、分割実行、差分処理 |
### スループット目標値
| 項目 | 目標値 | 実現方式 |
|------|--------|----------|
| 同時接続ユーザー数 | 1,000ユーザー | 水平スケーリング、ロードバランシング |
| API リクエスト処理数 | 10,000 req/min | キャッシュレイヤー、非同期処理 |
### パフォーマンス向上施策
#### キャッシング戦略
```mermaid
graph TD
A["クライアント"] --> B["CDN Cache<br/>静的コンテンツ"]
A --> C["Application Cache<br/>API Gateway"]
C --> D["Redis Cache<br/>セッション・頻繁アクセスデータ"]
D --> E["Database<br/>PostgreSQL"]
```
実装方針:
- CDN(CloudFront): 静的リソース(CSS、JS、画像)のキャッシュ
- Redis: セッション情報、マスタデータ、API レスポンスのキャッシュ
- キャッシュ有効期限: データ特性に応じて5分〜24時間
- キャッシュ無効化: データ更新時の即時パージ機構
#### データベース最適化
インデックス設計:
- 検索頻度の高いカラムに対するインデックス作成
- 複合インデックスの適切な設計
- パフォーマンス劣化を避けるためのインデックス数の制限
クエリ最適化:
- N+1問題の回避(Eager Loading の活用)
- 不要なカラムの SELECT 抑制
- JOIN の最適化と必要に応じた非正規化
コネクションプーリング:
- 最大接続数: 100
- 最小接続数: 10
- アイドルタイムアウト: 10分
#### 非同期処理
適用対象:
- メール送信
- 外部APIコール
- レポート生成
- 大量データ処理
実装方式:
- メッセージキュー: AWS SQS
- ワーカープロセス: Node.js クラスタリング
- リトライ機構: 指数バックオフ(最大5回)
---
## 可用性・信頼性要件の実現方式
### 稼働率目標
| システム区分 | 稼働率目標 | 許容ダウンタイム(月) |
|--------------|------------|------------------------|
| 本番環境 | 99.9% | 43.2分 |
| ステージング環境 | 99.0% | 7.2時間 |
### 冗長化構成
```mermaid
graph TB
subgraph "可用性ゾーン A"
A1["Web Server 1"]
A2["App Server 1"]
A3["DB Primary"]
end
subgraph "可用性ゾーン B"
B1["Web Server 2"]
B2["App Server 2"]
B3["DB Standby"]
end
LB["Load Balancer"] --> A1
LB --> B1
A1 --> A2
B1 --> B2
A2 --> A3
B2 --> A3
A3 -.レプリケーション.-> B3
```
実装方針:
- ロードバランサー: ALB(Application Load Balancer)による自動振り分け
- Webサーバー: 最低2台構成、Auto Scaling による自動スケール
- アプリケーションサーバー: 最低2台構成、ステートレス設計
- データベース: マスター・スタンバイ構成、自動フェイルオーバー
### 障害検知と自動復旧
ヘルスチェック:
- エンドポイント: /health
- チェック間隔: 30秒
- 異常判定閾値: 連続3回失敗
自動復旧:
- 異常インスタンスの自動切り離し
- 新規インスタンスの自動起動
- 復旧完了通知(Slack、メール)
### バックアップ・リカバリ
データベースバックアップ:
- フルバックアップ: 毎日 AM 3:00(保持期間: 30日)
- 増分バックアップ: 6時間ごと(保持期間: 7日)
- トランザクションログ: 継続的アーカイブ(保持期間: 30日)
- バックアップ保存先: 別リージョン(DR対策)
リカバリ目標:
- RPO(Recovery Point Objective): 6時間以内
- RTO(Recovery Time Objective): 4時間以内
---
## 拡張性・スケーラビリティ要件の実現方式
### スケーリング方針
```mermaid
graph LR
A["負荷増加検知"] --> B{"CPU使用率<br/>> 70%?"}
B -->|Yes| C["Auto Scaling<br/>インスタンス追加"]
B -->|No| D["監視継続"]
C --> E["ロードバランサー<br/>自動振り分け"]
E --> F["負荷分散"]
```
水平スケーリング:
- トリガー: CPU使用率 70% 超過、または平均レスポンスタイム 2秒超過
- スケールアウト: 最大10インスタンスまで自動追加
- スケールイン: 負荷低下後、段階的に縮小(最小2インスタンス維持)
垂直スケーリング:
- データベースのスペックアップ(計画的実施)
- ダウンタイム最小化のため、レプリカ昇格方式を採用
### データ増加への対応
パーティショニング戦略:
- 大容量テーブル(ログ、履歴データ)の月次パーティション化
- 古いパーティションのアーカイブストレージへ移行
データアーカイブ:
- 1年以上経過したデータは圧縮してS3へ移行
- アーカイブデータへのアクセスは別APIで提供
---
## 保守性・運用性要件の実現方式
### ログ管理
ログ種別と出力先:
| ログ種別 | 出力内容 | 出力先 | 保持期間 |
|----------|----------|--------|----------|
| アプリケーションログ | 処理開始/終了、エラー情報 | CloudWatch Logs | 90日 |
| アクセスログ | HTTP リクエスト/レスポンス | S3 | 1年 |
| エラーログ | 例外スタックトレース、システムエラー | CloudWatch Logs | 90日 |
| 監査ログ | ユーザー操作履歴、データ変更履歴 | RDS(専用テーブル) | 3年 |
### モニタリング
監視項目:
- システムメトリクス: CPU、メモリ、ディスク使用率
- アプリケーションメトリクス: レスポンスタイム、エラー率、スループット
- ビジネスメトリクス: ユーザー数、トランザクション数
アラート設定:
```mermaid
graph TD
A["メトリクス収集<br/>Datadog Agent"] --> B{"閾値判定"}
B -->|Critical| C["即時通知<br/>PagerDuty + 電話"]
B -->|Warning| D["通知<br/>Slack + メール"]
B -->|Normal| E["ダッシュボード<br/>記録のみ"]
```
### デプロイ・リリース
デプロイ戦略:
- ブルーグリーンデプロイメント採用
- カナリアリリースによる段階的展開
- 問題発生時の即時ロールバック機構
リリースフロー:
1. ステージング環境での動作確認
2. 本番環境の一部(10%)へデプロイ
3. エラー監視(30分)
4. 問題なければ全体へ展開
5. リリース完了報告
---
## セキュリティ要件の実現方式概要
詳細は「セキュリティ仕様・方式」を参照。
主要な実現方式:
- 認証: OAuth 2.0 + JWT
- 認可: ロールベースアクセス制御(RBAC)
- 通信暗号化: TLS 1.3
- データ暗号化: AES-256(保存時)
- 脆弱性対策: 定期的なセキュリティスキャン、依存ライブラリの更新
--- 🔄 設計の進め方・プロセス
🏗️ プロセス1: 性能・パフォーマンス要件の実現方式
設計対象:
レスポンスタイム、スループット、リソース使用率などの性能要件を満たすための具体的な実現方式を決定する。
具体例:
- 画面表示、API応答、バッチ処理それぞれのレスポンスタイム目標値をどう実現するか
- 同時接続ユーザー数、APIリクエスト処理数の目標値をどう実現するか
- データベースのクエリ性能、インデックス設計をどうするか
- キャッシング戦略(どのデータをどこでキャッシュするか)
- 非同期処理、並列処理の適用箇所
設計原則:
- 測定可能な目標設定: 定量的な目標値(〇秒以内、〇件/分など)と測定方法を明確にする
- ボトルネックの特定: 性能上のボトルネックとなりうる箇所を事前に特定し、重点的に対策する
- 段階的な最適化: 過度な最適化を避け、測定結果に基づいて段階的に改善する
- キャッシュの適切な活用: 頻繁にアクセスされるデータや計算結果をキャッシュし、データベース負荷を軽減する
- 非同期処理の活用: 時間のかかる処理は非同期化し、ユーザー体験を向上させる
文書化の推奨表現:
- 目標値一覧の作成: 処理種別ごとの目標レスポンスタイム、スループットを表形式で整理する
- 実現方式の明記: 各目標値に対して、具体的な技術手段(キャッシュ、インデックス、CDN、ロードバランサーなど)を記載する
- 性能試算の記録: 想定負荷時のリソース使用量やレスポンスタイムの試算結果を残す
- 測定方法の定義: 性能要件の達成をどのように測定・検証するかを明確にする
🏗️ プロセス2: 可用性・信頼性要件の実現方式
設計対象:
システムの稼働率、障害復旧時間、データ保護などの可用性・信頼性要件を満たすための具体的な実現方式を決定する。
具体例:
- 目標稼働率(99.9%など)をどう実現するか
- サーバーやデータベースの冗長化構成をどうするか
- 障害検知、自動フェイルオーバーの仕組みをどうするか
- バックアップ方式、復旧手順をどうするか
- 障害時の影響範囲をどう限定するか
設計原則:
- 単一障害点の排除: 重要なコンポーネントは冗長化し、1箇所の障害でシステム全体が停止しないようにする
- 障害の早期検知: ヘルスチェック、監視の仕組みを整備し、障害を早期に検知できるようにする
- 自動復旧の実現: 可能な限り自動フェイルオーバー、自動再起動などの自動復旧機能を実装する
- データ保護の徹底: 定期バックアップ、レプリケーション、トランザクション管理によりデータ損失を防ぐ
- 段階的な縮退運転: 全機能停止ではなく、重要機能は継続できる縮退運転の仕組みを検討する
文書化の推奨表現:
- 可用性目標の明記: 目標稼働率(SLA)、目標復旧時間(RTO)、目標復旧時点(RPO)を明記する
- 冗長化構成図の作成: サーバー、データベース、ネットワークの冗長化構成を図示する
- 障害シナリオの整理: 想定される障害パターンと、それぞれの対応方法を一覧化する
- バックアップ計画の策定: バックアップ頻度、保存期間、復旧手順を明確にする
🏗️ プロセス3: セキュリティ要件の実現方式
設計対象:
認証・認可、データ保護、通信の暗号化、攻撃対策などのセキュリティ要件を満たすための具体的な実現方式を決定する。
具体例:
- 認証方式(パスワード、多要素認証、SSO)をどうするか
- 認可制御(ロールベース、属性ベース)をどうするか
- 個人情報、機密データの暗号化をどうするか
- 通信の暗号化(TLS/SSL)をどこに適用するか
- SQLインジェクション、XSS、CSRF対策をどうするか
設計原則:
- 多層防御の実現: ネットワーク層、アプリケーション層、データ層それぞれでセキュリティ対策を実施する
- 最小権限の原則: ユーザーやシステムには必要最小限の権限のみを付与する
- データの暗号化: 保存時(at rest)、通信時(in transit)の両方でデータを暗号化する
- セキュアな設定: デフォルト設定を見直し、不要なサービス停止、強固なパスワードポリシー適用などを行う
- セキュリティ監査: アクセスログ、操作ログを記録し、不正アクセスや異常動作を検知できるようにする
文書化の推奨表現:
- セキュリティ対策一覧の作成: 要件ごとに具体的な対策方法を表形式で整理する
- 認証・認可フローの図示: ユーザー認証、権限チェックの流れを図示する
- 暗号化対象の明記: どのデータをどの暗号化方式で保護するかを明確にする
- 脅威と対策の対応表: 想定される脅威(攻撃手法)と、それに対する対策を一覧化する
🏗️ プロセス4: 保守性・運用性要件の実現方式
設計対象:
システムの監視、ログ管理、デプロイ方式、障害対応など、保守・運用を容易にするための実現方式を決定する。
具体例:
- システム監視(稼働状況、リソース使用率)をどう実現するか
- ログ収集・分析の仕組みをどうするか
- デプロイ方式(CI/CD、ブルーグリーンデプロイ)をどうするか
- 設定変更、パラメータ調整の仕組みをどうするか
- 障害時の調査、切り分けをどう支援するか
設計原則:
- 可観測性の確保: メトリクス、ログ、トレースを適切に収集し、システム状態を可視化する
- 自動化の推進: デプロイ、テスト、監視など、可能な限り自動化して人的ミスを減らす
- 運用負荷の軽減: 頻繁な手作業を減らし、セルフヒーリング機能などで自律的に動作するようにする
- 問題の早期発見: アラート設定、異常検知により、問題を早期に発見できるようにする
- ドキュメント整備: 運用手順書、トラブルシューティングガイドを整備する
文書化の推奨表現:
- 監視項目一覧の作成: 監視対象(CPU、メモリ、ディスク、ネットワークなど)とアラート閾値を一覧化する
- ログ設計の明記: 出力するログの種類、フォーマット、保存期間を明確にする
- デプロイフローの図示: CI/CDパイプライン、デプロイ手順を図示する
- 運用手順の整理: 日常運用、定期メンテナンス、障害対応の手順を整理する
🚨 よくある失敗と予防策
🚧 実例収集後、追記予定
📚 参考資料・関連リンク
- 参考文献: 『Webシステム設計 実践ガイド』、『システム設計の謎を解く』、ISO/IEC 25010(システム及びソフトウェア製品の品質モデル)
- 関連する他のガイド: システムアーキテクチャ検討ガイド、システム全体構成ガイド、性能設計ガイド、セキュリティ設計ガイド
- ツール・テンプレート: 非機能要件実現方式テンプレート、性能試算シート、セキュリティチェックリスト
テンプレートサイト: 📄テンプレート集