REA パターンとオントロジー(ビジネスパターンによるモデル駆動設計)

ビジネスパターンによるモデル駆動設計

  • Pavel Hruby (著), 依田 智夫 (監修, 監修), 溝口 真理子 (翻訳), 依田 光江 (翻訳)
  • Model-Driven Design Using Business Patterns
  • 日本語版 発売日 2007/8/9、英語版 発売日 2006/6/22




REA(Resource-Event-Agent)という言葉は本のタイトルに含まれていませんが、この本は REA モデルにもとづく業務アプリケーションの設計パターン本です。

REA とは、ざっくり言えば、「商品を売ってお金をもらった」といったことを、「商品を売る(商品が減る)」、「お金が増える」という2つの双対な経済イベントとしてとらえ、そのイベントに関係するリソース(商品、お金など)と、エージェント(売り手、買い手となる企業や個人)を合わせてモデリングする考え方です。

これは簿記において、取引を借方と貸方で金額が同じによるように仕訳するのと似たような考え方ですが、そもそも REA は汎用の会計モデルとして提案された方法とのことなので、似ているというより包含した考え方のようです。

私は財務会計に関する知識は持ち合わせていないので、会計モデルとの対比云々は語ることができませんが、この本は財務会計の本ではないので会計知識が無くても読めますし、私は REA の双対となる増減イベントの考え方は強く印象に残りました。

また、この本には以下のように書かれています。
  • アプリケーション設計者は、一貫性があり業務の観点から見落としのない構造を手に入れることができるはず

この本が出版された当時に読んだ印象は「面白い視点の本だなー」という程度でしたが、あるきっかけでこの本を読み返してみると、オントロジーとの関連が強いことが分かり、今までとは違った観点で「面白い本だなー」と感じています。

そこで、少し古めの本ではありますが(改定版はないと思いますが)、本ブログで取り上げることにしました。

<本の内容>

目次
  • 第1部 構造パターン
    • 第1章 業務レベルにおける構造パターン
    • 第2章 方針レベルにおける構造パターン
    • 第3章 REAベースのアプリケーション例
  • 第2部 振る舞いのパターン
    • 第4章 横断的な関心事
    • 第5章 パターン
    • 第6章 アスペクトベースのアプリケーション例
  • 第3部 モデリングハンドブック
    • 第7章 基本的な交換プロセス
    • 第8章 基本的な変換プロセス
    • 第9章 交換プロセスと変換プロセスのあるバリューチェーン
    • 第10章 契約を伴うプロセス
  • 付録A REAオントロジ
  • 付録B モデリング上の注意点
  • 付録C パターンの書式

パターン本ではありますが、REA モデルの基本的な考え方を押さえておかないと次に進めないため、第1部から順に読み進める必要があると思います。(私はそうでした。)

目次だけ眺めてもピンときませんので、とても大雑把で大変恐縮ですが、話の流れと取り上げられるパターンを見ておきます。

まず第1章では REA モデルの基本的な説明があります。

REA は、Resource、 Event、 Agent の頭文字をとったものですが、これらは以下のように定義されています。(少し省略しています。)
  • 経済リソース(Economic Resource)
    • 経済エージェントにとって役に立つものであり、計画、監視、制御の対象となるもの。
    • 例)製品、サービス、お金、原料、労働力など
  • 経済エージェント(Economic Agent)
    • 経済リソースを制御でき、他の個人や組織に制御を移転したり、他から管理を受けたりする個人もしくは組織。
    • 例)顧客、ベンダー、従業員、企業など
  • 経済イベント(Economic Event)
    • 企業が制御する経済リソースの価値の増加または減少を表すもの。
    • 例)商品の販売、労働力の取得、サービスの提供や利用など

これに REA モデルの基本的な考え方があります。
  • 企業が、その制御下にあるリソース全体の価値を増やしたい場合、通常はいくつかのリソースの価値を下げなければならない。

企業は「交換」や「変換」によってリソースの価値を増やしたり減らしたりします。
  • 交換
    • 企業が他の経済エージェントから経済リソースを受け取り、その見返りとして、その経済エージェントにリソースを与えるプロセスである。
  • 変換
    • 企業が新しいリソースの生産や、既存のリソースの変更のために、リソースを使用あるいは消費するプロセスである。

