結城浩
2001年12月3日
質問
はじめまして。 結城さんの書いた「絵本を読むときのパターン・ランゲージ」や 「技術系メーリングリストで質問するときのパターン・ランゲージ」を読んで、 面白いと思い、メールしています。 パターン・ランゲージってどういうものなのでしょうか?
回答
結城の書いたものを読んでくださり、 またフィードバックを送ってくださり、ありがとうございます。 とてもうれしいです。
パターン・ランゲージとは何か? という質問については、とりあえず、以下をご覧になってみてください。
パターン・ランゲージ(パターン言語と呼んでも同じです)の話をする前に、 パターンの話をした方がいいでしょうね。 パターンというのはおおよそ次のようなものです。
「ある文脈で繰り返し起きる問題を解決する方法。 その方法にはいくつかの制約が課せられているかもしれない。 またその方法には分かりやすい名前がついている。 他のパターンとの関連も示される」
…と書いてはみたものの、あまりピンとこないですよね、きっと。 抽象的すぎるからですね。 私の書いた「絵本を読むときのパターン・ランゲージ」の中から1つパターンを抜き出してみましょう。 以下は、「いっしょに過ごすひととき」というパターンです。
「子供に絵本を読もうとしている」のがこのパターンの文脈です。 「子供の機嫌が悪かったり、親の機嫌が悪かったりして絵本がうまく読めない」というのが問題ですね。 うん、確かにそういうことは繰り返し起こる起こる。 制約はフォースとも呼ばれます。 ここでは問題を解決するための条件のようなものです。 「むりやり読むことはできない」「子供を怒らせたり泣かせたりしない」といったことです (私のパターンの書き方ではこのあたり少しあいまいです。ごめんなさい)。 この制約のために、先ほどの問題の解法として「子供が泣こうがわめこうが絵本を読む」というのはダメ、ということになります。 肝心の解決する方法は、 「絵本にこだわらずに、歌を歌ったり、親が自分の小さいころのお話をしたりしましょうね」というものです。 このパターンの名前は「いっしょに過ごすひととき」です。 解法のエッセンスを短い言葉で表現し、覚えやすく、人に伝えやすくしたものですね。 パターンの関連として、パターンのはじめと終わりにいくつかのリンクが示されています。
「なーんだ、パターンっていったって当たり前のことを書いているだけじゃん」と思われますか? そのとおりです。パターンは目新しい考えをむりやり作り出したものではありません。 みんながある程度意識していること、熟練した人が繰り返し問題を解決してきた方法、それがパターンです。 そしてそれらに一定のフォーマットを与え、まとめて記述したもの、それがパターン記述となります。
パターン記述のやりかた、すなわちフォーマット、またはテンプレートにはいろんな種類がありますし、 パターンを書く人が自分のパターンを書きやすいように(そして読者に読みやすいように)作成・修正したりします。 前述した結城のパターンの書き方はAlexanderという人が作ったフォーマットにほぼ従っています。
さて、ここまででパターンの話はおしまい。 今度はパターン・ランゲージの話をしましょう。 パターン・ランゲージは簡単に言えば、パターンを集めたものです。 でも単にパターンを集めればいいってもんではありません。 それらのパターンは相互に関連しあい、また補完しあいます。 ばらばらのパターンを集めたものではなく、緊密な関係をもったパターンたちを集め、 そしてその関係を十分に意識して記述したもの。それがパターン・ランゲージになります。
パターンが解法をあらわしたものだとすれば、 パターン・ランゲージは、解法の集合によって、文脈全体を描き出したものともいえます。 例えば、「絵本を読むときのパターン・ランゲージ」では、「子供に絵本を読んであげる」という文脈(コンテキストと呼ばれることもあります)を 描き出しています。 また、「技術系メーリングリストで質問するときのパターン・ランゲージ」では、タイトルの示す通り、 「技術系メーリングリストで質問する」という文脈を描き出しています。
このように考えてくると、 いろんなハウツーもの、心がけ、コツ、Tips集といったものは、 うまく表現すれば、パターン・ランゲージになりうる可能性を秘めていることがわかるでしょう。
パターンという考え方を、ソフトウェアの開発(特に設計部分)に適用したものが、 よく耳にするデザインパターンです。 分析に適用したものがアナリシスパターンらしいです (らしいです、というのは結城はアナリシスパターンのことをよく知らないからです)。
あなたは、 きっとパターンやパターン・ランゲージに興味があることと思います。 ぜひ、以下のリンク先のページをごらんになって、 あなたもパターンやパターン・ランゲージを書いてみませんか。
また、結城が管理しているデザインパターン・メーリングリストに参加してみてください。 主にソフトウェアよりの話題が多いですけれど、 パターンに関する意見や質問、パターンの紹介などを歓迎しています。
なお、結城はパターンというものを面白いと思って、 自分で勉強したり書いたりしていますけれど、 私に何か権威があるわけではありませんし、 パターンの専門家というわけではありません。 上に書いたこともずいぶんおおざっぱな話にすぎません。 念のため。
でも、パターンを書いたり、パターン・ランゲージを書いたりすることというのが、 わくわくするほど楽しいことである、というのは保証します。 ぜひいろいろやってみましょう!
Enjoy patterns!