要件と制約の違い

アーキテクチャ

ソフトウェア開発の現場で、「要件(Requirements)」と「制約(Constraints)」の違いに悩んだことはないだろうか。

私は設計を考える際に、この2つの概念を混同してしまうことがあった。

適切な設計を行うために、これらの違いを明確に理解することが大事であると感じたので、これらの違いについてシステム工学の国際標準である ISO/IEC/IEEE 29148 の定義をベースに整理してみた。

定義

国際標準では、この二つは以下のように区別されている。

  • 要件 (Requirements)

    • 定義: ステークホルダーがシステムに求める「機能」や「能力」の記述。
    • 本質: 「何を達成したいか (What)」 というゴールへのベクトル。
    • 特徴: 交渉可能である。例えば「検索機能が欲しい」という要件は、予算やスケジュールの都合で「次期フェーズに回す」という調整ができる。
  • 制約 (Constraints)

    • 定義: 設計や実装の自由度を制限する「条件」や「要因」。
    • 本質: 「守らなければならない枠 (Limits/Bounds)」 という解決空間の切断線。
    • 特徴: 原則として交渉不可、または変更コストが極めて高いものである。「レガシーシステムと連携必須」「GDPR準拠」といった、外部から与えられる強制力である。

補足:なぜ「要件」なのか

現場の標準語彙であるため

日本の開発現場では、ステークホルダーの「生の願い」を「要求(Needs/Requests)」、それをエンジニアリングの言葉に翻訳・確定したものを「要件(Requirements)」と使い分ける慣習がある(例:要求定義ではなく要件定義)。設計の話をする場合、扱うのは確定した「要件」であるため、こちらが適切である。

「制約」との対比が鮮明になるため

  • 要求(Request): 「~してほしい」(願望)
  • 要件(Requisite): 「~である必要がある」(条件)
  • 制約(Constraint): 「~でなければならない」(強制)

上記のように、要求・要件・制約は強制力のグラデーションで並んでいる。設計を議論する際、「~してほしい」という曖昧な要求レベルではなく、「~である必要がある」という確定した要件として扱うことで、制約との対比が明確になり、トレードオフの判断がしやすくなる。

ISOの構造的意図

ISO 29148でも、"Stakeholder Needs"(利害関係者ニーズ=要求)と "System Requirements"(システム要件)は明確に区別されている。本記事の文脈は「設計」であるため、ニーズの段階ではなく、要件の段階の話となる。

要件と制約の見分け方

要件と制約を見分けるための簡単なフレームワークとして、以下の4つの質問を使うことができる。

質問 答えが YES なら... 理由
「それはユーザーの欲望か?」 要件 システムが提供する価値そのものだからである。
「それは設計の選択肢を奪うか?」 制約 エンジニアが自由に技術選定できない要因だからである。
「お金や時間を積めば変更できるか?」 要件 トレードオフの対象になり得るからである。
「物理法則や法律、全社規定か?」 制約 開発チームの権限外にある「不動の壁」だからである。

非機能要件 (NFR) は「制約」として振る舞う

少しややこしいのが、パフォーマンスやセキュリティなどの「非機能要件(Non-Functional Requirements: NFRs)」である。これらは形式上は要件だが、アーキテクトにとっては強力な 「制約」 として機能する。

例えば、「ページを1秒以内に表示する」というNFRがあるとする。

  • これはユーザーにとっては「高速な体験が欲しい」という要件である。
  • しかしエンジニアにとっては、「重厚なフレームワークの使用禁止」や「キャッシュ層の強制導入」を意味する、設計を狭める制約となる。

まとめ

ソフトウェア設計とは、「制約(Constraints)の枠の中で、最大限に要件(Requirements)を満たす解を見つけるパズル」と例えることができる。

  • 要件は、創造性を発揮して解決すべき課題である。
  • 制約は、創造性を発揮する際のルール(土俵)である。

ただし、制約は「絶対に動かせない壁」とは限らない。 設計を進める中で、制約が要件の実現を著しく阻害したり、コストを爆発させたりする場合は、制約そのものを「交渉して変える」こともアーキテクトの重要な仕事である。

プロジェクト開始時にこの二つを明確に区別しておくことで、「変えられないもの」と「変えるべきもの(あるいは交渉すべきもの)」を正しく見極め、チームのエネルギーを最適なトレードオフの判断に集中させることができる。

参考