ソフトウエアパターンとは何か
その他のソフトウエアパターン
現在、ソフトウエアに関するパターンは図3-1に示すように、分野別のもの、分析・設計・実装のフェーズごとのもの、マネジメント系のもの等々、さまざま登場しており、個別には活用されていると言えます。
しかしながら、ソフトウエアの世界でパターンとして親しまれているデザインパターンやアナリシスパターンは残念ながらパターン・ランゲージを構成していません。あくまで個別の問題状況に対して典型的な解法構造を提示するというカタログ的な位置づけが中心です。
一方で、Coplienらのプロセス/組織パターンはプロジェクトや組織の運営を目的としてランゲージ化され有機的なプラクティスの集合体として構成されています。またIBMがまとめたeビジネスパターン(第2回で紹介予定)も業種・ビジネス形態からアプリケーションスタイル、論理アーキテクチャ、物理アーキテクチャ、製品選択まで含めて体系化を狙って(まだまだ荒削りではありますが)アーキテクチャパターン・ランゲージを構成しています。
またアジャイルプロセスの代表であるXP(eXtreme Programming)は、利用しているアジャイラーの皆さんにはそのように理解されてはいませんが、実は価値観(コミュニケーション、シンプルさ、フィードバック、勇気、リスペクト)、基本ルール(ビジネス価値駆動、……など10個)、基本原理(フィードバックが基本、単純さの仮定、変化を抱擁)、プラクティス群(仕事をスケールさせるための実践、継続的なプロセスの実践、理解の共有の実践、プログラマーの幸福の実践)、個別プラクティス(ペアプログラミング、計画ゲーム、…など12個)が有機的にネットワークを形成しパターン・ランゲージを構成しているのです。
現在のソフトウエア開発方法論の2大発明であるパターンとXPとはいずれもアレグザンダーの思想に多くを負っているというのはまぎれもない事実です。
ソフトウエアの設計の方法を整理する際に、パターンとは別にソフトウエアエンジニアリングの原理にもとづいてシンプルな少数の原則を提示するというやり方があります。
有名なのは、James Martinの『オブジェクト指向設計原則(クラス編5個、パッケージ編5個)』です。これらはパターン・ランゲージにはなっていませんが、個別のノウハウのカタログというよりは、体系的な知恵(設計指針)を示していると言えるでしょう。実際、23個あるGoFのデザインパターンのほとんどは、「開閉原則(OpenClosed principle)」(抽象クラスを導入することで、クライアントに対しては共通インターフェースで閉じているように、なおかつ開発者はそのインターフェースの実装バリエーションを追加できること)を中心にいくつかの原則を組み合わせることで生成できることがわかります。したがって、設計原則が身についているアーキテクトはごく自然にデザインパターンを現場で適用できるはずだということになります。
ソフトウエアパターンの全体像
今回ご紹介したさまざまなパターンや原則を2次元平面にマッピングしてみましょう。
縦が目的性―汎用性の軸、横が個別的―有機的の軸ですから、特定ドメインのパターン・ランゲージは右上の第1象限、特定目的のアプリケーションフレームワークは左上の第2象限に配置されます。具体的な設計目的をもつデザインパターンやアーキテクチャパターンは第2象限、プロジェクト成功のノウハウをまとめたアンチパターンや業務ドメインにかかわらない、構造を重視した分析パターンであるストリームラインモデリングは左下の第3象限、具体的な知識・手段というよりは知恵や方針を体系化したプロセス組織パターンや学習パターンは右下の第4象限に位置づけられるように思います。
第1象限に位置づけられるのがパターン・ランゲージです。ビジネスモデリングのためのパターンとしてアナリシスパターンがありますが、これはまだカタログ的です。一方最近登場した「REAビジネスパターン」(第3回で紹介予定)はパターン間の関係性が明確なのでランゲージにはなりきっていませんが体系性は相当感じられます。そしてIBMの「eビジネスパターン」(第2回で紹介予定)になるとビジネスレベル・アプリケーションレベル・論理設計レベル・インフラ設計レベル・製品選択レベルとかなり明確にアーキテクチャのランゲージ化が志向されています。
オブジェクト指向設計原則は具体的課題解決と直接結びついているわけではないので知恵の一種と言えますが、ソフトウエア工学の体系性も併せ持つので、中少し下にしました。ここで興味深いのは、パターンランゲージを生んだアレグザンダーがここ10年ほど、パターンそのものや、自然・建築・人工物を含めた美的な形そのものを生み出すよりも根源的な原理としての「Nature of Order」(自然な「秩序」の本質)をまとめていることです。これはまさに右下の究極の第4象限に位置づけられるでしょう。
第1象限右上から第4象限右下への急転回が何を意味するのか、この転回がソフトウエア設計の方法論にも波及する可能性があるのか、などは非常に面白いテーマです。
【参考文献】
C. Alexander『パタン・ランゲージ―環境設計の手引』鹿島出版会、1984
羽生田栄一ほか『ソフトウエアパターン入門~基礎から応用へ~』SRC、2005
Kent Beck『XPエクストリーム・プログラミング入門―変化を受け入れる』ピアソンエデュケーション、2005
W. Brown, R. Malveau, H. McCormick, T. Mowbray『アンチパターン:ソフトウエア危篤患者の救出』,ソフトバンク,1999
「学習パターンの公開」(http://learningpatterns.sfc.keio.ac.jp/index.html)