📖

世界の解釈が設計を導く 〜アプリケーションにおけるモデルの役割とその紹介〜

に公開

TL;DR

アプリケーションは、現実世界の一部をソフトウェア上で再現するもの。
→だからこそ、「世界をどう解釈するか」が設計の出発点になる。

本記事では、世界の解釈の仕方として大まかな区分と5つの代表的なモデルを紹介。

  • 実体ベースの解釈の仕方
    • オブジェクト指向モデル:実体とその関係に注目する
    • アクターモデル:実体間の非同期なメッセージ交換に注目する
    • エージェントベースモデル(ABM):自律的な実体の相互作用から全体が成り立つ
  • プロセスベースの解釈の仕方
    • イベントソーシング:出来事(イベント)の履歴に注目する
    • データフローアーキテクチャ:データが流れ、変換されていく過程に注目する

はじめに

アプリケーションとは、私たちが暮らす現実世界の一部をソフトウェア上に再現し、操作するための仕組みです。
たとえば「ユーザーが商品を購入する」「車が道路を走る」「温度センサーが室温を記録する」など、対象とする現実はさまざまです。

このとき、ソフトウェアは現実世界を「どのように解釈するか」によって設計が大きく変わります。
この記事では、アプリケーション設計における「世界の解釈」について、いくつかの代表的なモデルを紹介しながら考察していきます。


現実世界の解釈

モデルとは、現実世界のある側面を抽象化し、構造として整理したものです。
たとえば、地図は現実の地形を簡略化したモデルです。
この地図というモデルを用いることで、どこに何があるかを判断できます。

アプリケーションにおいても同様です。現実世界を目的に合わせて、何かしらのモデルで構成することで、操作可能となり、目的を達成できるようになります。

この記事では、以下の5つのモデルを取り上げます。

  1. オブジェクト指向モデル
  2. アクターモデル
  3. エージェントベースモデル(ABM)
  4. イベントソーシング
  5. データフローアーキテクチャ

これらは大きく2つに分けられます。

  • 実体を基点とするモデル(1〜3)
  • プロセス/変化を基点とするモデル(4〜5)

それぞれ、世界をどのように見ているのかに注目しながら紹介していきます。


実体ベースのモデル

世界が人間の目に映る、あるいは知覚できる何かしらの実体で構成されているという素朴な考えから出発します。

1. オブジェクト指向モデル

世界に多数ある実体(=オブジェクト)は、実体同士で関係性があると捉えたモデルです。
実体自体には状態(属性)があり、実体と実体の間には関係性があります。
実体は振る舞い(メソッド)を持ち、他のオブジェクトと関係しながら動作します(実体が持つ振る舞いは他の実体に依存します)。

例: ユーザーが本を借りる → UserBook.borrow() を呼び出す

2. アクターモデル

各実体(=アクター)が独立した存在で、お互いにメッセージのやり取りをする存在と捉えたモデルです。
アクターは状態を持ち、非同期メッセージに応じて振る舞います。

例: ユーザー → ATM → 銀行サーバーへのやりとり

オブジェクト指向に比べて疎結合で、並行・分散処理に強く、マイクロサービスアーキテクチャとの相性が良いです。

3. エージェントベースモデル(ABM)

個々の実体(=エージェント)が、全体において存在するルールに基づいて、振る舞いが生まれることを前提とするモデルです。
全体の制御を設計者が行うのではなく、個々のルールと相互作用の中から複雑な動きが自然に現れます。

例: 交通渋滞、疫病の感染拡大、マーケットの価格変動
社会シミュレーションや複雑系の研究などに適しています。


プロセスベースのモデル

世界をプロセス/変化を基点とするモデルです。

4. イベントソーシング

世界を「出来事(イベント)」の履歴として捉えるモデルです。
状態はイベントの累積として計算され、過去の状態をいつでも再構成できます。

例: 注文が作成された、支払われた、発送された、などのイベントログ
監査性や過去追跡、障害回復が求められるシステム(金融、会計など)に適しています。

5. データフローアーキテクチャ

世界を「データの流れ」として捉えるモデルです。
データが各ステージを通過しながら変換されていき、最終的な成果物に到達します。

例: センサー → データ整形 → 分析処理 → アラート発報
リアクティブプログラミング、ストリーム処理、ETLパイプラインなどに応用されています。


比較とまとめ

モデル 解釈の軸 適用領域
オブジェクト指向 実体と関係 業務アプリ、モノリス設計
アクターモデル 実体と通信 マイクロサービス、リアルタイム処理
ABM 実体と創発性 シミュレーション、複雑系
イベントソーシング 出来事の履歴 金融、監査、分散DB
データフロー データの変換過程 IoT、データ処理、ETL

設計の第一歩は、世界をどう解釈するかを決めることです。
どのモデルが正解というわけではなく、「どのように世界を見たいのか」「どのような変化を表現したいのか」によって適したモデルは異なります。


おわりに

アプリケーションの設計を始める前に、いったん立ち止まって「この世界はどういう構造なのか?」「私は何を表現したいのか?」と考えてみる、その姿勢こそが、よい設計への入り口なのだと思います。

Discussion