パタン・ランゲージとオブジェクト指向の関係、あるいは分析と総合の動的平衡

ここ数日、こまどさん(@koma_koma_d) が Twiter でクリストファー・アレグザンダーのパタン・ランゲージやそれを参考にしたデザインパターンアジャイルプロセスなどについて話していて、それにつられて僕もいろいろ考えてみたりしたのでブログにまとめておこうと思う。

ちなみにこまどさんもブログにまとめられており、その記事がこちら。

ky-yk-d.hatenablog.com

まあ、僕はあまり大それたことを言うつもりはないのだけど、全体と部分、分析と総合、デザインの民主化、遅延結合などをキーワードに思ったことを徒然なるままに書いていく。Twitterで述べたことをまとめておくかっていう程度のゆるい動機なので、ツイートの引用が多くなること、図を書いたり出典を丁寧に引用したりはできないかもしれないんだけど、そこはあらかじめご容赦願いたい。

パタン・ランゲージとは

読者にどの程度の知識を要求していいのかわからないのと、パタン・ランゲージとは何かっていうのを語り出すといくらでも語れてしまってキリがないので、パタン・ランゲージについては上述したこまどさんのブログを読んで欲しいのと、あとは原典である以下の書籍を読むといいと思う。

簡単に言うと、建物や街並によく現れる良い特徴を組み合わせて建築物や都市のデザインを進めていこうというデザインプロセスのことで、単語と単語を組み合わせて文章を書くようにパタンとパタンを組み合わせてデザインを作るため、パタン・ランゲージと呼ばれる。

パタン・ランゲージとメッセージベースオブジェクト指向

タイトルを見て「えっ、パタン・ランゲージとオブジェクト指向が関係あるの?」って思った方もいるかも知れないが、僕は根本にある思想は極めてよく似てると思う。

ちなみに「メッセージベース」と明示したのは現在広く(おそらくメッセージベースより一般的に)使われているクラスベースのオブジェクト指向とはかなり設計思想が違うからである。真逆と言ってもいいほどに。

ただ、そのあたりのメッセージベースオブジェクト指向とクラスベースオブジェクト指向の違いの話は今回の主旨とは違うので割愛させていただいて、興味がある人は Object Oriented Conference 2020 で僕が発表した資料を見てもらいたい。

全体と部分、分析と総合の動的平衡

パタン・ランゲージもオブジェクト指向も、存在する要素(パタン、オブジェクト)を組み合わせて全体を構成していくというところは共通している。

自然言語が単語が集まって文章となるようにパタン・ランゲージにおいてはパタンとパタンを組み合わせて建物や都市をデザインするランゲージとなるものだし、オブジェクト指向もオブジェクトが他のオブジェクトにメッセージを送ることによってコンピュータと対話するものである。

これら 2 つに共通する特徴として以下が挙げられると思う。

  • デザインはユーザの手によって行われるものであること
    • 住民や地域とともに行うデザイン
    • パーソナルコンピューティング
  • 段階的であること、変化へ容認的であること
    • パタンの発見、ランゲージの進化
    • 結合の遅延

アレグザンダーは『パタン・ランゲージ』を出版する前に『形の合成に関するノート』『都市はツリーではない』という別の著作も発表しているが、これらではデザイン対象となるものや解決するべき問題領域をまず小さな問題に分解し(=分析)、そのそれぞれに解決方法となるデザインをした上で再びそれらを組み合わせる(=総合)ことによって元の問題に対するデザインが可能だとした。ただし、これは以下の 2 つを前提にしていて、結果的には彼自身も方針の転換をするにいたった。

  • 問題(コンテキスト)の構造と解決(デザイン)の構造が同じである
    • 分析の結果のツリー構造と総合するべき解決のツリー構造が同じでなければならない
  • 問題が静的であり、そこから単方向的にデザインが導かれる

問題領域を分析した結果を逆順に総合していってもそれが最初の問題の解決方法になるとは限らない。それはそもそも問題の構造も解決の構造もツリーではなく相互に重なり合うからであり、アレグザンダーはこれをセミラティス構造と呼んだ。

また、何らかのデザインを生み出すとそれによって問題の構造も変わり得るため、問題(コンテキスト)とその解決方法としてのデザインは双方向に影響され、分析して総合をするというアプローチでは真に必要とするデザインに辿り着けなかったのである。

こういった経緯から彼はパタン・ランゲージにいたった(さらに、その後 15 の幾何学的特性にいたる)のであり、これはいわば全体と部分、分析と総合、コンテキストの把握とデザインの発見といった双対性を同時に行うということだと言えるのだと思う。

