19.lubricious+architecture

変幻する実行可能知識 19

パターン III - なめらかなアーキテクチャ

今回はシリーズ最終巻「まちづくりの新しい理論」に目を通してみよう. 我々の (アレグザンダーの, ではなく) キーワードは「なめらか」だ.

「まちづくりの新しい理論」は, 「成長する全体」をいかにして作り出すかという理論とその実験の書である. 「成長する全体」を作り出すための「最優先のルール」と「七つの中間的ルール」を定め, それをサンフランシスコの5年間, 約90のプロジェクトからなるウォータフロント開発計画でシミュレートした過程が述べられている.

我々は, この最優先のルールと, 七つの中間的ルールを我々ソフトウェアの言葉に翻訳しながら, 具体的なソフトウェア開発プロジェクトに対してシミュレートしてみよう.

まず, 「成長する全体」とは何か. もちろんアレグザンダーはあるべき「まち」を念頭に置いている (それに対して近代的な都市計画にはこれらの性質が欠けていると言う).

  1. 全体は少しずつ成長する
  2. 全体は予測できない
  3. 全体はホロニックである (注1)
  4. 全体は常に情感に満ちている

注1: ホロニックというのは簡単に説明するのは難しいのだが, 単純なトップダウンの構造分割ではなく, 上位の要素が下位の要素を規定するのと同時に, 下位の要素も上位の要素に働きかけるような, 相互作用的な再帰構造のことだ (第15回参照)

我々にとってどうだろうか. 例えば古典的な (といっても今でもごく当たり前の) 基幹システムを考えてみると,

  1. システムは基本的に納品時に完成している. 実際にはその後も変化するが, それは「保守」であって本質ではない
  2. システムは完全に予測 (設計) できていなければならない. したがって, 往々にしてもっとも重要なのはデータベースのスキーマが完成していることであり, なおかつ将来を見通したレイアウトでなければならない
  3. システムは部分の総和 (静的なコンポーネントの固定的な接続) である
  4. システムに情感 (!!) は必要ない

古典的な基幹システムはアレグザンダーが言う近代的な都市計画に他ならない. これでいいのか. 良しとするならば, その先の話は必要ない. しかし, これからのITをベースとした柔軟で迅速なビジネスのための基幹システムを考えたとき,

  1. システム全体を最初から考え尽くすことはできないし, 寿命が来たからといってすべて作り直すということはあり得ない. つまりシステムは少しずつ成長するしかない
  2. 今のビジネスや社会の状況, 技術の進展などを考えればシステム全体を予測することはできない
  3. 単なる部分の総和でシステムを構成することはできない. それぞれが自律的で多様なコンポーネントの複雑で動的な関係をもとに首尾一貫したシステムを作らなければならない
  4. 利用者にとっての単なる機能以上の品質 (深層品質とも言う), 作り込み, 手触り感, 感情を喚起する力こそが重要である

のではないか. としたら, 先に進んでみよう. アレグザンダーは「成長する全体」を実現するための最優先のルールは「さまざまな場所で次々と行われる建設は, 都市を癒す (= 全体を取り戻す) ような方法でなされるべきである」と言う. 我々の言葉で言い換えてみよう. 「さまざまな場所で次々と行われるシステム構築は, ビジネス環境を癒す, つまりビジネス環境の全体性を取り戻すような方法でなされるべきである」. ここでビジネス環境とは, 企業組織, 組織の構成員, 取引先や顧客, ユーザなどの関係する組織/個人からなる世界のことを考えている. ああ, 我々にそんな重大な使命があったとは!

さて, このいささか抽象的な「最優先のルール」を具体化するために, アレグザンダーはとりあえず (というのはそれは状況によって変わるだろうから) 七つの中間的ルール

  1. 漸進的成長
  2. 大きな全体の成長
  3. ビジョン
  4. ポジティブな都市空間
  5. 大きな建物の内部プラン
  6. 施工
  7. 中心の形成

を置く. 我々の関心対象に即して, 4を「ポジティブな情報空間」, 5を「大きなシステムの内部プラン」, 6を「構築」と言い換える. 順に見ていくことにしよう.

1. 漸進的成長

漸進的成長とは, まさにインクリメンタル開発ということ. 皆さん, よくご存知ですね. 基幹システムといえども, まずは小さいドメイン (例えば商品管理部) を対象にし, ユーザが直接操作できる機能ごとに開発して, リリースしていく. 多分, 旧システムとの接続性を確保し続けなければならないのが, いちばんのネックになるだろう.

2. 大きな全体の成長

しかし, 漸進的成長だけでは大きな全体を作り出すことはできない. 今までのやり方ならばそのために計画 (設計) を立てるのだけれど, 我々はそうしない. なぜならば人為的な計画 (設計) から生まれるものは成長しないし, 全体的な深層品質にも欠けるから.

