SDDでUI仕様を先に書くと失敗する理由

SDD(仕様駆動開発)ではなぜUI仕様を最初に書いてはいけないのか

SDD(仕様駆動開発)で最も失敗しやすいのが「最初にUI仕様を書く」ことです。
直感的には正しそうに見えます。画面が決まれば開発しやすいからです。
しかし実務では、UI仕様から始めたプロジェクトほど手戻りが増えます。

理由は単純で、UIはシステムの本質ではなく「表現」だからです。
仕様駆動開発が扱うべき対象は画面ではありません。振る舞いです。

UIは仕様ではなく実装の一部

ログイン機能を例にします。
UI中心で仕様を作ると、次のような内容になります。

  • ID入力欄を配置
  • パスワード欄を配置
  • ログインボタンを配置
  • エラー文言を表示

これは仕様のように見えますが、実際には画面設計です。
この段階では、システムが何をするかは定義されていません。

例えば次の問いに答えられません。

  • 何回失敗したらロックするのか
  • セッションはいつ切れるのか
  • 多重ログインは許可するのか
  • パスワード変更後の既存セッションはどうなるか

UIをいくら精密に書いても、これらは決まりません。
つまりUI仕様だけではバグを防げないのです。

なぜUIから始めると手戻りが起きるのか

ソフトウェアには依存関係があります。
本来の順序は次です。

順序 内容
1 振る舞い(ビジネスルール)
2 アプリケーションロジック
3 UI

しかしUIから始めると逆転します。
これを設計の逆流と呼びます。

典型例を挙げます。

最初に画面を設計します。
その後、次のような要件が判明します。

  • 管理者と一般ユーザーで権限が違う
  • 承認フローが必要
  • 入力途中保存が必要

するとUIが成立しなくなります。
結果として画面を作り直します。
これが大きな手戻りです。

問題はUIが悪いのではありません。
UIは最終成果物なので、依存先が多すぎるのです。

UI中心開発で発生する典型的な不具合

「ボタンはあるが動作が決まっていない」

UIから始めると、まず画面が完成します。
しかし、押したときの挙動が曖昧になります。

  • 保存ボタンはどのタイミングで成功か
  • エラーはどこまで入力させるか
  • 自動保存は必要か

これらは画面からは決まりません。
その結果、実装段階で議論が始まります。

「例外処理が後付けになる」

UIは正常系を前提に作られます。
ユーザーが期待通り操作する前提です。

しかし実際のシステムの難しさは例外系にあります。

  • ネットワーク切断
  • 二重送信
  • セッション切れ
  • 権限不足

UI後付けで例外対応すると、画面が破綻します。
エラーメッセージだらけのUIになります。

「APIと画面の仕様がズレる」

バックエンドはデータ整合性を重視します。
フロントエンドは操作性を重視します。

UI先行では、APIが後から作られます。
このときズレが発生します。

例:

  • UIは即時保存
  • APIはトランザクション単位

結果として無理な実装(疑似保存、暫定データ)が増えます。
これが技術的負債になります。

SDD(仕様駆動開発)で最初に書くべきもの

UIではなく「ユースケースの振る舞い」です。
具体的には受け入れ基準です。

例:ユーザー登録

  • メールアドレスが重複している場合は登録できない
  • 確認URLの有効期限は24時間
  • URL使用後は再登録不可

この段階では画面は存在しません。
しかし、システムの挙動は完全に定義されています。

この状態で初めてUIを設計します。
すると画面の意味が明確になります。

  • なぜエラーメッセージが必要か
  • なぜ確認画面が必要か
  • なぜ再送ボタンが必要か

UIは結果として導かれます。

UIを後にすると何が良いのか

画面議論が減る

UI先行では、会議がこうなります。

  • ボタンの位置
  • 余白

しかし振る舞いが先に決まると、議論はこう変わります。

  • ユーザーはここで迷うか
  • 操作は最小か
  • 誤操作を防げるか

本質的なUXの議論になります。

API設計が安定する

振る舞いが定義されているため、APIの責務が明確になります。
結果としてフロントとバックの衝突が減ります。

テストが書ける

UI仕様からはテストを書けません。
振る舞い仕様からは書けます。

テスト可能性が上がると、品質が安定します。

注意点:UIを軽視するわけではない

UIを後にするのは、重要でないからではありません。
重要だから最後に決めます。

UIはユーザーとの接点です。
そのため、最も影響範囲が大きい部分です。

ビジネスルールが固まっていない状態でUIを確定すると、変更コストが最大になります。

まとめ

SDD(仕様駆動開発)では、画面を設計する前に振る舞いを設計します。
UIは仕様の出発点ではなく到達点です。

UIから始める開発は分かりやすく感じます。
しかしそれは設計を後回しにしているだけです。

最初に書くべきなのは画面ではありません。
「このシステムはどの条件で、どう振る舞うか」です。

その1機能の受け入れ基準を書いてから画面を描いてみてください。
UIの迷いが驚くほど減ります。
画面設計が難しいのは、デザインの問題ではなく仕様の問題であることに気づくはずです。