🔥

詳細設計とは?目的とやることを整理してみた

に公開

はじめに

前回の記事では、プロジェクトで担当した 基本設計工程 を振り返り、標準的な進め方と実務での経験を整理しました。

そして来週からは、いよいよ 詳細設計工程 に入ります。
せっかくの区切りなので、この記事では 「詳細設計とは何か」「どんな目的でどんなことをやるのか」 をあらためてまとめてみようと思います。

詳細設計とは?

詳細設計は、基本設計で定義したシステムの全体像を、プログラマが迷わず実装できる粒度まで具体化する工程です。

家づくりに例えると、

  • 基本設計 → 間取り図を描いて、部屋の配置や広さを決める段階
  • 詳細設計 → 配線、材質、窓や扉の位置、家具の配置まで細かく決める段階

ここで設計をしっかりしておくことで、実装に入ってからの手戻りや曖昧さを減らし、品質を担保できるようになります。

詳細設計の目的

  • 実装者が迷わないようにする
    基本設計で決めた方針を、クラスや関数、データベースの構造にまで落とし込み、実装の指針を明確にする。

  • テストに必要な情報を揃える
    入力チェックやエラー処理を具体的に記載することで、単体テスト・結合テストの観点が明確になる。

  • 品質を担保する
    例外処理やログ出力の方法を定義し、安定性やトラブルシュートのしやすさを確保する。

  • 後工程の効率化
    詳細設計がしっかりしていると、実装・テストでの手戻りが減り、工数削減や納期遵守につながる。

詳細設計でやること(標準的な項目)

プログラム設計

  • クラス構造やモジュール分割を決める
  • 関数やメソッドの定義、引数、戻り値を明確化
  • 入力チェックや例外処理、エラー時の動作を設計
  • アルゴリズムの流れを整理

データベース設計(物理設計)

  • 基本設計の論理モデルを、実際のDBに落とし込む
  • データ型、桁数、インデックス、制約、パーティション設計
  • 性能や保守性を考慮した物理構成

インターフェース設計の詳細化

  • APIのリクエスト/レスポンス形式を具体的に定義
  • ステータスコードやエラーコードを明確化
  • タイムアウトやリトライ方式など制御まで記載

共通処理の具体化

  • ログ出力のフォーマット、レベル分け
  • 認証・認可の仕組み(セッション管理やトークン方式)
  • 共通関数やユーティリティの設計

基本設計との違い(粒度の変化)

基本設計と詳細設計はつながっていますが、扱う粒度が異なります。

  • 基本設計:ユーザーや関係者に分かるレベルで「処理の概要」を示す
  • 詳細設計:開発者が迷わず実装できるレベルで「処理の手順や方法」を示す

具体例

  • 入力チェック

    • 基本設計:必須項目かどうか、形式チェックの有無(例:メールアドレス形式をチェックする)
    • 詳細設計:具体的なチェック方法(例:正規表現^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$を使う)
  • ボタン押下処理

    • 基本設計:「登録ボタンを押したら登録APIを呼ぶ」程度の大枠
    • 詳細設計:呼び出すAPIのパラメータ内容、入力エラー時のエラーメッセージ表示、正常終了後の遷移先まで定義

このように、基本設計は「何をするか」まで、詳細設計は「どうやってやるか」までを記述するのが大きな違いです。

まとめ

詳細設計は、基本設計で固めた全体像を、コードに直結できる粒度まで具体化する工程です。
入力チェックやボタン処理の例でも分かるように、基本設計では「やること」を決め、詳細設計では「やり方」を定義します。

これから私自身も詳細設計工程に入る予定なので、実際の成果物を作りながら、その経験も記事としてまとめていこうと思います。

Discussion