Webアプリケーションの非機能要件は、アーキテクチャ設計や運用のしやすさに直結します。
特に、可用性・性能・セキュリティはプロジェクトの初期段階でしっかり設計することが重要 です!
今回は独立行政法人 情報処理推進機構(IPA)が2018年に6つの項目として定めた「非機能要求グレード」を参考に開発者が検討すべき事項をまとめた。
可用性
Availability
システムの継続稼働を保証するための要件
- 高可用性(HA: High Availability)
- サーバー冗長構成(Active-Active / Active-Standby)
- ロードバランサーの利用(負荷分散)
- DBのレプリケーション(マスタースレーブ構成、シャーディング)
- Kubernetes などのオーケストレーションによる自動復旧
- フェイルオーバー
- 障害時の自動切り替え(クラスタリング、フェールオーバー機能)
- マイクロサービス間のリトライ戦略
- データの耐久性
- データのバックアップ戦略(スナップショット、レプリケーション)
- 冗長化ストレージ(RAID、S3 のバージョニング)
- 障害通知
- 死活監視(ヘルスチェック、アラート通知)
- システムログ・メトリクスの監視(Prometheus、Datadog)
性能・拡張性
Performance & Scalability
システムの応答速度やスケールのしやすさに関する要件
- 応答速度・スループット向上
- キャッシュ戦略(Redis、CDN、HTTPキャッシュ)
- コネクションプーリング(DB接続最適化)
- クエリ最適化(インデックス活用、N+1問題の回避)
- 非同期処理(キュー、イベント駆動)
- コンテンツ圧縮(gzip、brotli)
- スケーラビリティ(拡張性)
- スケールアップ(CPU / メモリ増強)
- スケールアウト(水平分散、コンテナ化)
- オートスケーリング(Kubernetes HPA、AWS Auto Scaling)
- 負荷試験
- パフォーマンステスト(JMeter、Gatling)
- ボトルネック分析(APMツール:New Relic、Datadog)
運用・保守性
Maintainability & Operability
システムを長期間安定して運用・保守するための要件
- 監視・アラート
- アプリケーションログ(リクエストログ、エラーログ、監査ログ)
- メトリクス監視(CPU、メモリ、DB接続数)
- 異常検知(閾値超過時の通知)
- 運用自動化
- CI/CD パイプライン(GitHub Actions、ArgoCD)
- Infrastructure as Code(Terraform、Ansible)
- ログ集約(ELK Stack、Fluentd、Datadog)
- バージョン管理
- アプリ・DBのバージョン管理(Liquibase、Flyway)
- ロールバック機能(カナリアリリース、ブルーグリーンデプロイメント)
移行性
Portability
システムの導入やアップグレード、移行のしやすさ
- クラウド対応
- マルチクラウド(AWS、Azure、GCP)
- ベンダーロックインの回避(マネージドサービスの選択)
- データ移行
- データ移行スクリプトの整備
- 段階的移行(Zero Downtime Migration)
- アプリ移行
- コンテナ化(Docker、Kubernetes)
- バックエンドの API 互換性(GraphQL、OpenAPI)
セキュリティ
Security
システムの安全性や不正アクセスへの対策
- 認証・認可
- OAuth2 / OIDC(Keycloak、Auth0)
- RBAC(Role-Based Access Control)
- データ保護
- HTTPS / TLS(Let’s Encrypt、AWS ACM)
- データ暗号化(At Rest & In Transit)
- セキュアなクッキー管理(HttpOnly、SameSite、Secure)
- 攻撃対策
- WAF(AWS WAF、Cloudflare)
- CSRF / XSS / SQL インジェクション対策
- DDoS対策(Rate Limit、Cloudflare)
- 監査ログ
- アクセスログ(ユーザー操作の記録)
- システムログ(管理者操作の記録)
システム環境・エコロジー
System Environment & Ecology
インフラ環境やエネルギー効率の考慮
- インフラ設計
- クラウドネイティブ対応(AWS Fargate、Google Cloud Run)
- マイクロサービスアーキテクチャ
- エネルギー効率
- 負荷分散によるサーバー台数の最適化
- オートスケーリングで不要なリソースを削減
- サーバーレス(AWS Lambda、Cloud Functions)
- コスト最適化
- スポットインスタンス活用
- クラウドリソースの定期的な棚卸し
コメントを残す