ではどうするか. インクリメンタルにモノを作りながら, もう一つ上のレベルはどうあるべきか, 常にユーザを含めて議論と評価を繰り返す. 全体についての目標は紙には書かれないが, 関係者全員の頭の中にある. ひとつのインクリメントで作り出されたユーザ機能は, 隣り合うユーザ機能や上位レベルのあり方を喚起する力がなければならない. そのうちに「中心」 (大きな構造) が自然に現れてくる. これがある種の「アーキテクチャ」, エクストリーム・プログラミングで言う「メタファ」ですな.

例えばインクリメントが進んでユーザ機能が増えてくると, それをうまくつながなければならない, という「きっかけ (てがかり)」が生じる. つなぎ方がだんだんできてきたら, それをプロトコルなどの形で「位置付ける」. プロトコルはユーザ機能が増え, つなぎ方が多様になるにつれて, 「徐々に成長し」, 柔軟な構造ができてくるだろう.

あるいはユーザの間で仕事やちょっとしたメッセージを回す必要が出てくる. 今までの基幹システムではあまりこういうことは考えなかったかもしれないけれど, これもひとつの中心になる. 我々が最近アスペクトと呼ぶモノと関連しているかもしれない. 中心はひとつとは限らないし, 複数の中心からなる中心もあるかもしれない.

3. ビジョン

これはすべてのプロジェクト (我々で言えば各ユーザ機能に相当するだろうか) の出発点で, 何をするために何を作るのかを, 理想的な姿としてありありと目に浮かぶようにすることから始めなさい, というルールだ. ビジョンは「価値」と言ってもいいかもしれない. ビジョンがあり, それをみんなで共有できて初めて, 要求なり仕様として書き下ろしなさい, と.

難しいと言えば難しい. ユーザ・インタフェースに関する部分は例えばペーパー・プロトタイピングなどでまかなえるかもしれない. しかしもっと深い部分に対するビジョンも必要になる. 我々は心の奥底から何がしたいのか, 何が人生にとってプラスになるのか. 今までは基幹システムに「価値」なんて厄介なモノは求められなかったろうに...

4. ポジティブな情報空間

これはビジョンを具体化するに当たって, 外部空間 (建物やシステムの外) がネガティブになってはいけない, というルールだ. もう少し言ってしまえば, どんなに立派なシステムができあがっても, システム化の対象にならなかった部分にいろいろなしわ寄せがいってはいけない, ということになる. 例えばシステムに入力するために前もって自分でノートで整理して計算する必要があるとか, 出力をエクセルで整形し直さないと人に見せることができないとか, システム化したために今まで手軽に手でやっていたことがすごく煩雑になってしまうとか... (あるある)

そのためには, システム化対象以外も含めた, 全関係者によるシナリオ書き, シミュレーション, ロール・プレイングなどが必要になるだろう. 超手軽なアプリケーション構築ツール (例えばRuby on Railsのような) も力になるかもしれない.

5. 大きなシステムの内部プラン

それぞれのユーザ機能やコンポーネントなど各部分もそれぞれ全体性を持つべし, という再帰性ルール. アレグザンダーは建物が持つべき全体性のルール (例えば「オフィスの玄関は会談から直接見えるようにすること」など) を多く挙げているが, そのままでは我々の役には立たない.

我々のコンポーネントが持つべき全体性のルールにはどんなものがあるだろう? 例えば

  • 情報に対する操作は基本的に対称的であること (操作Aができるのならば, Aと相補的な操作も可能. 例えばsetter/getter, constructor/destructorなど)
  • ある情報がなぜそこに存在してるかが説明できること (誰がいつ作成したか, など)
  • ある情報に対して可能な操作は基本的に均一に見えること (ある操作はメニューにあり, ある操作はパネルを出さないと見えないなどではなく)

など, いろいろなルールを考えることができるはず. emacsや初期Unix, Lispなどさまざまな例題はありそうだが, まだこの「ソフトウェアの美しさ」をまとめた論考はあまりないように思える. 重要な仕事かもしれない.

6. 構築

これはもっと詳細なレベル (我々で言えばコードのレベルだろうか) での全体のルールであり, 5と同じようなものだ.

7. 中心の形成

アレグザンダーはここで, (建築にとっての)「中心とは何か」を具体的に定義している. 我々にとっての中心とは何だろうか. ひとつは5で挙げたような全体性のルールも中心を形成する. もう一つは2で挙げたようなある種のアスペクト (今はアスペクトというと, ログ取りのような些末なものとしか考えられていないが) も中心を形成するだろう. アレグザンダーはその詳細をパターン・ランゲージに続くシリーズ Nature of Order (「秩序の本質」) に譲っているが, 我々もここでこれ以上議論する余裕はなさそうだ.

さて, アレグザンダーの「成長する全体」を具体化するためのルールを我々の立場から見てきた. キーワードは「なめらかなアーキテクチャ」じゃないかと思う. 小さいものを少しずつ, なおかつ常に全体性を希求しながら作り込んでいく (ニュートン的ですか?). このような考え方は部分的にエクストリーム・プログラミングなどのアジャイル・プロセスにも取り込まれている. しかしやはりいちばん難しいのは, 「全体性」とは何か, どうすればそれを得られるのか, という点に尽きるだろう.

2006.06.01
山田正樹 (メタボリックス)

Comments