第6回は「名前のない品質とパターン言語」と題して、建築家アレグザンダー(Christopher Alexander)の「名前のない品質」“QWAN―Quality Without a Name”を紹介しました。この名前のない品質を建築の世界でどのように実践すればよいか、アレグザンダーはそのための1つの技法として「パターン言語」を提唱しました。このパターン言語のアイデアに注目し、ソフトウェアの世界に持ち込まれたのが、1つはデザインパターンをはじめとする「ソフトウェアパターン」の潮流です。もう1つの流れはケント・ベックが提唱したXP(eXtream Programming)をはじめとする「アジャイル開発」の潮流です。
パターンやパターン言語とオブジェクト指向とはまったく異なる概念ですが、ソフトウェアパターンはなぜかオブジェクト指向開発の世界に入ってきました。今回は「パターンとパターン言語入門」と題して、ソフトウェア開発の2大潮流の基となったパターンとは何か、パターン言語とは何かについて解説したいと思います。
繰り返し現れるパターン
「複雑系 科学革命の震源地・サンタフェ研究所の天才たち」(M・ミッチェル・ワールドロップ著、新潮社)という数年前話題になった書籍があります。ノーベル賞級の最先端の頭脳が1カ所に集まって共同研究をするというサンタフェ研究所のユニークな記録です。
この本には経済学者ブライアン・アーサー(*1)がアルプスのチロル地方に行ったときの体験が記されています。彼によると、街は至る所チロル地方特有の家々が立ち並んでいるということです。つまり、チロルには“チロルのパターン”というものがあるのですが、オーストリアとイタリアの国境を一歩でも越えると、チロルの面影は消滅します。異なる街並みのパターンが出現するわけですね。「何年もかかって、2つの文化はどちらも、互いに異なる、しかし一貫したパターンにたどりついたのだ」とアーサーは本書で述べています。
2つの地方はどちらも雪に強い建築構造、街並みを目指してきましたが、同じ問題に対してそれぞれ異なる解決策に到達したというわけです。
身近にあるパターン
パターンという言葉は日常生活でもよく使います。ある状況で、ある結果が出た場合、過去に何度も同様の状況で同様の結果となっていたならば、それは「いつものパターン」と呼びます。パターンという言葉の意味は、広辞苑(第5版)によると、“型。類型。様式。「ワン・パターン」。図案。図像。「テスト・パターン」”とあり、プログレッシブ英和中辞典(第3版)から主要な意味を抜粋すると「pattern」は“[1]型、様式。[2](同じ図形が繰り返し現れる)模様。[3]模範、見本、雛形”というように説明しています。
例えば囲碁や将棋の定石はパターンといえます。定石とは、ある局面における対戦者双方にとっての最善の手筋であり、模範的な決まった型であって、patternの[3]の意味になります。定石は過去の事例を研究し尽くして抽出したものなので、これを利用すれば対局のたびに最初からいちいち攻め(守り)の手順を考え出す必要がなくなります。双方の指し手が対局のときに考えなければならないのは、その局面に適用できそうな定石から1つを選択することです。定石をどの程度使いこなせるかは、囲碁や将棋の技能の向上に大きな影響を与えます。
もう1つパターンの例を挙げてみましょう。洋服の型紙もパターンです。この例もpatternの意味の(3)です。型紙に合わせて生地を切って縫い合わせると洋服ができます。生地が違っても同じ型紙からは同じ形の洋服を仕立てることができます。
パターンとは
パターン言語で使用されるパターンという言葉は、次のようにもう少し特別な意味で使用します。すなわち、
「パターンとは、ある文脈で繰り返し起きる問題と、フォースと呼ばれる制約条件およびその下での問題の解決策の組」
です。1つの問題に対する解決策は必ずしも1つとは限りません。例えば先の囲碁や将棋の世界でも、定石には複数の選択肢があり得ます。この場合、戦略や周りの状況が、(解決策となる)定石の選択条件となります。これらの選択条件がフォースです。洋服の型紙も何通りかの選択肢があり得ます。この場合、男性用または女性用、フォーマルまたはカジュアルなどの条件がフォースで、その制約により解決策となる型紙が限定されます。
上述のパターンの定義はアレグザンダーが提唱したもので、ソフトウェアの世界でもほぼこの定義を継承しています。しかし、ピーター・コードが「戦略とパターンによるビジネスオブジェクトモデリング」(ピーター・コードほか著、ピアソンエデュケーション)の中で反論しているように、英語のpatternにはこのような意味はありません。ちなみにピーター・コードの定義は、
「パターンとは模倣する価値のある例」
です。たくさんあるパターンからなぜ特別にそのパターンを選び出して模倣しなくてはならないのでしょうか。いま考えている問題の解として、それが最適だからでしょうね。結局、アレグザンダーのパターンの定義がソフトウェアの世界で認知されたのもこういう理由からだと思います。ゆえに、本稿ではアレグザンダーのパターンの定義に従って解説を進めます。
パターン言語とは
繰り返しますが、パターンとは「ある文脈で繰り返し起きる問題に対して、フォースと呼ばれる制約条件の下での解決策」です。パターン言語(Pattern Language)はある文脈でのパターンの集まりです。パターンの集合をなぜパターン言語と呼ぶのかちょっと分かりづらいので、自然言語と比較してみましょう。
個々のパターンは、自然言語の最小構成要素である単語に対応するものです。パターンはその記述方法が決められています。個々のパターンは孤立して存在するのではなく、相互に関係します。その関係もパターンで表現します。この関係は自然言語では文法に対応するものです。ある文脈で使用されるこれら複数のパターンからなる構造を持った集合がパターン言語です。
この「言語」(language)という言葉ですが、ちなみにUMLも「統一モデリング言語」という言語です。UMLは1つしかありませんが、パターン言語はいくつでも作ることができます。自然言語には日本語、英語、フランス語、……といろいろあるように、パターン言語もいろいろ作ることができるわけです。アレグザンダーの書籍「パタン・ランゲージ―環境設計の手引」(クリストファー・アレグザンダー著、鹿島出版)のタイトルも“A Pattern Language”でパターン言語の冠詞は定冠詞“The”ではなく不定冠詞“A”が使われていますので、1つのパターン言語という意味です。これがUMLという言語との大きな違いです。
自然言語 | UML=統一モデリング言語 | パターン言語 |
---|---|---|
単語 | モデル要素(クラス、アクター、ユースケースなど) | ある文脈で使用されるパターン |
文法 | モデル要素組み合わせのルール(ダイアグラム表記法) | パターン間の関係(パターンで記述) |
文章 | ダイアグラム(クラス図、相互作用図、ユースケース図) | 構造を持つパターンの集合 |
表1 自然言語、UML、パターン言語 |
アレグザンダーのパターン言語
アレグザンダーのパターン言語には街や建物、建設に関する253のパターンがまとめられています。これは中埜博著「パタン・ランゲージによる住まいづくり」(井上書院)に分かりやすく紹介されています。そこからいくつか紹介します。番号はアレグザンダーのパターン言語の番号です。
- 95 複合建物(Building Complex)
- 1つの大きな建物より、小さななじみやすい建物の集まりの方が楽しい
- 96 階数(Number of Stories)
- 敷地いっぱいに建物を建てるより、屋外空間や庭のスペースを取る
- 97 見えない駐車場(Shielded Parking)
- 建物をふさいで駐車している車が見えるのは不愉快。車を自然の木や塀で覆う
- 98 段階的な動線領域(Circulation Realms)
- 建物の中で、自分がどこにいるのか分からなくなってしまうのはストレスがたまる。要所要所に目印が欲しい
- 99 母屋(Main Building)
- どんな住まいにも、その中心となる母屋がなければその心を失う
この例は個々のパターンを簡略化して表現しましたが、アレグザンダーのオリジナル書籍にはそれぞれ「問題+フォース+解決策」という形式で数ページにわたって詳細に記述されています。オリジナルにはすべてそのパターンを示唆する写真が最初のページに添付されていることも特徴です。
家を建てるとき、住む人にとっては間取りが基本ですが、それ以外に依頼主はさまざまな注文を付けます。例えば自然光が入るようにしてほしい(107 光の入る棟)、土地が狭いので屋上に庭を造ってほしい(118 屋上庭)、部屋の一部を独立性を持たせて人に貸せるようにしてほしい(153 貸せる部屋)、……など数え上げるといろいろ出てきます。繰り返し出されるこれらの要求に対してその解決策をパターンとしてすでに用意しているわけです。253パターンの中には街のレベルから個人の家のレベルまでさまざまなパターンが挙げられています。家を建てる建築家(アーキテクトビルダー)はこれらのパターンをあらかじめ用意しておけば依頼主の要求にすぐに応えることができるわけです。ちなみに中埜博さんはこのような技法を実践されている日本では数少ない建築家です。一味違う注文住宅ができそうですね。
ソフトウェアパターンとは
ソフトウェア開発の世界でも注文住宅と同じで、依頼主からさまざまな要求が挙げられます。繰り返し挙げられる要求に対してはあらかじめ対応策を用意することが可能です。そのアイデアがソフトウェアパターンです。
ソフトウェア開発の世界で、パターンはさまざまな局面で現れます。要求レベル、分析レベル、設計レベル、コーディングレベルあるいは基本的骨組みであるアーキテクチャ設計レベルなどにソフトウェアパターンが適用できます。要求レベルのパターンも当然あってしかるべきですが、まだ未整備でこれからの課題であると考えています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
RUPやXPのプラクティスもパターン言語
ソフトウェアそのものではなく、ソフトウェア開発プロセスにもパターン言語の考え方が適用できます。アンチパターンは開発プロセスに焦点をあて、失敗に陥るパターンに注目して類型化し、その対応策を示すものです。しかし、開発プロセスの問題はそんなに簡単に解決できるものではありません。これは単独のパターンではなく複数のパターンから構成されるパターン言語の適用分野です。
RUPやXPといった開発プロセスはベストプラクティスがベースになっています。RUPは6つ、XPは12〜14程度のプラクティスがプロセスの基本原則になっています。これらのプラクティス1つ1つはある問題に対する解決策でパターンと考えることができます。これらのパターンの相乗効果を生み出すのがパターン言語です。実際RUPもXPもすべてのプラクティスの実践による相乗効果を目指しています。
アレグザンダーは名前のない品質(QWAN)を建築で実践するための技法として「パターン言語」を提唱しました。第6回「名前のない品質とパターン言語」ではこのQWANについて、今回はパターンとパターン言語の概要についてお話ししました。ソフトウェア開発の2大潮流となったデザインパターンなどの「ソフトウェアパターン」とケント・ベックのXPをはじめとする「アジャイル開発」のルーツは、実はこのアレグザンダーのパターン言語だったのです。
次回は話題を変えて「分析と設計」について考えてみたいと思います。オブジェクト指向分析・設計では分析と設計は隣り合わせですが、「分析(analysis)」と「設計(design)」はまったく別の概念でこの間には無限のギャップを感じています……。
なお、筆者主催のオブジェクト指向教育オープンコースを開催しています。詳細は有限会社オブジェクトデザイン研究所のホームページをご参照ください。皆さまとお会いできることを楽しみにしています。
プロフィール
河合昭男(かわいあきお)
大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。
オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立、理論と実践を目指し現在に至る。ビジネスモデリング、パターン言語の学習と普及を行うコミュニティ活動に参画。ホームページ「オブジェクト指向と哲学」 。
『JavaデベロッパーのためのUML入門』(監修)。著書は『まるごと図解 最新オブジェクト指向がわかる』『まるごと図解 最新UMLがわかる』(共に技術評論社)、『明解UML−オブジェクト指向&モデリング入門』(秀和システム)。
- 情報を媒体に転写する? 形相と質料
- SFC学習パターンを新人研修に適用する- 暗黙知と形式知
- フラクタル - 自己相似形とべき乗則
- パターン言語事例 − 慶應SFCの『学習パターン』
- クラウドの潮流を考える――らせん的進化・その2
- 世界はらせん的に進化する
- オブジェクト指向を考える──普遍の知識
- UML2メタモデルを読む − 知識とは何か?(2)
- UML2メタモデルを読む− 知識とは何か?
- ソフトウェアは知識の結晶
- オブジェクト指向のソクラテス式対話編
- RUP7で開発の「苦」から解放される
- RUPをパターン言語として考える
- ネットコミュニティのQWAN(無名の質)
- パレートの法則 vs. ロングテール現象
- モノ・コト分析をパターン言語で表現
- モノ・コト分析の段階的モデリング
- モノとコトによるモデリング
- 分かりやすいモノ・コト方式のモデリング
- アリストテレス編(その2)“what & why”4原因説をビジネスモデルに応用
- アリストテレス編−“what & why”4つの原因説
- プラトン編−イデア論とクラス/インスタンス
- 分析手法のキホン:「分解と分類」
- 分析から設計へのモデル変換などについて
- パターンとパターン言語入門
- 名前のない品質とパターン言語
- 全体最適とアーキテクチャ
- 「ピカソ、113億円で落札」をUMLで表現する
- UMLで新聞記事を読む
- 第2回 自然言語をUMLで表現してみる
- 流れ去るものと不変なもの
Copyright © ITmedia, Inc. All Rights Reserved.