アラン・ケイらが最初の Smalltalk を作ったのが 1972 年、『パタン・ランゲージ』(原著名: 『A Pattern Language: Towns, Buildings, Construction』)が出版されたのが 1977 年とほぼ同時期であることから、両者が何らかの影響を与えあったとは考えにくいが、のちに Apple 社でアラン・ケイとともに働いたケント・ベックウォード・カニンガムがアレグザンダーの影響を受けて XP や Wiki (の前身となるパターンブラウザ)の考案に繋がったこと、またアラン・ケイ自身も Wiki の開発に興味を持っている(らしい)ことなどを考えると、やはり両者の考えは非常に近いと言えるのではないだろうか。このあたりの話は以下の書籍で詳しく述べられている。

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)

  • 作者:江渡 浩一郎
  • 発売日: 2009/07/10
  • メディア: 単行本(ソフトカバー)

自己言及性

こまどさんのツイートで「パタンは自己言及的である」というのがあって、これはいい表現だって思ったので僕のツイートも含めて引用しておく。

自然言語が新しい単語や新しい概念を既知の語彙で説明できる(広辞苑を思い浮かべて欲しい)ように、パタンもパタンとパタンを組み合わせて作れるし、オブジェクトも別のオブジェクト同士を組み合わせて作れる。こういった自己言及的なランゲージによって、住民や利用者たちの創造力や想像力をかきたて、段階的に語彙を増やしていくことができるのである。この性質を僕は合成可能性(composability)という言葉で呼んでいたけど、自己言及性のほうがなんとなく生き生きしている感じがする。

これは対象を部分の集合でなく全体性をおびたひとまとまりとして捉える*1一方で、個々のパタン*2やオブジェクトにまた全体性を見出すといったプロセスであり、全体から部分への分析、部分から全体への総合を常に同時に行い、常に動的平衡状態を保っていると言えるのではないだろうか。

リレーショナルデータモデルと遅延結合

ここまでの話でだいたい言いたいことは言ってしまったのだけど、ちょっとしたコラムとしてリレーショナルモデルの話をさせて欲しい。僕のことを直接知ってる人であれば僕がリレーショナルモデルをどれだけ好きか知ってるはずなので許してくれるはず。

アラン・ケイらが Smalltalk を開発したり、アレグザンダーが『パタン・ランゲージ』を出版した 1970 年代というのは、僕らが今当たり前に使っている RDB の基本的な理論がコッドによって発表された頃でもある。(そう考えると 1970 年代というのは本当にすごい時代だなマジで…)

パタンとパタンを組み合わせて別のパタンを、オブジェクトとオブジェクトを組み合わせて別のオブジェクトを自己言及的に形成していくように、リレーショナルモデルもリレーションとリレーションを組み合わせて新たなリレーションを作るランゲージだと捉えることができる。コッド博士がそういう未来を想像していたかはわからないので、あくまで理屈のうえでの話ではあるが。

こうやって考えると、リレーショナルモデル(および RDBMS)というのはもっと柔軟にユーザ自身の手によって概念を形成していく手段であり得たと思うのだけど、テーブルという物理的記録単位の存在が中心的概念として横たわってしまっているがゆえにアラン・ケイのいう遅延結合やアレグザンダーのいう生き生きとしたデザインというものの実現が難しくなってしまっているのではないだろうかと思うことがある。

リレーションとは一体何だったのか、当時主流だった階層型データベースやネットワークデータベースに対してなぜ RDBデファクトスタンダードとなったのか、そういった点を今一度僕たちは再考するべきなのかもしれない。

まとめ

まとめるの難しいので、アラン・ケイがメッセージとは何かという説明に用いた「間」という語の説明について引用して無理やりまとめようと思う。

The Japanese have a small word - ma - for "that which is in between" - perhaps the nearest English equivalent is "interstitial".

The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be.

http://wiki.c2.com/?AlanKayOnMessaging

それぞれの要素がどのようなものであるかよりも、要素と要素がどのように協調するか、つまりどのような「間」がそこに存在するのかがより重要と考えたということであろう。(ほぼ直訳)

パタン・ランゲージ、オブジェクト指向、リレーショナルモデルというものが、何を基本要素とし、どのような「間」を持つのかをまとめると下のようになる。

  要素
パタン・ランゲージ パタン パタンを結合するパタン
オブジェクト指向 オブジェクト メッセージ
リレーショナルモデル リレーション リレーショナル演算

これらはいずれも自己言及的で、段階的に成長させることが可能な語彙のネットワークであり、動的平衡を実現でき、複雑で長期的な問題構造に立ち向かえる可能性を秘めたものである。

本当に最後

ちなみにこういう話をもっとしたい人のために勉強会が開催されるので興味ある人はぜひ。

alexander-study.connpass.com

*1:これの発想はゲシュタルト心理学の影響と思われるが彼らがどの程度それを参照したかは僕はわからない。 ただ、アレグザンダーは認知心理学的実験を行っているので、それなりに影響を受けているとは思われる。

*2:アレグザンダーはのちにセンターという概念を見出すがここでは言及しない