パターンエンジンとは パターンエンジンは、組織活動の中でパターンを活用するためのプロセスの構築のフレーム(枠組み)です。このフレームには、次の構成要素が含まれます: - パターンエンジン:パターンと組織及び組織メンバとの間の相互作用を実現するための仮想の装置(図1)
※「パターンエンジン」という言葉は、文脈により全体のフレーム(枠組み)としてのパターンエンジンと、その本体であり装置であるパターンエンジンとのどちらかを意味します。 - パターンエンジンユースケース:パターンエンジンの基本的な機能と用法のセマンテクス
- パターンマネジメントユースケース:パターンエンジンを応用してパターンライフサイクルマネジメント(PLCM)を行うための用法のセマンテクス
- ソフトウェアエンジニアリングユースケース:パターンマネジメントユースケースをソフトウェア開発ドメイン向けに特化したユースケース
- パターン支援ユースケース:パターン活動プロセスの促進を目的とした側面支援体制とその用例のセマンテクス
図1はパターンエンジンとそれを通じて相互作用するエンティティ(組織、組織メンバ、パターン、パターンランゲージ)を表します。組織や組織メンバは、パターンに関して何か行うときは、パターンエンジンを通じてパターンを呼び出します。各エンティティとパターンエンジンとのやりとりは、図中でa〜kで示されます(*1)。例えば、組織が(ソフトウェア開発などの)活動(a)でパターンを必要とするとき、パターンエンジンは必要とするパターンの記述を投入し(g)、次に組織はそのパターンの記述を読み、利用することで、知識としてのパターンを獲得します(c)。同時に、その過程に関わった組織メンバのこのパターンを獲得します(d)。こうした組織の活動の中でパターンが使われると、そのパターン自身が改良されたり、あるいは新しいパターンを生成します(b)。この場合は、パターンエンジンは改良されたパターンあるいは新しく生成されたパターンをパターン形式で記述します(f)。とは言っても、パターンエンジンは仮想の装置ですから、実際にパターンを紙に書くのは、組織メンバです。こうしたことは、組織メンバによるパターンエンジンに対する貢献として扱います(e)。パターンエンジンはまた、組織の文化をパターンランゲージに反映しようとします(h)。そうすることで、パターンランゲージは組織の文化に組み込まれたパターンエンジンを裏打ちするのです(i)。パターンエンジンは、ときに組織の外部のパターンコミュニティとの間でパターンのやりとりをします(j、k)。こうすることで、組織の文化の中に異文化の血を取り入れて強化するのです。 パターンエンジンは、仮想の装置ですから、どこかの組織の建物の中に物理的にインストールされているというものではありません(*2)。パターン活動の組織レベルでの実現を考えるとき、この装置をモデルとして、その機能を組織活動の中で実装し、その働きを高めるようにパターン活動プロセスを実現するのです。パターンエンジンの機能は、図1のa〜kで示されるパターンエンジンの呼び出しに対応します。こうした機能はまた、パターンエンジンのユースケースとも考えられます(図2)。この十一のユースケースの内容を表1にまとめました。パターン活動プロセスの構築におけるパターンエンジンの実現は、これらのユースケースの内容を具体的に決め、実施することに他なりません。 パターンエンジンはまたフレームですので、その各ユースケース(機能)の具体的な実現形態は規定しません。従って、パターンエンジンは、様々な形態のパターン活動プロセスに当てはめることができます。ソフトウェアパターンの蓄積と再利用を重視する開発は、「パターン指向開発」と呼ばれます。パターンエンジンはパターン指向開発のプロセスそのものではありませんが、パターン指向開発プロセスを構築する際のフレームとして用いることができます。 パターンエンジンユースケース 表1:パターンエンジンユースケースのセマンテクス | 記号 | ユースケース名 Use Case Name | アクタ | オブジェクト | セマンテクス | | a | 活動する Perform | 組織 | - | 組織としての活動を行うこと。活動のプロセスの中で、知識が組織の中に浸透し、そして新しい知識が生成される。 | | b | パターンを生成する Generate Pattern | 組織 | (知識としての)パターン | 生成された知識がパターンとして認識されると、新たなパターンとして生成され、パターンエンジンに投入される | | c | パターンを獲得する Acquire Pattern | 組織 | (知識としての)パターン | パターンエンジンに投入されたパターンを組織活動の中で利用できる知識として取り込む。このとき、ばらばらのパターンとして取り込むのではなく、パターンランゲージの要素として取り込むようにする。 | | d | パターンを獲得する Acquire Pattern | 組織メンバ | (知識としての)パターン | パターンエンジンに投入されたパターンを個人の知識として取り込む。このとき、ばらばらのパターンとして取り込むのではなく、パターンランゲージの要素として取り込むようにする。 | | e | 貢献する Contribute | 組織メンバ | - | パターンを発見したり、パターン形式を書くことは組織メンバの作業として行われる。組織としてのパターンエンジンの利用を組織メンバの貢献によって支える。 | | f | 書く/改良する Write/Improve | 組織 | (明文化された)パターン | パターンエンジンが、投入されたパターンをパターン形式に変換することで、誰からもパターンが読め、そして改良した結果を書き出せるようにする。 | | g | 投入する Inject | 組織 | (明文化された)パターン | パターンがパターン形式として必要に応じてパターンエンジンに再投入され、組織や組織メンバに提供される。 | | h | 書く/改良する Write/Improve | 組織 | (明文化された)パターンランゲージ | パターンが組織内で普及し、共有されるにつれて、一連のパターンの適用のルールが生まれてくる。パターンエンジンは、これをパターンランゲージの形式に変換する。 | | i | 裏打ちする Back | パターンランゲージ | 組織の文化 | パターンランゲージは組織の文化を反映しており、その活動において直面する課題とそれに対する解決法についての知識の包括的なセットを提供する。さらにパターンランゲージは、新たに発生するパターンを他と関係付け、知識のセットの中に結合させるための背景を与える。パターランゲージの存在はパターンエンジンの働きを高める。 | | j | パターンをエキスポートする Export Pattern | 組織 | (明文化された)パターン | 組織の持つパターンを外部のパターンコミュニティに提供(提出)する。 | | k | パターンをインポートする Import Pattern | 組織/組織メンバ | (明文化された)パターン | 外部のパターンコミュニティによって提供されているパターンを、組織内に取り込む。これは組織的に行う場合もあるし、また、組織メンバが個人的に行ってもよい。 | パターンマネジメントユースケース パターンエンジンは装置なので、これを用いたパターン活動プロセスを構築する際には、いつ、どのような目的でそれを呼び出すのか、といった観点でプロセスを分けるとよいでしょう。ここでは、パターンをどのように生成し、育てるべきかという観点で、パターンエンジンの応用例を示します。これを、パターンマネジメントユースケースと呼ぶことにします(図3)。各ユースケースのセマンテクスは表2に示します。パターン活動プロセスの構築の際に、パターンエンジンユースケースと併せて、パターンマネジメントユースケースを実現すべきでしょう。但し、全てのパターンマネジメントユースケースを明示的に実現しなければならないわけではなく、パターン活動を行いながら、その組織の文化にあったユースケースを見極め、徐々に実現していくことができます。 表2:パターンマネジメントユースケースのセマンテクス ユースケース名 Use Case Name | アクタ | セマンテクス 【パターンエンジン】 パターンエンジンとの関係 | 即席パターン Instant Pattern | 組織 | プロジェクトの期間内、顔の知れた仲間内ではパターンはそれに名前を与えるだけで共有できる。軽く、すばやくパターンを捉え、成長の軌道に乗せる。 ※但し、プロジェクト終了までには、パターン記述を埋めること。 【パターンエンジン】 活動(a)において生成されるパターン(b)を、組織メンバの最小限の労力による貢献(e)でパターンを書き留める(f)。 | 外部パターンを導入する Install External Pattern | 組織 | 世の中に知られたパターンや他の組織から持ってきたパターンは抽象的だったり、違った文化を前提にしていたりする。そこで、そうしたパターンを自分の組織やプロジェクトのスコープに合わせて読み替えたり、あつらえ直したりして導入する。 【パターンエンジン】 これは、パターンのインポート(k)を含む。 | パターンを公開する Publish Pattern | 組織 | 「即席パターン」や「外部パターンを導入する」によって組織内で共有されるパターンの中には、プロジェクト、組織あるいはドメインを越えて適用可能な普遍性を備えたものがあるかもしれない。組織は、そうしたパターンを洗練し、一般向けのパターンとして昇華させて公開することで、その活動をより広い文脈の中で捉え、改善しながら競争力を高める機会が得られる。 【パターンエンジン】 これは、パターンのエキスポート(j)を含む。 | パターンを死なせない Keep Patterns Alive | 組織 | パターンは書かれっぱなしでは死んでしまう。適用すべき場面でパターンを再発見し、共有し、洗練していくことでパターンを生き生きと育てる。 【パターンエンジン】 パターンの投入(g)と獲得(c、d)を促進し、継続的なパターンの改良(f)と新たなパターンの生成(b)をもたらす。 | SECI Socialize, Externalize, Combine and Internalize | 組織 | パターンを知識の媒体として捉え、そのマネジメントをSECIモデル(図4、表3)にのっとった知識創造のプロセスを実現する。組織内に宿るパターンと、外部パターンコミュニティで公開されているパターンは、それぞれの場でのSECIプロセスを経て成長する(図5)。 | パターンランゲージを編成する Weave A Pattern Language | 組織 | ばらばらのパターンの威力は小さい。パターン同士が有機的に結びつき、パターンランゲージとなって、それらパターンが解決策を生成する能力は最大となる。 【パターンエンジン】 組織のプロセスと文化を反映したパターンランゲージを書く(h)。 | パターン適用を追跡する Trace Pattern Applications | 組織 | パターンがプロセスの成果物のどこでどのように適用されているかを追跡する。これによって、パターンの成長のための情報を系統的に収集する。一つのプロセスの中でパターンが成長を繰り返す場合には、それを適用した成果物を追跡して、成長したパターンの再適用の要否を判断し、必要であれば再適用する。 ※大規模な活動の中でのこのユースケースの実現には、文書管理やツールによるトレーサビリティ確保が必要となるだろう。 【パターンエンジン】 活動(a)の中で既存のパターン適用箇所を追跡し、パターンを改良し(f)、再投入する(g)。 | パターン文化を形成する Create A Pattern Culture | 組織 | パターンを運用するためには、組織そのものもパターンを受け入れ、育てる文化に適応しなければならない。パターンが組織文化に適応することと、組織がパターン文化に適応することを同時に支援する。 【パターンエンジン】 パターンエンジンを持つ組織とそのプロセスでは、組織の文化がパターンランゲージによって裏打ちされる(i)。組織がパターンエンジンを実現し、パターンエンジンを動かせば、パターン文化形成の原動力を与える。 | 表3:SECIモデルと各ユースケースの関係 SECIモデルの四つのプロセスが、パターンエンジン、パターンマネジメント、ソフトウェアエンジニアリ(後出)及びパターン支援(後出)各ユースケース内のどのユースケースによってサポートされるかを示します。 SECIプロセス名 SECI Process Name | パターンエンジンユースケースとの関連 | ソフトウェアエンジニアリングユースケースとの関連 | | パターンマネジメントユースケースとの関連 | パターン支援ユースケースとの関連 | 共同化 Socialization | パターンを獲得する(c) 活動する(a) | 要求を共有する 実践派アーキテクト パターンを耕す 一直して十直す | パターンを死なせない パターン適用を追跡する | - | 表出化 Externalization | 書く/改良する(f、h) | パターンを耕す 成果をさらす | | 即席パターン | パターン発掘ワークショップ シェパーディング ライターズワークショップ | 連結化 Combination | パターンを生成する(b) | パターンを耕す | | パターンランゲージを編成する | パターン発掘ワークショップ | 内面化 Internalization | パターンを獲得する(d) | パターンを耕す | | - | パターン勉強会 | 図5:組織内と外部パターンコミュニティにおけるSECIモデル 組織内と外部パターンコミュニティとそれぞれ独立したSECIプロセスを持ちます。外部コミュニティでは、パターンはより汎用的・抽象的なコンテキストで取り扱われます。これを組織内に取り込むことで、パターンをより組織内に特化したコンテキストに適応・特化させ、外部から独立したSECIプロセスに乗せます。 ソフトウェアエンジニアリングユースケース パターンエンジンとパターンマネジメントユースケースについて、さらにソフトウェアエンジニアリングのプロセスに特化した応用を考えます。ここでの主眼は、パターンエンジンの持つソフトウェアエンジニアリングにおける具体的な効果を引き出すことです。こうした応用は、ソフトウェアエンジニアリングユースケースとして示されます(図6)。各ユースケースの説明は表4に示します。これらのユースケースは、特に先に述べたパターン指向開発プロセスの構築に当たって実現されるべきでしょう。しかし、これらは、前もって規定し、トップダウンでソフトウェア開発プロジェクトに強制するべきものではなく、むしろソフトウェア開発組織の文化としてゆっくり実現していくことが望ましいです。 表4:ソフトウェアエンジニアリングユースケースのセマンテクス ユースケース名 Use Case Name | アクタ | セマンテクス 【パターンマネジメントユースケース】 パターンマネジメントユースケースとの関係 | 要求を共有する Share Requirements | 開発者 | 要求する側(要求者)と解決策を提供する側(開発者)との間で要求が共有されていないと、開発プロジェクトは失敗するし、正しい知識創造も行えない。 要求を共有するとは、要求者の言っていることを書き留めることではない。要求者は本当の要求を淡々と余すことなく正確に述べることはできないからだ。要求の共有は、解決策の共有によって完成する。開発者は手持ちのパターンを用いて、どのような解決策を取るかを提示し、要求者との間で合意できる。 一度合意すれば、開発者はその解決策について躊躇なく実装できるし、要求者は次のレビューまで安心して任せられるだろう。 【パターンマネジメントユースケース】 [パターン文化を形成する]要求が共有できるのは、組織がパターン文化を持っていることの直接の結果だ。 | 実践派アーキテクト Hands-On Architect | アーキテクト | アーキテクトは、設計問題にどのように対処するのかを、具体的なパターンまたはパターンを含む手本を提示しながら指示する。これは問題だけを与えて「やっておいて」と指示するよりも解決が早く、間違いが少ない。これは、解決を要求する側が解決策の方針を示すという意味で、[要求を共有する]の変形とも言える。 【パターンマネジメントユースケース】 [パターンを死なせない]まず、過去の事例の中に解決策を求めよう。 [即席パターン]手本にパターン名を与えて示すことで、効率的にパターンを生成できる。 [外部パターンを導入する]外部から汎用的なパターンを導入して解決策として示すこともできる。 | パターンを耕す Cultivate Patterns | 開発者 | 開発プロジェクトの初期では、どんな問題に遭遇し、どんなパターンが使えるのかが見えないかもしれない。そのような場合、開発対象となる仕様の一部についてパイロット開発を行い、パターンを発見、発掘、生成して初期のパターンのセットを決めると、その後の本開発が効率化し、知識創造も促進される。 初期のパターンのセットを決めた後は、全ての開発者にそれへのアクセスを与え、各自でパターンを読み、獲得する機会を与える。開発者は、本格的な開発作業に先立って、意識的にパターンのセットの理解と獲得を行うとよい。このことをパターンの入植(population)と呼ぶ。 【パターンマネジメントユースケース】 [パターンを死なせない]問題に当たったらまず、過去の事例の中に解決策を求めよう。 [即席パターン]パターン形式にこだわらず、パイロット開発の中で生成された潜在的なパターンに名前を与えて、効率的にパターンを生成する。 [外部パターンを導入する]外部から汎用的なパターンを導入して解決策として示すこともできる。 [パターンランゲージを編成する]初期のセットに含まれるパターン間の関連性がよく見えている場合、セットからパターンランゲージを編成できる。 | 成果をさらす Expose Work | 開発者 | 開発の成果(それが中間成果でも最終成果でも)は、特定の開発者が抱え込んでいると他から見えない状態では、潜在的なパターンの発見と共有が滞り、結果的に、個々の開発者は同じ問題を違う方法で解決し、ソフトウェアの全体としての一貫性が損なわれる。同じような発明を二度しないで済むように、開発者は自分の成果を常に仲間の目にさらし、解決策(パターン)を開発者間で共有できるようにする。 【パターンマネジメントユースケース】 [即席パターン]さらされた成果の中にパターンを発見したら、それを事例としてパターン名を与える。 | 一直して十直す Fix One, Get The Rest Fixed | 開発者 | どこか一カ所の間違いに修正を加えたならば、他にも同じ間違いがあることを疑うべきだ。パターンの適用結果を修正したのであれば、同じパターンを適用した全ての箇所を追跡し、同様の修正を加える。なぜなら、同じパターンの複数の適用箇所は、そのパターンのコンテキスト、問題、解決策を共有しているので、同じ間違いを犯す状況もまた共有しているからだ。同様の修正が頻発するのであれば、そのパターンを改良するか、新しいパターンを派生させる。逆に、頻発する修正をこのような形でパターンにフィードバックせずに放置すると、パターンは劣化してしまう。 【パターンマネジメントユースケース】 [パターン適用を追跡する]一直して十直すは、パターン適用の追跡が可能になって初めて実現できる。 | パターン支援ユースケース ここでは、パターンエンジンの機能そのものではなく、それを側面から支援するパターン支援の体制について取り上げます。パターン支援の体制は、個々のプロジェクトのプロセスとは独立した組織レベルの取り組みで、プロジェクトとその中で実現されているパターンエンジンの枠組みの中だけでは得られないパターン活動に関する支援を提供します。パターンマネジメントユースケースやソフトウェアエンジニアリングユースケースがパターンエンジンに燃料を供給するとすれば、パターン支援はパターンエンジンにオイルを供給するのだと言えます。ここでも、具体的なパターン支援の方法や手続きではなく、そのユースケースを示します(図7)。これらのユースケースの説明は表5に示します。 表5:パターン支援ユースケースのセマンテクス ユースケース名 Use Case Name | アクタ | セマンテクス | パターン勉強会 Patterns Learning Circle | 組織 | パターンは、そのパターン形式の記述を読めばたちどころに自分の中に宿るという程簡単ではない。パターンを理解し、宿すためには、組織メンバが活動の中で自力でその適用を試みるか、パターン支援に助力を仰ぐかすることになる。パターン支援は、パターン勉強会を開催することによって組織メンバによるパターンの獲得を支援する。パターン勉強会は、個々のプロジェクトで利用される、あるいはプロジェクトをまたがって利用されるである一連のパターンを対象として、組織的な取り組みの中で開かれる。 | パターン発掘ワークショップ Patterns Mining Workshop | 組織 | 過去の成果には、発見されていないパターンが眠っているかもしれない。また、パターンエンジンを用いてパターンを生成しているプロジェクトでも、見過ごしているパターンが眠っているかもしれない。これらの「埋蔵された」パターンを発掘するのがパターン発掘ワークショップだ。パターン発掘ワークショップは、個々のプロジェクトの作業の一部として実施するよりは、終了したあるいは終了に近いプロジェクトの成果に対して別の作業枠で実施する方がよいだろう。David DeLanoは、パターン発掘ワークショップは、発掘の対象となる成果に精通しているエキスパートが集まれば集まるほど、良いパターンが発掘される期待が高まると報告している(*3)。但し、彼らエキスパートは、自分の作ったものについて語るのは大抵の場合大好きだが、だからといってパターン形式を書くのが好きなわけではない。従って、そんな彼らからパターンを引き出すには、彼らには語り部に徹してもらうのがよい。DeLanoが行ったパターン発掘ワークショップは、進行役、発掘者、そしてエキスパートで構成した。発掘者は、エキスパートが語る問題解決の方法の中からパターンを発見し、パターン形式にまとめるのだ。 パターン発掘ワークショップは、さらに拡大して、パターンのセットの中でのパターン間の関連を探索し、そこからパターンランゲージを編成することを目的としてもよい。 | シェパーディング Shepherding | 組織メンバ | パターンを書く人は、過程でシェパードと呼ばれる指導者に指導を仰げる。通常、シェパーディングはパターンを書く人とシェパードが一対一の関係で行われる。 | ライターズワークショップ Writers Workshop | 組織メンバ | ライターズワークショップは、パターンを書いた個人が、そのパターンの記述を改善するためのアドバイスを得る場だ。このワークショップは、パターン専門の会議PLoPで実践されてきた。組織メンバは個人として、特定のパターン記述の改善のため、あるいはパターン記述のスキルを磨くためにライターズワークショップに参加できる。 | |