詳細設計とは?目的とやることを整理してみた
はじめに
前回の記事では、プロジェクトで担当した 基本設計工程 を振り返り、標準的な進め方と実務での経験を整理しました。
そして来週からは、いよいよ 詳細設計工程 に入ります。
せっかくの区切りなので、この記事では 「詳細設計とは何か」「どんな目的でどんなことをやるのか」 をあらためてまとめてみようと思います。
詳細設計とは?
詳細設計は、基本設計で定義したシステムの全体像を、プログラマが迷わず実装できる粒度まで具体化する工程です。
家づくりに例えると、
- 基本設計 → 間取り図を描いて、部屋の配置や広さを決める段階
- 詳細設計 → 配線、材質、窓や扉の位置、家具の配置まで細かく決める段階
ここで設計をしっかりしておくことで、実装に入ってからの手戻りや曖昧さを減らし、品質を担保できるようになります。
詳細設計の目的
-
実装者が迷わないようにする
基本設計で決めた方針を、クラスや関数、データベースの構造にまで落とし込み、実装の指針を明確にする。 -
テストに必要な情報を揃える
入力チェックやエラー処理を具体的に記載することで、単体テスト・結合テストの観点が明確になる。 -
品質を担保する
例外処理やログ出力の方法を定義し、安定性やトラブルシュートのしやすさを確保する。 -
後工程の効率化
詳細設計がしっかりしていると、実装・テストでの手戻りが減り、工数削減や納期遵守につながる。
詳細設計でやること(標準的な項目)
プログラム設計
- クラス構造やモジュール分割を決める
- 関数やメソッドの定義、引数、戻り値を明確化
- 入力チェックや例外処理、エラー時の動作を設計
- アルゴリズムの流れを整理
データベース設計(物理設計)
- 基本設計の論理モデルを、実際のDBに落とし込む
- データ型、桁数、インデックス、制約、パーティション設計
- 性能や保守性を考慮した物理構成
インターフェース設計の詳細化
- APIのリクエスト/レスポンス形式を具体的に定義
- ステータスコードやエラーコードを明確化
- タイムアウトやリトライ方式など制御まで記載
共通処理の具体化
- ログ出力のフォーマット、レベル分け
- 認証・認可の仕組み(セッション管理やトークン方式)
- 共通関数やユーティリティの設計
基本設計との違い(粒度の変化)
基本設計と詳細設計はつながっていますが、扱う粒度が異なります。
- 基本設計:ユーザーや関係者に分かるレベルで「処理の概要」を示す
- 詳細設計:開発者が迷わず実装できるレベルで「処理の手順や方法」を示す
具体例
-
入力チェック
- 基本設計:必須項目かどうか、形式チェックの有無(例:メールアドレス形式をチェックする)
-
詳細設計:具体的なチェック方法(例:正規表現
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
を使う)
-
ボタン押下処理
- 基本設計:「登録ボタンを押したら登録APIを呼ぶ」程度の大枠
- 詳細設計:呼び出すAPIのパラメータ内容、入力エラー時のエラーメッセージ表示、正常終了後の遷移先まで定義
このように、基本設計は「何をするか」まで、詳細設計は「どうやってやるか」までを記述するのが大きな違いです。
まとめ
詳細設計は、基本設計で固めた全体像を、コードに直結できる粒度まで具体化する工程です。
入力チェックやボタン処理の例でも分かるように、基本設計では「やること」を決め、詳細設計では「やり方」を定義します。
これから私自身も詳細設計工程に入る予定なので、実際の成果物を作りながら、その経験も記事としてまとめていこうと思います。
Discussion