情報システム学会 メールマガジン 2013.11.25 No.08-08 [5]

連載 企業および社会における情報システムの意味を考える
第14回 Oriented は指向か?

大島 正善(MBC:Method Based Consulting)

*1.Orientedの意味

 情報技術に関する外来語の中に、Orientedという単語が使われる用語がいくつかある。Object Oriented, Service Orientedがその代表である。それらは、日本語では オブジェクト指向、サービス指向と訳されている。昔からこの訳語には疑問を持っており、正しく概念を伝えていないのではないかという疑念を拭いきれない。あえていえば、その訳語の間違いが、こういった技術を適用する際に混乱をもたらしてきた原因ではないかと密かに思っている。今回は、Orientedは指向ではないという観点から、それらの用語が持つ意味の本質を記述してみたいと思う。

 日本語の指向という言葉、辞書によると次のような意味であることがわかる。

 つまり、指向という言葉から読み取れる意味は、〜を目指してとか〜が指し示す方向に向かってという意味ということになる。

 一方、Orientedという英語は、どういう意味なのかを英英辞典で調べてみると、以下のように書かれている。

 つまり、あることに時間、努力、注意を集中させることという意味と理解できる。が、そこには、ある方向に向かうということとは無関係であるように見える。あることに集中することは、向かうべき方向でもあるかもしれないが、出発点であることもありえる。

 ちなみにObject Orientedはoxford dictionaries で検索すると、次のような意味であると書かれている。(http://www.oxforddictionaries.com/definition/english/object--oriented)

 ここには、オブジェクトの集まりとしてモデルを作るとは書かれているが、私には、どう見ても日本語の指向するという意味が含まれているとは解釈できない。

 orientという語が、東方をさす言葉であることはよく知られている。そして、それが西洋文明の発祥の地としての意味を持っていることも知られた事実である。つまり、orient(オリエント)には、礎であるという意味はあっても、そちらに向かうという意味はそもそもない、と考えてよい。指向というよりも、素源(私の造語:つまり源としての要素)とでもいう意味のように思っている。つまり、Object Orientedは、オブジェクトを指向するのではなく、そこにあるオブジェクトに基づいてであり、Service Orientedは、そこにあるサービスに基づいてと考えるべきということである。

 実際、看護の世界では、Problem Oriented System(POS)という言葉が古くから使われていると聞く。日本語では、問題指向システムと訳されているようだが、その意味は、「患者さんの視点に立ってその患者さんの問題(Problem)を解決する」[*1]という意味とのこと。それは、患者さんの(無い)問題までも見つけようという意味ではなく、現状をよく観察し、真の問題を識別しようという意味である。問題を見つけることが目的ではなく、見つけたあとに解決に結びつけることが目的である。別の言葉でいえば、問題に基づいてであり、問題を素源にしてと表現しても良い意味である。

 もう一点付け加えるならば、実に奇妙なことに、和英辞典で指向(動詞)を英語に直すと、directやpointとなる。〜指向では Oriented が使われるとの記述もあるが、日本語の指向は、本来の意味はdirectingであり、Orientedとは出発点と到達点ほどの違いがある。

2.誤解が与えている悪影響

 この違いは、単に翻訳上の違いだけでなく、その技術なり考え方を適用しようとする場合に、より根本的な間違いを引き起こしている可能性がある。それは、指向という言葉が、目的を意識させる言葉であることが原因である。つまり、最適なオブジェクト(サービス)を識別し定義することがシステム設計の目的となってしまうことである。指向するという言葉をそのまま理解すれば、そういう帰結になるのは当然である。

 しかしながら、Orientedを素源と理解するならば、話は大きく変わってくる。Object Orientedは、対象世界に存在するオブジェクトを見つけ、(最適なものを訴求して定義するわけではない)その集合体としてソフトウェアを設計するということしか述べてなく、オブジェクトの集まりで設計することは、目標でも何でもない。設計目標は別にある。たとえば、性能、変更容易性、利便性といった要求事項の的確な反映といったことである。対象領域に存在する具体的なモノを特定の視点から抽象化して定義することが問われるだけで、それを目指すわけではない。それは、出発点にすぎず、本来狙うべき点は要求事項の充足である。正しい解釈をすれば、重要なのは、現実のモノや事象を的確に認識することであることが理解できる。そこには目標という言葉が内在する意識的な(willともいうべきもの)行為は含まれない。Object Orientedは現実を直視することを重視する考え方であって、理想を追い求める考え方ではない。

 こういった誤解が日本では広まっているために、Object Oriented技術を使うプロジェクトは今まで、大きな問題を抱えてきた。つまり、その技術を適用することが目的となってしまうという事態を引き起こしてきたということである。オブジェクトを指向するために、システム開発の目的が最適なオブジェクトを発見することに主眼がおかれてしまい、本来の目的を見失うということである。

 SOAも同じである。インターネットを調べればわかることだが、こちらは、Object Orientedよりもさらに重要な考え方として、現在でも理解されている。クラウドやバーチャライゼーションとともに、今後の情報システムの主要なコンセプトの一つとして位置づけられる記事が多い。

 サービス指向という言葉からも、何か遠くにある理想のサービスを追求して定義することがその技術を適用することの目的のように思えてしまう言葉である。しかし、Service Orientedが、サービスを素源としたシステムの作り方であると理解すると、話が変わってくる。重要なことは、サービスを追い求めることではなく、現状を観察した上で、システムとしての提供機能をサービスとするということであり、システム機能をSOAという形で実現することではない。モクテキは、あくまで要件の実現である。重要なことは、面の前にある仕事から、何を外部に提供するサービスとするかという現実的な問題であることが理解できる。

 残念ながら、SOAでシステムを構築したという話の多くは、「なぜ、それがサービスなのだろうか?」という疑問を湧かせる事例がかなり存在する。アマゾンやGoogleがSOAでサービスを提供しているというのは良く理解できる。彼らの持っている資産を情報サービスとして利用者に提供しているからである。ところが、サブシステム間の連携をSOAで実現したなどという話は、まったく眉唾である。従来のシステム・コンポーネントやプログラム・サブルーチン、あるいはC言語の関数と何も違いはない。そういう機能を内部サービスと称してSOAだと語っている例を知っているが、本質を見失っているといえよう。外部の利用者が使いやすい外部に提供するサービスもなく、システム内部の機能をSOAで実現している などという話はやめにしよう。

 最後に蛇足であるが、Orientedという単語を使っている用語で、もう一つ有名なものがある。DOA(Data Oriented Approach)である。日本語では、データ中心(型)アプローチと呼ばれており、データ指向アプローチとは呼ばれていない。理由は、ご存じのとおり、そもそも日本語が先に生まれたからであるが、この日本語から英語への翻訳は、Orientedを使うにふさわしい適訳であるように思っている。

 いずれにしろ、Orientedという単語が指向と訳されていることには、理解を困難にし事態を複雑にしているように感じている。Orientedの適切な訳語を見つけることを切に願っている。

 以上