📖 テーマ設定
🔊 音声設定
1.2
1.0
1.0
▶️ 再生コントロール
🎵 BGM設定
0.3
🔔 効果音設定
0.3

設計アプローチ(POA/DOA/MDA/SOA/ROA/OOAD)

概要

  • 日程: Day 3 / セッション 03
  • 時間: [10:10-10:40]
  • 形式: 座学
  • ゴール: 5つの設計アプローチ(DOA/MDA/SOA/ROA/OOAD)をそれぞれ1文で説明でき、歴史的な変遷を順に並べられる
  • 学習形式: 対話型解説

導入(5分)

前セッションで「UNIX哲学=設計の土台」を学びました。今度はその上に建つ「建築様式」にあたる、5つの設計アプローチを見ていきます。

各アプローチは「システムの中心に何を据えるか」が異なります。プロセスを中心にするか、データを中心にするか、サービスを中心にするか、リソースを中心にするか、オブジェクトを中心にするか。中心が違えば、設計の見え方が大きく変わります。

たとえば家を設計するとき、「リビング中心」「キッチン中心」「収納中心」で間取りが全然違いますよね。それと同じです。

本編(20分)

1. 5つの設計アプローチ概観

flowchart LR POA["POA
1970s
処理中心"] --> DOA["DOA
1980s
データ中心"] DOA --> OOAD["OOAD
1990s
オブジェクト中心"] OOAD --> MDA["MDA
2000s
モデル中心"] MDA --> SOA["SOA
2000s
サービス中心"] SOA --> ROA["ROA
2010s
リソース中心"]
略称 正式名 中心 一言で
POA Process Oriented Approach プロセス 「処理の流れ」から設計する
DOA Data Oriented Approach データ 「持つべきデータ」から設計する
OOAD Object Oriented Analysis & Design オブジェクト 「データ+振る舞い」を1つの単位として設計する
MDA Model Driven Architecture モデル 抽象モデルから自動生成するように設計する
SOA Service Oriented Architecture サービス 業務単位の「サービス」を組み合わせて設計する
ROA Resource Oriented Architecture リソース URIで識別できる「リソース」を中心に設計する

ここがポイント

「中心が違うだけで、どれも要素は同じ」です。データ・処理・振る舞いという要素は、どのアプローチでも登場します。違うのは「何を主役にするか」だけ。

2. それぞれを掘り下げる

POA(Process Oriented Approach)プロセス指向

「業務の流れ図(フロー)」を最初に書く方式。1970年代の主流。

  • 例: 「注文受付 → 在庫確認 → 出荷指示 → 請求書発行」のフローを描き、各ステップをプログラムにする。
  • 強み: 流れが分かりやすい。
  • 弱み: フローが変わるたびに全部書き直し。データ重複が起きやすい。

DOA(Data Oriented Approach)データ指向

「業務に必要なデータ」を先に定義し、処理は後で考える方式。1980年代に主流化。

  • 例: 「顧客テーブル、商品テーブル、注文テーブル」をER図で定義する。
  • 強み: データは長く残るので、土台が安定する。
  • 弱み: データだけ綺麗にしても、業務ロジックが複雑になりがち。
  • 業務システムの王道。RDBの普及と運命を共にした。

OOAD(Object Oriented Analysis & Design)オブジェクト指向

「データ+それを操作する処理」を1つの単位(オブジェクト)にまとめる方式。1990年代に主流化。

  • 例: 「Userオブジェクト」が「自分のパスワードを暗号化する」処理を持つ。
  • 強み: 現実世界に近い形でモデル化できる。再利用がしやすい。
  • 弱み: 設計者の力量が出やすい。学習コストが高い。

MDA(Model Driven Architecture)モデル駆動

「抽象モデル」を作り、それを変換してコードに落とす方式。2000年代にOMGが提唱。

  • 例: PIM(プラットフォーム独立モデル)→ PSM(プラットフォーム特化モデル)→ コード自動生成
  • 強み: 仕様変更が伝播しやすい。
  • 弱み: ツールへの依存が大きい。普及が限定的。

SOA(Service Oriented Architecture)サービス指向

「業務単位のサービス」をネットワーク越しに組み合わせる方式。2000年代に企業システムで流行。

  • 例: 「決済サービス」「在庫サービス」「会員サービス」を独立して作り、メッセージで連携。
  • 強み: 異なる技術スタックでも連携できる。
  • 弱み: 通信オーバーヘッド。サービス境界の設計が難しい。
  • 現代のマイクロサービスの祖先

ROA(Resource Oriented Architecture)リソース指向

すべての情報を「リソース」とみなし、URIで識別、HTTPメソッド(GET/POST/PUT/DELETE)で操作する方式。

  • 例: GET /users/123POST /orders
  • 強み: シンプル、Web標準と相性が良い、キャッシュしやすい。
  • 弱み: 複雑な業務処理を素直に表現しにくい。
  • REST APIの設計思想そのもの。

コラム

オブジェクト指向の生みの親、アラン・ケイは1970年代に「メッセージング(オブジェクト間のやりとり)こそ本質だ」と言いました。彼の本当に作りたかったオブジェクト指向は、「クラスや継承の話ではなく、生き物のように自律的なオブジェクトが対話するシステム」でした。現代のマイクロサービスは、ある意味アラン・ケイの夢の実現と言えます。

3. どう選ぶか

「どのアプローチが最強」はありません。プロジェクトの性質で選びます。

シーン おすすめ
業務システム(基幹系) DOA
複雑なドメインロジック OOAD + DDD(Day 3後半)
複数システム連携が必要 SOA / マイクロサービス
Web API中心 ROA(REST)
短期間でモックが欲しい POA(処理の流れだけ書く)

自チームの開発テーマは何を選ぶべきか、後半セッションでも判断していきます。

ここがポイント

複数を組み合わせるのが現実です。「内部はOOAD、外向きはROA」のような構成は普通です。

💬 AIに聞いてみよう

ここまでの内容で疑問があれば、AIに質問してみましょう。たとえば:

  • 「DOAとOOADの違いを、家計簿アプリの設計を例に説明して」
  • 「ROA(REST)とSOAって何が違うの? 似てる気がする」
  • 「MDAが普及しなかった理由は何?」

まとめ(5分)

設計アプローチは「システムの中心に何を据えるか」で分類されます。POA→DOA→OOAD→SOA→ROAの順に時代が進み、それぞれ違う課題に対応してきました。「どれかが正解」ではなく、プロジェクトに合わせて選びます。

次のセッションでは、これらのアプローチを実装に落とすときに使われる「MVC・MVVM・DDD」という具体的なパターンを学びます。

🔄 振り返りチェック

  • 5つの設計アプローチを、それぞれ1文で説明できますか?
  • 自チームの開発に最適なアプローチはどれだと考えますか?
  • DOA、OOAD、ROAの違いを1分で説明できますか?

補足資料

  • 参考リンク: マーチン・ファウラー『Patterns of Enterprise Application Architecture』、Roy Fielding『Architectural Styles and the Design of Network-based Software Architectures』(博士論文・RESTの原典)
  • 発展課題: 自分が好きなWebサービスのAPIドキュメントを1つ読み、ROAかSOAか判定してみる

学習ガイド

想定される質問と回答例

質問 ヒント
マイクロサービスはSOAと同じ? 思想は同じ(サービスを組み合わせる)。違いは粒度の細かさと、運用の自律性(独立デプロイ)
ROAとREST APIは同じ? REST APIはROAを実現する代表的な手段。ROA=設計思想、REST=実装プロトコル
OOADって今でも使うの? 使う。ほぼすべてのオブジェクト指向言語(Java/Python/JS等)でOOADの考えは現役

つまずきやすいポイント

つまずきポイント ヒント
各アプローチの境界が曖昧 「中心に何を据えるか」で考えると整理しやすい
略称が多くて覚えられない まずDOA・OOAD・ROAの3つだけ確実に。残りは必要時に調べる
自プロジェクトにどれを選ぶか決められない Webアプリで作るなら、まずROA(REST)が無難
読み上げを開始します...

AIに質問する