アーキテクチャ / Web SYSTEM•PART 12 / 13••8 min read
PART 12 — よくある抜け漏れパターン
失敗事例と対策
成果物や役割の「抜け漏れ」は、実際のプロジェクトで繰り返される。これらのパターンを知っておくことで、同じ失敗を事前に防げる。
抜け漏れパターン6選
図1: よくある失敗事例と対策
❶ DBAが詳細設計フェーズから参入
インデックス設計が後付けになり、アプリチームが書いたクエリと整合が取れなくなる。開発フェーズで性能問題が頻発し、テーブル構造の見直しを余儀なくされるケースも。
→ DBAは基本設計フェーズからフル稼働させる
❷ 共通チームが不在
認証処理をFE・BEチームがそれぞれ独自実装する。実装がバラバラになり、仕様変更時に全チームへの影響が出る。セキュリティホールが生まれやすい領域でもある。
→ 共通チームを基本設計フェーズから設置し、認証設計を先行して確定させる
❸ インフラが要件定義に不在
非機能要件(可用性・スケール・DR)が後から覆る。「マルチAZ必須」が基本設計完了後に判明し、アーキテクチャを再設計するケースが典型例だ。
→ インフラは要件定義フェーズから非機能要件定義に参加させる
❹ QAがテストフェーズ直前まで不参加
テストケース設計が間に合わない。仕様書の矛盾がテストフェーズまで発覚せず、発覚時点で修正コストが高くなる。UATの受入基準も曖昧なまま進む。
→ QAは基本設計フェーズからテスト計画に参加させる
❺ Runbookなしで運用移行
「作った人しか直せない」状態で運用チームに引き継ぐ。障害発生時に開発チームへの逆エスカレーションが頻発し、運用チームが疲弊する。
→ Runbookをリリースフェーズまでに作成し、運用移管完了報告に含める
❻ データ移行リハーサルなし
本番移行時に想定外のデータ不整合・処理時間超過が発生。ロールバック手順も未整備のまま本番に臨み、システム停止が長期化する。
→ DBAが主導して本番同等データでのリハーサルを最低1回実施する
なぜ繰り返されるのか
これらのパターンには共通する構造的な原因がある。
| 原因 | 具体的な状況 |
| コスト意識による早期参加の回避 | 「まだ設計段階だからDBAを呼ぶのは早い」という判断で参加を遅らせる。結果的に後工程の手戻りコストの方が高くつく。 |
| 役割の境界の曖昧さ | 「それは誰の仕事か」が明文化されていないため、誰も作らない成果物が発生する。特に共通基盤(認証・ライブラリ)が典型。 |
| フェーズの形骸化 | 「フェーズは区切りだけ」という認識で、各フェーズの成果物や参加者の合意がないまま次のフェーズに進む。 |
| プロジェクト後半の圧縮 | 開発フェーズの遅延がテスト・リリースフェーズを圧縮する。テスト準備・Runbook作成・移行リハーサルが省略される。 |
防止のためのチェックポイント
⚠️ フェーズ移行時のチェックリスト
各フェーズから次のフェーズに移行する前に、「このフェーズで全員が作るべき成果物は揃っているか」を確認する。特に①基本設計→詳細設計(DBA・共通チームの成果物)と②テスト→リリース(UAT合意書・Runbook・移行リハーサル結果)の2つの移行ポイントは念入りに確認する。
フェーズ別:抜け漏れが起きやすいタイミング
抜け漏れはどのフェーズでも起きうるが、「発覚したフェーズ」が「発生したフェーズ」より後になるほど手戻りコストが膨らむ。下表は各フェーズで特に注意すべき抜け漏れをまとめたものだ。
| フェーズ | よく抜けるもの | 発覚するタイミング | 手戻りの深刻度 |
| 企画 | スコープ外の未定義、RACI表の未作成 | 要件定義〜開発 | 高(全工程に影響) |
| 要件定義 | 非機能要件(可用性・性能)の未定義、セキュリティ要件の遅延 | 基本設計〜テスト | 高(アーキテクチャを覆す場合あり) |
| 基本設計 | DBA・共通チームの不参加、インデックス方針の未確定 | 詳細設計〜開発 | 中〜高(テーブル再設計が発生) |
| 詳細設計 | エラーケース・境界値の設計漏れ、API仕様のFE/BEズレ | 開発〜テスト | 中(修正は局所的だが多発する) |
| 開発 | ログ出力の抜け、セキュリティチェックの省略 | テスト〜運用 | 中(後から追加は工数大) |
| テスト | UAT受入基準の未合意、性能テストの省略 | リリース後 | 高(本番障害に直結) |
| リリース | Runbook未作成、データ移行リハーサルなし | 本番移行直後 | 高(システム停止の長期化) |
なぜ同じ失敗が繰り返されるのか
本シリーズで紹介した失敗パターンは、多くのプロジェクトで繰り返し観察されている。繰り返されるのは「知らないから」ではなく、「知っているが判断を誤る」構造的な原因があるためだ。
最も根本的な原因は、「早期参加のコスト」は見えやすく、「遅延参加による手戻りコスト」は見えにくいことだ。プロジェクト序盤にDBAをフル稼働でアサインするコストは予算として可視化されるが、詳細設計フェーズでのインデックス設計の手戻りコストは「進捗が遅れた理由」として見えにくくなる。このコスト認知の非対称性が、繰り返し同じ判断ミスを引き起こす。
抜け漏れを防ぐフレームワーク
抜け漏れを防ぐ最も効果的な方法は「フェーズ移行チェックリスト」を運用することだ。各フェーズの終了条件として「このフェーズで全役割が作るべき成果物は揃っているか」を確認する。
特に注意が必要なフェーズ移行は2つある。
| 移行ポイント | 確認すべき成果物 | よく抜けるもの |
| 基本設計 → 詳細設計 | DBA:論理データモデル 共通チーム:認証・認可設計・APIゲートウェイ設計方針 インフラ:インフラ構成図(論理) | 共通チームの成果物提供が遅れ、詳細設計が開始できない状態になる |
| テスト → リリース | QA:受入合意書(UAT) セキュリティ:脆弱性診断報告書・対応記録 DBA:データ移行リハーサル結果 インフラ:Runbook | Runbookとデータ移行リハーサルが「後でやる」になり、リリース当日に未完成の状態になる |
このチェックリストを「形式的に実施する」のではなく、実際に成果物の内容を確認してから次フェーズへ進む文化を作ることが重要だ。「作った」と「使える状態になっている」は別の基準として評価する。