加えて、交換や変換のプロセスで入力あるいは出力となるリソースをつなぐバリューチェーンでビジネスプロセスをモデリングします。

これらを基本的なスケルトンとして企業の経済活動をモデリングしていくことになります。

なお、ピザ屋のビジネスを例に具体的に説明されているのでイメージがつかみやすいです。

<業務レベルのパターン>

  • REA交換プロセス(REA EXCHANGE PROCESS)
    • 取引
  • REA変換プロセス(REA CONVERSION PROCESS)
    • 生産
  • REAバリューチェーン(REA VALUE CHAIN)
    • ビジネスプロセス

上記パターンは、実際に発生した経済的なイベントをモデリングするものですが、システムでは将来発生するイベントやビジネスルールなどもモデリングする必要があります。

第2章では、これらを方針レベルのパターンとしてまとめています。

<方針レベルのパターン:何が起こり得るか、起こるべきか、起こるべきでないか>

  • タイプ(TYPE)
    • 同種の集合
  • グループ(GROUP)
    • 異種の集合
  • コミットメント(COMMITMENT)
    • 将来のイベント
  • 契約(CONTACT)
    • 取引におけるコミットメント
  • スケジュール(SCHEDULE)
    • 生産におけるコミットメント
  • 方針(POLICY)
    • ビジネスルール
  • リンケージ(LINKAGE)
    • リソースの構造
  • 責任(RESPONSIBILITY)
    • エージェントの構造
  • 監督(CUSTODY)
    • リソースに対する責任

第3章で、これまでのパターンを利用したピザ屋のサンプル Web アプリケーションが示されていますので、理解の助けになります。

ここまでが第1部で、基本的なスケルトンとなる構造パターンが書かれていますが、続く第2部からは具体的なアプリケーションで必要となる振る舞いをモデリングするためのパターンが書かれています。

振る舞いのパターンで面白いのは、アスペクト指向プログラミングの考え方を導入しているところです。

といっても、本書で AspectJ などのプログラミング言語を利用して振る舞いのパターンをモデリング、実装するわけではありません。

第4章でアスペクトに関するモデリングの説明があり、その後、振る舞いのパターンが示されます。

<振る舞いのパターン:ビジネスアプリケーションの特定の振る舞い>

  • 識別(IDENTIFICATION)
    • エンティティのアイデンティティ
  • 期日(DUE DATE)
    • デッドライン
  • 説明(DESCRIPTION)
    • 外部情報
  • 注釈(NOTE)
    • 内部情報
  • ロケーション(LOCATION)
    • イベントが発生する場所
  • 分類(CLASSIFICATION)
    • グループ化
  • 通知(NOTIFICATION)
    • メッセージ
  • 価値(VALUE)
    • 測定単位
  • 転記(POSTING)
    • 履歴の保持
  • 勘定(ACCOUNT)
    • 履歴の取り出し
  • 照合(RECONCILIATION)
    • トランザクションの適合
  • 実体化した請求権(MATERIALIZED CLAIM)
    • 請求書
  • 考案者のパラドックス(INVENTOR’S PARADOX)
    • 新しい振る舞いのパターンを発見する方法

第6章でアスペクトベースのアプリケーションのコード例が示されていますので、理解の助けになります。

第3部はこれまでの集大成のようなもので、「モデリングハンドブック」として、アプリケーションモデル例がパターンの形式で書かれています。

  • 第7章 基本的な交換プロセス
    • 現金販売
    • 商品の返品
    • 貸与と賃貸(個々に識別できるリソース)
    • 融資(個々に識別できないリソース)
  • 第8章 基本的な変換プロセス
    • 新しい製品の生産
    • 変換プロセスのチェーン
    • 製品の改変
    • サービスの生産と消費
  • 第9章 交換プロセスと変換プロセスのあるバリューチェーン
    • 販売と出荷
    • 販売プロセス中に消費されるリソース
    • 人的管理
    • 教育
    • 税金
    • マーケティングと宣伝
    • 廃棄物
    • サービスの購入と販売
    • 一時的なリソース
  • 第10章 契約を伴うプロセス
    • 購入注文
    • 労働力の取得
    • 保証
    • 保険
    • コミットメントが履行されない場合の罰則
    • 生産計画
    • 輸送

