変幻する実行可能知識 17パターン I - 自然言語としてのパターン今さらだけれど, もう一度パターンを読んでみよう. 実は僕はソフトウェアのデザイン・パターンそのものにはほとんど興味がない. 嫌いでも好きでもない. ソフトウェアを書けば自然に使っているけれど, 今どきのパターンの名前をいっぱい知っているわけでもない. 4人組の本が出る前から, つまりそれぞれのパターンが自分の名前を持つようになる前から, SmalltalkやC++のいくつかのライブラリやNeXTStepで, 多くのパターンを学び, 使い, 作ってきたけれど, それだけの話だ. ソフトウェアに限らず, モノを作る作業を繰り返していれば, そこには必ず何らかのパターン「が生まれて」くる (パターン「を作る」のではなく). デザイン・パターンの教科書 (「デザインパターン - オブジェクト指向における再利用のための」ガンマ他, ソフトバンク・クリエイティブ, 1995) を書いた4人組が偉かったのは, その生まれてくる過程を目の当たりにして見せたことだろう. 4人組の本に書いてあるのは, 結果としてできあがった (名前を付けられた) パターンのカタログではなく, なぜパターンが必要とされ, どのようにして生まれ, どのように変化しながら使われているかという生成 (流転) の物語なのである (注1).
ソフトウェア・デザインのパターン言語は, 建築家であるクリストファー・アレグザンダーのデザイン・パターンの考え方を下敷きにしていることはよく知られている. もっとも建築の世界でデザイン・パターンは主流ではないし, アレグザンダーのパターンの集大成とも言われる盈進学園東野高校プロジェクトも必ずしも成功したとは見なされていない (注2). アレグザンダー自身にとっても, ある時点で彼の思考と実践をもっともよく表すものがパターンであったということであり, パターンの考え方は時を追って変化している. また最近はNature of Orderということを考えているらしい (注3). それはそれとして, 一度, 我々はアレグザンダーの本に戻って, そこには実際にはどんなことが書かれていたのかを読み直してみよう.
デザイン・パターンに関して, アレグザンダーは全部で6冊の本を書いているが, ここでは手元に邦訳書のある次の4冊
のうち, まずは「時を超えた建設の道」から見ていくことにしようと思う. 「時を超えた道」というのは多分老子の「道」(TAO) のことだろう. 実際, 本書は大きく三部構成になっていてそれは「質」, 「門」, 「道」, つまり名付け得ぬ質に到達するための門をくぐる道なのだ. 語り口も心なしか老子風である. 本書はパターンのカタログではない. パターンとは何か, を説いている. 本書全体を通じて強調されているのはまず第一に「生き生きと生きている」ことである. 重要なのはパターンが「動機/状況」, 「フォース」, 「実現」という形式に従っていることだけでは全然ないのだ. 「生き生きと生きた」(注4) パターン・ランゲージがなければ, いくらパターンを使っても生き生きとした建築物を作ることはできない. そして本書では (例えば) 画一的コンクリートと鉄とガラスの箱の建築は明らかに生き生きとした建築とは見なされていない. つまり, そもそもアレグザンダーのパターンはつまらない, ありきたりな (例えば) 会計システムを (ありきたりのままに) 作るためのものではないのである.
第二に強調されているのは, パターンとは孤立した存在, 部品ではないということである. ひとつの正しいパターンというものもないし, パターンを組み合わせて正しい建築ができると言うこともない. 重要なのはパターンとパターンの間の関係が作り出すネットワークなのであり, パターン間の関係も (こそが) パターン・ランゲージの構成要素なのだ. なぜならそもそも言語 (ランゲージ) とはそういうものなのだから. 例えばファクトリ・パターンを知っていてそれを使っただけでは多分何の意味もないのである. ファクトリの意味ならば辞書 (カタログ) に載っている. そうではなくて, 依存性を減らすことでプログラムを「美しく」することができる, 依存性を減らすためにインタフェースに対するプログラミングを行う, インタフェースをどこかで具体化するためにファクトリを使う, のである (あくまで例えば, だ). つまり適切な文脈で適切な言葉を使うから会話が成り立つのであって (逆に会話の内容から言葉の定義ができてくることもある), それは言葉 (やその定義) 自身には含まれていない. そして次に強調されているのは, パターンは人為的に作られるものではなく, 自然に有機的に生成/発生していくものであるということである. 「パターンは意識的に作り出そうとしてはならない. ... 頭に浮かんでくる意図は追い払うこと. ... ひたすらパターンだけにこだわっていればよい. その気になりさえすれば, さしたる努力もなしに, パターンと現実の局面が一体となって, 頭の中に正しい形態が生み出されるのである」(p.318). 重要なのは個々のパターンそのものというよりも, パターンが生成されるプロセスにあり, そのプロセスとは全一性に向かうプロセス (シーケンス) なのである. プロセスはランゲージに内包されている. アレグザンダーは「分化」というトップダウンなプロセスを重視している. しかし残念ながらそのプロセスはきわめて暗黙的だ. 我々にとっては例えば「テスト駆動開発」もひとつの重要なプロセス (パターン・ランゲージ) であるが, やはりテスト駆動開発していると言うだけで全一性 (名付け得ぬ質) に向かうのはいささか困難だろう. エクストリーム・プログラミングには議論の多い「メタファ」というプラクティスがある. なかなか理解も利用もされないが, ここに全一性へのヒントがあるかもしれない. そして「時を超えた建設の道」の最後にアレグザンダーは言う. 「ランゲージとは, 私が無我と呼ぶ心境に達するための道具なのである. ... それは, もはやランゲージを必要としないほど自分の心に忠実に生きる, あの心境へと導く門口にすぎない」(p.443) と. さて, 「時を超えた建設の道」は邦訳のあるパターン本4冊の中でも風変わりな方であるのは確かだ. しかし, アレグザンダーが考えていたパターンと, 我々ソフトウェア業界で通常パターンと呼ぶものとの間には大きな隔たりがあることをお分かりいただけただろうか. アレグザンダーにとってのパターンとは何よりも自然言語のようなもの, つまり生きていて, 関係性の網の目であり, 自然に発生/生成し, 最後には使っていることさえ忘れてしまうようなもの. 我々が本当に必要としているのはどちらのパターンだろうか? |