アレグザンダーとソフトウェアにおけるデザインパターンについての覚書
難波和彦氏のアレグザンダーに関する批評を読んで、いろいろ思うところがあった。これはアレグザンダーの方法や業績を概観できる素晴らしい批評なので一読することをお勧めしたい。
断っておきたいが、ぼくはアレグザンダーを詳しく読み込んだわけではないため、以下の記述はただの雑感である(と、いちおう予防線を張っておく)。
構造はどこにあるのか
建築や都市は人間がつくるものである。この意味で建築や都市は思考が現実化された存在である。一般的に建築家や都市計画家は外界に存在する建築や都市、つまり対象そのものの構造を問題にする。これに対しアレグザンダーはいきなり対象に向かうのではなく、対象を記号化し思考の対象へ還元した上で、記号の構造を問題にした。
アレグザンダーは、設計という営みのなかに一つの次元を発見している。それは思考パターンの問題である。都市設計がいままでツリー型で設計されてきたのは、人間がツリー型で物事を整理するためである。設計は、そのもととなる人間の思考パターンに依存する。これはカント的な発想の典型だ。カントによると、対象の直接的な認識は不可能で、われわれが見ている自然とは、われわれ自身によって構築されたものである。つまり、認識には認識する主体というレイヤーが存在している。設計という営みは、こうしたメタ構造としての思考パターンの直接的な影響下にあるとする点がアレグザンダーの発見だ。
難波氏の批評にも「構造は一体どこに存在するのかという問題、つまり構造は外界に存在するのか、それを捉える人間の思考の内部に存在するのかという問題」として、これがカント的な問題であることが指摘されている。
カントの場合、自然と認識主体の関係を、パスカルよろしく人間は考える葦だとすることにはそんなに不都合はない。これがデザインの問題になってくるといくつかめんどうな問題が立ち上がる。デザインとはそもそも人間が計画的に作る行為に付けられた別名なのだから、人間の認識パターンがその成果物に反映されているのは当たり前である。いっぽうで、デザインはある程度その成果物も指している。フランク・ロイド・ライトの落水荘のデザインとは、彼の設計図や彼の認識なんだと言われると、つまりメタなものがその本体なのだと言われると、そんなことないだろうという気になる。
何が言いたいのかというと、デザインの成果物とは自然ではなくて人間の作物である。「構造はどこにあるのか?」という問いは、カント的に考えると人間の頭のなかにあるのは間違いないのだが、この人間の頭のなかにあるものを出力した場合、構造はどこにあるといえるのだろうか。それは出力された結果の成果物のなかにあるのか、それともやはりなお人間の頭のなかにあるのか。
一般に、デザインという営み自体は、この出力された成果物と人間の脳内のモデルとの循環的な対話だと言えるだろう。そういった定義があるわけでもないが、創作行為は一般にそうである。創作行為は何度も出力を繰り返すことによって脳内のモデルを増幅する行為である。もしそうでないのであれば、デザインは演繹によって解決される問題になる。初期のアレグザンダーはまさに演繹によってデザインを行おうとしたのだが、その極北において転回する様を難波氏は的確に批評している。
デザインパターン
難波氏の批評を読みながら、ぼくが考えていたのは、ソフトウェアデザインの業界における「デザインパターン」の問題である。デザインパターンはどこに存在するのだろうか?
よく知られている通り、ソフトウェアデザインの業界で「デザインパターン」はアレグザンダーから輸入された。1996年のOOPSLAでの彼のキーノートは、ソフトウェア産業におけるアレグザンダーへの熱狂に対する困惑から始まっている。
GoFによるデザインパターンは、アレグザンダーのパタン・ランゲージを輸入しようとしたものだし、エリック・エヴァンスによるドメイン駆動設計は、GoFより包括的に、おそらく後期アレグザンダーの共同的なデザインというアイデアをアジャイルという文脈から取り込んでいる。
最近、田中ひさてるさんが、デザインパターンの乱用に関する強烈な批判を書いていた。
マンガを描くためにウェブで調べているうちに、どのような有様を指すかではなく、どのように 書くこと がデザインパターンなのかを説明する記事があまりにも多くて、とても残念な気持ちになりました。
「書かれたデザインパターン」は、先程書いたような循環的なプロセスと無関係に存在してしまう。デザインパターンの定型化の弊害は、演繹によってデザインが可能になるという錯覚を生み出すことにある。GoFの本来の目的いかんに関わらずそうなってしまった。
デザインパターンはどこに存在するのか?という問いに戻ると、結局それは脳内にあるものだ。それは設計のイメージを増幅するための言語と呼ぶべきものであって、構造を記述するための専門用語のようなものではなかったはずだ。人間が言語によってかなりの程度抽象的な思考が可能になったように、デザインパターンも思考のための跳躍台になるべきものである。それらデザインパターンが、デザインにかかる本来のコストを軽減することはない。
エリック・エヴァンスのドメイン駆動設計
さきほど、エリック・エヴァンスのドメイン駆動設計は後期アレグザンダーの影響下にあるということを書いた。エリック・エヴァンスのドメイン駆動設計のなかでは、ユビキタス言語ほど重要性をもった概念はない。ユビキタス言語は開発チーム内のみならず、顧客となるドメインエキスパートにとっても共有されるものである。ここが形骸化している場合、軽量DDDなどと否定的に語られる。
難波氏のテキストにアレグザンダーの「盈進学園東野高校キャンパス」の事例について書かれているが、このころアレグザンダーは顧客参加型のデザインプロセスを実践していた。盈進学園東野高校キャンパスはその失敗した事例である。エリック・エヴァンスが盈進学園東野高校のことを知っていたかどうかはわからないが、こういった顧客参加型のデザインプロセスという潮流はアレグザンダーから来ている。エヴァンス本のなかで、ユビキタス言語は顧客参加型のデザインプロセスを成立させるための肝である。
ドメイン駆動設計において「集約(Aggregate)」などの実装寄りの手法を意味づけるのは、人間が普段のコミュニケーションの次元ではエンジンとかタイヤなどを考えていなくて、「車」という単位で考えているからである。集約によってはじめてオブジェクトがラベリング可能になり、メンタルモデルとコンピュータモデルとの対応付けが可能になる、という点が重要だったのだと思う。他の実装関連の手法にも同じことが言える。これらの実装パターンによって表現されるものはユビキタス言語になる資格をもつ。プログラムがユビキタス言語になると何が嬉しいかといえば、それによってノンプログラマーと会話できるということである。車のことを話すときに、タイヤとかエンジンのことは忘れて良い。
おもうに、エヴァンス本の問題点は、「集約」がパタン・ランゲージではないことだろう。集約を知っているのはプログラマーだし、「集約」という概念が伝わるのもプログラマーであって、ユーザーには関係が薄い。ユーザーと共有すべきなのは、「車はタイヤやエンジンなどの集約でできている」ことではなくて、「車は何に使えるのか」ということだ。このセンテンスを成立させるためにこそ、集約という構造には意味がある。パタン・ランゲージになりうるものは、「集約」そのものではなく、「車と道路の関係のあり方」などのほうである。「車が駐車されているときのたたずまい」とか「目を覚ますエンジンの音」だとか、パタン・ランゲージはどちらかといえばそういうものだろう。要するに、オブジェクトの組み合わせの可能性のなかで意味あるものがパタン・ランゲージなのであって、ものを支える構造性のことではない。意味の発見は環境のなかで行われているのである。
ドメイン駆動設計の第二部はパタン・ランゲージであることが意図されているが、ぼくはここに違和感を感じている。エヴァンスは要素に分解しすぎている。かれの実践的な方法論はほとんど「部分を合計すると全体になる」ような要素還元主義になってしまっている。この発想自体がツリー的で、エンティティも値オブジェクトもサービスもこれらを組み合わせるとパターンが現れるかというとそんなことにはならない。この組み合わせの方こそパターンなのである。この組み合わせの可能性としてのパターンは脳内にあるものだ。ドメイン駆動設計、とくに軽量DDDと呼ばれる実践は、思考パターンというメタ領域に対してあまりに無自覚である。この無自覚は、実際にツリー状のコンポーネント群を生み出すという結果になるだろう。アレグザンダー以前のデザインに戻るわけである。
むろんパターンが組み合わせの可能性であることはエヴァンス自身よく理解している。それはドメイン駆動設計の付録を読めばよくわかる。だが、かれはアレグザンダーのパタン・ランゲージを「実証済みの設計上の解決策をまとめ上げた」ものだとしてしまう。これではまるでパタン・ランゲージとはよくできたディシプリンのようなものになってしまうではないか。エヴァンスはパタン・ランゲージによってデザインのコストが下がると考えてしまっているのである。
難波氏のテキストから引用する。
ダイアグラムは形式的な数学言語によって記述され、内部構造が明示されている。これに対しパタンは自然言語によって記述され、内部構造は曖昧なままである。
難波氏の報告を鵜呑みにするなら、アレグザンダーの盈進学園東野高校キャンパスは確かに失敗である。一つの原因は構造屋とのコミュニケーションがうまく行かなかったことにあるのだろう。自然言語と厳密な構造記述用の言語の間にはギャップがある。これが、オブジェクト指向であれば魔法のようにこのギャップがなくなるということを信じる根拠はどこかにあるのだろうか。
最後に
クリストファー・アレグザンダーからはじめて、おもわずながながとエリック・エヴァンスを批判することになってしまった。「あなたの書いていることはエリック・エヴァンスのドメイン駆動設計とは無関係だ」といわれれば、まあそれはそうかも知れないとも思う。そういう意味ではぼくはエヴァンス本をまったく誤解しているのかもしれない。
近代のデザイン史の流れのなかにソフトウェアデザインの歴史を位置づけていきたいという個人的な欲求がなかなかおさまらず、そういった視点でソフトウェアデザインを位置づけていくと面白いのではないだろうか。
もはやこの怪文書も限界に達しているのでこのあたりで筆を置くことにする。