<感想>

初版が発売されたとき(2007年)、書籍の帯にあった「ビジネスアプリケーション設計を変革する REA による新しいモデリング技法」というキャッチにひかれて衝動買いした本です(笑)。

購入直後に読んだ時は、ビジネス(企業活動)を考えると、確かに取引(交換)や変換で説明できることが多く、何かが増えれば何かが減るな、と思えたので、「面白い視点だなー」と思いました。

また、アスペクトの考え方をコードに落とすサンプルもとても参考になりました。

しかし、REA モデルの基本的な考え方には共感しつつも、ピザ屋の例やコードを見て理解した気になっただけで、最後まで興味を持って読んだわけではありませんでした。

実は、この本を読む前にモデリングのパターン本として以下のような本を読んでいました。

例えば、REA モデルでは主要な概念としてエージェントがありますが、エージェントの具体的な表現に言及しているわけではありません。REA モデルの関心は、エージェントの表現ではなく、イベントやリソースとの相互作用だからだと思います。

一方、上記のようなパターン本はむしろエージェントの表現を深堀しているので、当時は、こちらのほうが仕事に直接使いやすいと感じてました。

さらに、以前の記事で紹介した『アジャイルに一貫したモデリングから実装を維持する方法を知る本(エリック・エヴァンスのドメイン駆動設計)』に比べて、この本は熱い語り口調もなく、原理原則に基づいて淡々と説明が続くようなイメージがあり、読み物としては退屈な印象が強かった本です。(教科書という感じでしょうか。)

しかし、あるきっかけでこの本を読み返してみると、この本は企業活動のドメインオントロジーに関する本であって、上記のような設計パターン本より少し上位の概念を扱っているもの、ということに気付きました。

当時はスルーしていましたが、付録A 「REAオントロジ」には「GeertsとMcCarthy(Geerts, McCarthy 2000, 2002)は、ビジネスシステムのためのオントロジとして、REAを定式化しました」とあり、本書のモデルとの違いを概観しています。

また、英語版Wikipediaには「 In computer science terms, REA is an ontology.」と書かれてました。

ちなみに、REAに関する論文などは下記のサイトにあるようです。

その観点で本の内容を読むと、確かに、語彙(クラス名や関連の名前)の一つ一つに公理っぽく定義が与えられており、かつ語彙の利用にも一貫性があります。

一方、本書には「REAは、ビジネスシステムにとってユビキタス言語を定義するものと言えるでしょう。」とあります。

先に本書に出てくるパターンを列挙しましたが、仕事で普通に使っていた用語にも関わらず、ユビキタス言語になっていたかどうか(正確な共通認識になっていたか)は怪しいところもあり、なるほど、と思うところも多いです。

こう考えていくと、ユビキタス言語としてのオントロジーの位置付けというものも見えた気がして、とても興味深く思えます。

もう少し言えば、デザインパターンとオントロジーの関係も少し垣間見た気がします。

とはいいつつも、(特に上位オントロジーとの関係を考察する)オントロジーを示されるよりは、オブジェクト指向系でまとめてくれたデザインパターンの方が(現場での実装には)使いやすい気もするので、どちらが良い、悪いという問題ではない気がします。

その意味で、REA オントロジーの解説ではなく、設計パターンとして REA モデルを解説してくれる本書は、REA の考え方の導入としても、業務モデリングへの応用にも使える良い本だと(今更ながら)思いました。

(参考)

実は下記の W3C の勧告になっているオントロジーを読んだ時に思い出したのが、今回取り上げたREAの本でした。

これはざっくり言えば、データや物の Provenance(来歴)を、その作成に関与するエンティティ、アクティビティ、エージェントでとらえるオントロジーです。

これを読んだ時に、何か似たようなものがあったな、と思い出したのが REA です。

オントロジー工学」でもイベントやプロセスは深く論じられていますが、このような上位のオントロジーを見ていくと、いろいろなものが繋がっていくような気がして、なかなか興味深いです。


関連記事

コメント

このブログの人気の投稿

VirtualBoxのスナップショット機能

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

Ubuntu/Colab環境でPDFファイルのページを画像化する(pdf2image、pdftoppm、pdftocairo)