ビジネスロジック部品 (本体)

第6章 生物の進化と部品化再利用

 世の中では、複雑系が話題になっている。特に物理学の世界では、これまでは還元主義が主流であった。 つまり、物質をその構成要素に分解していけば、すべてが分かると考えられていた。 しかし、そうではないことに多くの人々が気づいてきた。 そして、一つ一つは単純なものであっても、それが数多く集まり組織体になると、その構成要素からは想像のできないような働きをするという事実が注目されるようになった。 複雑系とは、このような現象が起きる系 (システム) を意味する。

 複雑系の研究の中には、生命の謎に挑む人工生命の分野がある。 その中では、生命体のもつ DNA 情報 (遺伝子情報) をコンピュータのメモリの上の情報になぞらえて、進化のしくみなどが研究されている。

 この章では“プログラム ←→ 機能仕様”の関係は、“DNA 情報 ←→ 生物個体”の関係に相当すると考えて、進化のしくみなどを参考にして、部品化再利用について思い巡らせてみる。

 この章は、全部がトピックであり、本書の主張を補足する読み物なので、気楽な気持ちで読んでいただきたい。


6-a ダーウィンの進化論とは

 ダーウィン (Darwin,C.) の時代には、まだ DNA は発見されていなかったが、ここでは DNA などに関する最近の知識を使ってダーウィンの進化論をおさらいすることから始めよう。

 一般に生物個体は、いわば設計図に相当する DNA 情報に従って形づくられるようになっている。 ここでは説明を鮮明にする都合上、いささか正確さを欠くが、生物発生装置なるものが存在すると仮定する。 この装置を使って発生について説明すると、生物発生装置にサルの DNA 情報をインプットすればサルが発生してくるし、人間の DNA 情報をインプットすれば人間が発生してくることになる。 このように、DNA 情報が異なれば、異なる形質の生物が発生してくる。 つまり、DNA 情報という設計図に従って対応する生物が発生して現れてくるのである。 このことから、生物個体のことを DNA 情報の表現型であるという言い方がなされている。 ここで、プログラムの表現型とは、その機能仕様のこととすると、プログラムと機能仕様の関係は DNA 情報と生物個体の関係になぞらえることができる。

 ダーウィンの進化論では突然変異という現象が重要な役割を果たす。 この突然変異とは、親の DNA 情報が子に伝えられるときに、まれに起きるコピーミスのことである。 コピーミスが起きれば、DNA 情報が異なるものになるから、その表現型である生物個体の形質も親とは異なるものになる。

 ところで、大抵の生物は有性生殖をするようになっていて、父母のそれぞれから半分ずつ DNA 情報を受け継いでいる。 したがって、子が受け継いだ DNA 情報は父母のどちらの DNA 情報とも完全には一致しないことになり、子の形質もどちらの親とも完全には一致しないことになる。 ただし、子の DNA 情報の半分は父のもつ DNA 情報のコピーであるし、残りの半分は母のもつ DNA 情報のコピーなので、子の形質は父にも母にも似たものになる。

 有性生殖という機構は、進化をスピードアップするという重要な役割を果たしているようである。 しかし、話が複雑になるので、しばらくの間、有性生殖のことは忘れていただきたい。 ダーウィンの進化論は、単純な無性生殖を取りあげる方がそのエッセンスを際立たせることができる。 なぜなら、無性生殖では、親の DNA 情報を 100 %コピーしたものが子に伝えられるので、特別のことがない限り、子が受け継いだ DNA 情報は親の DNA 情報と完全に一致する。 つまり、クローンなのだ。したがって、DNA 情報の変更には、突然変異が中心的な役割を果たすことになり、ダーウィンの進化論の本質にせまることができる。

 ここで、突然変異というコピーミスが起きて、DNA 情報が一部変更されたと考えていただきたい。 容易に想像できるように、DNA 情報が意味をなさなくなる場合がある。 すなわち、生物発生装置にその DNA 情報をインプットすると、エラーになってしまい、生物個体の発生がうまくいかない場合である。 大多数はこうなるだろうが、コピーミスが起きても、稀には首尾よくエラーにならない場合もあることだろう。

 エラーにならない場合には、その DNA 情報をインプットすると生物発生装置から生物個体が発生してくる。 この生物個体は、他の生物に比べて、その生物が生きる環境により適応していることもあれば、そうではないこともある。 多分後者のケースの方が圧倒的に多いことだろう。 しかしまれには、前者のケースもあることだろう。 そういうケースでは、その生物個体の子孫が、すなわちコピーミスによって DNA 情報が変更された生物個体の子孫が繁栄していくはずである。

 このような仕組みでありとあらゆる生物ができてきたというのが、ダーウィンの進化論である。 つまり、DNA 情報にコピーミスが起きて、その表現型がたまたま環境にうまく適応した生物個体になったとすると、その子孫が繁栄することになるというのである。

 ダーウィンの進化論に対する批判として、ごく当然のことを言っているか、またはトートロジー (同義反復) であるから何も言っていないという主張がある。 環境への適応度が高い生物の子孫が繁栄していくのは当然のことであるし、逆に繁栄している生物がもつ形質は、一般に環境への適応度が高いということができる。 したがって、理論と言えるようなものではないという批判である。 しかし、ダーウィンの進化論のエッセンスは、そこにあるのではない。 突然変異という偶然のコピーミスの積み重ねによって、ありとあらゆる生物が生じてくるという仕組みを解き明かした点にある。


6-b コピーミスで進化するか

 ダーウィンの進化論は、生物以外の自己複製システムにも適用できる一般的な原理だと言える。 何らかの自己複製システムがあって、それに突然変異が起きるのであれば、以前とは異なるもの (変異種) が出現することだろう。 そして、新たに出現した変異種と以前から存在していた種に対して環境への適応というような何らかのフィルタがかかれば、フィルタを通過できるような一つまたは複数の種の子孫だけが生き残るということができる。

 このように理詰めで考えると、こうして進化していく可能性もあるだろうということは理解できるのであるが、実際にはダーウィンの進化論を納得したという気持ちにはなかなかなれないものである。

 一般の機械やソフトウェアの場合は、必ずその設計者がいる。 ところが、機械やソフトウェアよりも桁違いに複雑な人間のような生物には、特別な設計者がいない。 そういう複雑な人間がコピーミスの積み重ねによって出現するなどということは、簡単には信じられない。 突然変異は、何の見通しも方向づけももたない、いわば全くバカとしかいいようのない“設計者”であり、サイコロを振って 「では、ここを変えてみよう」 と設計変更をしているようなものである。 こんなデタラメでは、いくら長い時間をかけて積み重ねても、まともな成果は得られないにように思われる。

 これまでに、筆者は 30 年間ほどソフトウェアの開発に携わってきたが、プログラムのコピーミスをした結果、以前のものより良くなったという経験をしたことがないし、こうした話を聞いたこともない。

 このような疑問を疑問のままにしておくのは気持ちが悪いので、筆者は生物の進化に関する本を読み漁った。 そして、音楽鑑賞ならぬ生物学鑑賞を趣味にするようになった。 なお、生物学鑑賞を趣味にした理由は、もう一つあったかもしれない。 そのころ筆者はプログラムの開発とは大変な仕事だと考えていたので、進化論に従ってプログラムが自然にできあがるのであれば大変に楽でよいと思い、その仕組みをまねたいという助兵衛根性があったと言えるだろう。


6-c 自然選択は納得できる

 進化の実例をひも解いてみると、たとえば、19 世紀の半ばからイギリスのリバプールにおいて、ある種のガに関して白いものより黒いものの方が増えた工業暗化と呼ばれる現象が報告されている。 この現象は、大気汚染のために木の皮につく白っぽい地衣類が枯れて黒っぽい木の地膚があらわれるようになった結果、黒いガの色が保護色として働き生存に有利になったために現れた。これは自然選択の結果である。 また、1982 〜 1983 年のエルニーニョの影響でガラパゴスフィンチのくちばしの幅が平均 8.86 mm から 8.74 mm へと統計的に意味のある変化が起きたことが詳細に報告されている。 環境の変化により彼らの食物となる種子の大きさの分布が変わり、それに合わせて種子を食べやすいようにくちばしの大きさに自然選択の効果が現れたのである。

 これらの例は、進化の仕組みのうちの突然変異ではなく、自然選択を説明したものであり、しかも有性生殖を行う生物に関する自然選択の事例である。 前者の例は、もともとその種のガには羽を白くする遺伝子をもつものと黒くする遺伝子をもつものとがあったのであるが、黒くする遺伝子をもつ生物個体が増えたということであろう。 後者の例は、もともとガラパゴスフィンチという生物種には、くちばしの大きさを決める遺伝子の取り得る値が何種類かあったと思われるが、そのときの環境にふさわしい値の遺伝子をもつ生物個体が増えたということである。 ただそれだけのことであるが、こうした変化が進化であり、このようなわずかな差の積み重ねによって生物は大きく変わっていくといわれている。

 ダーウィンは、自然淘汰 (自然選択) を家畜の育種家が行う人為陶汰のアナロジーとして捉らえていたようである。 育種家が品種改良のために行う人為陶汰とは、人間にとって都合のよい遺伝子の組合せをもつような生物個体を見つけて、それを増やしていくことである。 そして、自然選択とは、人間にとって都合のよいかどうかではないが、生存に有利な遺伝子の組合せをもつ個体を見つけて、それを増やすことに他ならない。 したがって、上記の二つの進化の例は、正に自然選択がなされているということができる。 正確に言えば、遺伝子プールを共有する生物種の中で起きた遺伝子頻度の変化という小進化の例だと言える。

 自然選択や人為陶汰は、パラメタカスタマイズに似ている。 なぜなら、パラメタカスタマイズとは、お客様にとって都合の良いパラメタの組合せを見つけて設定することであり、都合の良いものを残すという点が同じだからである。

 もしも、パラメタカスタマイズを自然選択や人為陶汰に近い形で実施するとすれば、次のようになる。 A 社向けに設定済みのパラメタ一式と B 社向けに設定済みのパラメタ一式を混ぜ合わせてある組合せをつくる。 いわば、A 社向けの遺伝子と B 社向けの遺伝子を半分ずつもつような子供のパラメタをつくり、お客様に提供するのである。 お客様から OK が出ればそれでよしとするが、そうでなければ別の組合せをつくり、お客様に提供する。 それでもだめなら、C 社向け設定されているパラメタ一式を混ぜ合わせて別の組合せをつくり、お客様に提供する。 ... と、いわば莫大な数の子供のパラメタをつくり、お客様に評価してもらうのである。 もしも、お客様がこの評価作業に付き合うほど十分に辛抱強ければ、この方法で、お客様にとって最も都合のよいパラメタの組合せを決めることができる。

 パラメタを設定する際には、普通に行われている方法、すなわち一つ一つお客様にパラメタの値を聞いていく方がよさそうであるが、上記のような自然選択を模した方法でも設定できそうだということは、納得できる。 そして、これを納得したと同時によこしまな夢は、はかなくも破れてしまった。 なぜなら、そのように辛抱強く評価し続けてくれるお客様はいないだろうから、進化論の仕組みをまねることで、プログラムが自然に完成するようにはできないことに気がついたからである。

 ただし、お客様に辛抱させることは無理だとしても、ある適応度関数を決めておいてコンピュータに評価させることにすれば、自然選択や人為陶汰を模して最適値を求めることができるはずである。 これは遺伝的アルゴリズムと呼ばれており、実際に最適化問題などに応用されている。 たとえば、巡回セールスマン問題、すなわち一人のセールスマンが指定されたすべての都市をそれぞれ一回だけ訪問して出発地に戻ってくるまでの経路を最短にしようという問題は、しらみつぶし的な比較では組合せが多すぎてコンピュータにも手に負えない。 こういった問題には、遺伝的アルゴリズムが有効な場合がある。 また、鳥の翼の形を決める際に、各種のパラメタを調節して、最も効率的なものにするという問題には、きっと遺伝的アルゴリズムが有効だと思われる。 なぜなら、鳥は遺伝的アルゴリズムの本家の“自然選択”によって効率的な翼に進化させたと思われるからである。

 このように考えることによって、突然変異はさておき、自然選択によって進化していくことは、十分にあり得ることだろうと、筆者は納得できた。


6-d やはりコピーミスで進化する

 業務パッケージのカスタマイズについて考えていたある時、筆者は 「コピーミスによって進化することもあるな」 と急にダーウィンの信奉者に改宗することになった。 これは生物学鑑賞の成果かもしれないし、プログラムに対する考え方が変わってきたためかもしれない。

 世の中には、パラメタの組合せの中から最適な組合せを選ぶという問題だけではなく、新たなものを創造して解決しなければならないという問題もある。 いわば、○×式の試験問題としては使いにくいような問題が厳然として存在するのである。 本書では、創適応の必要性が小さい領域はパラメタカスタマイズで解決できるけれども、創適応の必要性が大きい領域はそうはいかず、プログラムカスタマイズが必要になると述べた。 プログラムカスタマイズとは、新たなプログラムを創造して解決することに他ならない。

 このような新たな創造を必要とするような問題に対しては、パラメタカスタマイズに相当する自然選択や人為陶汰という手段ではお手上げである。 したがって、何らかの創造的な活動が必要になる。 そして、“創造的な活動を行うものとしては突然変異以外には考えられない”ということに気がついて、ダーウィンの信奉者に改宗したのである。 一般に、創造的な活動には、突拍子もない思い付きを必要とするものである。

 ところで、ものが創造されるということは、普通にはめったに起きないので、そうしたものは大切に育てることが必要だと思われる。 こう言ったが、もちろん、新たに創造されたものが箸にも棒にもかからないものであれば、自然選択の機構を使って捨て去るしかない。 しかし、少しでも良いものであれば、温存すべきであるし、素晴らしいものであれば再利用すべきである。 ダーウィンは、素晴らしい創造は自然選択のフィルタを通過して広く再利用されるようになると言った。 こう考えると納得のいくことである。

 それでは、あまり良くも悪くもないような創造が行われた場合、突然変異の行方はどうなるのだろうか?

 既に世界的に認められている木村資生博士の分子進化の中立説では、生物個体にあまり有利でも不利でもない突然変異が発生した場合に、そうした突然変異が遺伝的浮動によって種全体に広がっていったり消え去ってしまったりというランダムな動きをすることを指摘している。 したがって、有利でも不利でもない突然変異は、生物種のもつ遺伝子プール (すなわち部品ライブラリ) の中にある期間だけ温存されることになる。 そして、いわばパラメタとしての選択肢を広げる働きをするのである。 なお、各細胞は染色体を2本ずつもつ (すなわち DNA 情報を二組もつ) という冗長な点が遺伝子プールの形成に役立っているといえる。

 生物個体にあまり有利でも不利でもない突然変異は、穏やかな環境が保たれている時代には、遺伝子プールに住み着いて、遺伝子プールをバラエティに富むものにすることだろう。 そして、ひとたび環境変化が生じて厳しい時代をむかえると、自然選択による選別によって脚光を浴びるスターになったり、逆に淘汰されたり、あるいは今までどおり温存され続けることだろう。 このことは、次のように考えるとその意味が明確になる。つまり、突然変異によっていろいろな問題に対する対処法をあらかじめ発明 (創造) しておいて、それを温存しておくことができれば、環境変化が生じたときに素早く対応できる。 すなわち、進化をスピードアップさせることができるのである。 なぜなら、ちょうどその時に都合のよい突然変異が起きなくても、それ以前に“後から都合の良くなるかもしれない突然変異”が起きていて、それが温存されていればよいからである。 そして、もしもそういった突然変異が温存されていれば、いざというときにそれをコピーして増やすことは自然選択の機構が短期間に上手にやってくれる。 したがって、何の備えもせずにいつ起きるかもしれない突然変異を待つより、ずっと速く新たな厳しい環境に適応できることになる。

 ダーウィンは、進化の中における創造性の役割をあまりにも鋭く指摘したために、筆者は素直にそれを信じることができなかった。 しかし、ここに述べたように考えることで、ダーウィンの信奉者になることができた。 やはり、突然変異というコピーミスは、進化にとって“創造”という重要な役割を担うものだということができる。


6-e 進化のスピードと部品化再利用

 DNA 情報を利用する生命という自己複製システムは、38 億年前には地球の海に存在していたと言われている。 ところで、自己複製する機械を人間がつくろうとすると、ジャンボジェット機よりもずっと複雑な機械になってしまうとのこと。 そのような複雑な自己複製システムがどうして自然に生まれ出てきたのかに関しては、いろいろな説があり、生物学鑑賞の1ジャンルを形成している。 ここで、機械ではなくソフトウェアに着目すると、比較的に簡単に自己複製するものがつくれることが分かる。 すなわち、コンピュータウイルスは、正に自己複製するソフトウェアであり、既に四万種もつくられていて、さらに毎日数個ずつ増え続けているとのことである。 自己複製する機械とソフトウェアとを対比して考えると、生物を構成する分子群は、言葉で表せないほど幸運なことに、自己複製システムを構築する素材として都合のよいものであったということが想像できる。 ただし、こうした生命の起源に関しては、まだ諸説紛々の状態である。 したがって、これ以上は立ち入らずに、本書ではダーウィンを模して、とにかく自己複製システムがあったということを前提にする。 そして、生物の進化を鑑賞してみよう。

 なお、ここで進化のスピードといっているのは、環境への適応の速さのことである。 進化とは、正統的には変化とほとんど同じ意味であり、いわゆる進歩とは関係ないということになっているので、人間のようないわゆる高等動物になることが進化ではないのである。 したがって、ここでは素早く環境に適応できるようにするにはどうすればよいのかという問題を考えることにする。 いわばカスタマイズのスピードを問題にするのである。

 生物に爆発的な多様化が始まったのは、6億年前のカンブリア紀の始めだとされている。 それ以前の 32 億年間はゆっくりと進化した先カンブリア紀として区別されている。 なぜ、カンブリア紀の始めに多様な生物が現れたのかに関しては、いろいろな説があるが、筆者は進化をスピードアップする機構を獲得した (進化させた) からだと考えている。

 進化をスピードアップする方法には、たとえば DNA 情報の情報交換を挙げることができる。 単純な無性生殖と突然変異の組合せによる進化は、直列的に進むだけであるが、生物個体のお互いの DNA 情報を情報交換できれば、進化が並列的に進むことになりスピードアップする。 たとえを挙げると、他人との情報交換が一切できない環境で新たなものを創造する場合は、すべてのアイデアを自分一人で思い付かなくてはならないが、他人との情報交換ができれば、他人のアイデアも再利用できるので、仕事がはかどるというものである。 したがって、ある生物個体に発生した好ましい突然変異だけでなく、他の生物個体に発生した好ましい突然変異を混ぜ合わせて、双方の好ましい性質を獲得できれば、進化がスピードアップされることは明らかである。

 DNA 情報の情報交換は、DNA 情報を混ぜ合わせることによって行われる。 単細胞生物の DNA 情報を混ぜ合わせる機構としては、接合と呼ばれる一種の有性生殖がある。 この他に、ある細胞から別の生物個体の細胞へと、ときには種の壁をこえて、DNA 情報が水平伝播される形質導入も知られている。 形質導入とは、バクテリオファージと呼ばれる“細菌などに感染するウイルス”が、ある細胞の一部の DNA 情報を取り込み別の細胞に組み込むことである。 このような DNA 情報を混ぜ合わせる機構はいろいろあるようであるが、どれがどの時期からどれだけ効果的に働いたのかについて正確なところは筆者には分からない。 ここで言えるのは、これらが進化をスピードアップさせる働きをすることだけは確かだということである。

 このような機構を獲得した単細胞生物は、カンブリア紀の始めに多細胞生物として爆発的な多様化、すなわち進化をなしとげたのだと思う。 この前提として、単細胞生物から進化した多細胞生物が多様な形態を取り得ることは、生物発生装置を使って説明したとおりである。 つまり、生物発生装置に様々な適切な DNA 情報をインプットすれば、発生の際の微妙なコントロールがなされて多様な形態の生物個体が発生してくるからなのだ。 なお、多細胞生物は、DNA 情報を混ぜ合わせる有性生殖という機構を備えていることは、ご存じのとおりである。 しかも、父母から半分ずつもらった DNA 情報を本当に混ぜ合わせる交叉と呼ばれる現象も起きるようになっているのである。

 DNA 情報を混ぜ合わせる以外に、進化をスピードアップする機構としては、大野乾博士の提唱する遺伝子重複も実際に効果を発揮したと考えられる。 遺伝子重複とは、有効に働いている遺伝子のコピーをつくっておくと、その部分に突然変異が発生したときに、有効な機能が得やすいというものである。 本書で述べた部品カスタマイズの一法に似ていて、親近感のもてるものである。 たとえば、“得意先小売店コード部品”をコピーして、その一部を変更することによって“一般顧客コード部品”にするような部品カスタマイズは、遺伝子重複の応用だということができそうである。 大野乾博士が説く 「生物の進化と同様に、人類文化の発展も一創造百盗作」 という名言は、部品化再利用の推進する上で味わい深いものである。

 なお、遺伝子重複のためには、子孫に伝える DNA 情報をそっくりそのままコピーするのではなく、一部分を重複してコピーする機構が必要になる。 こう考えると、DNA 情報のエディタの必要性からその存在が予想できる。 そして、実際に、DNA 情報を切ったり貼ったりするエディタに相当する機構の存在が知られている。

 地球のこれまでの歴史を1年にたとえると、3月ごろに生命が誕生して、11 月の中旬に多細胞生物が出現するとともにカンブリア紀の生物の爆発的な多様化が生じて、12 月 26 日の午後に恐竜の絶滅があって、それまで小さな存在であった哺乳類が台頭することになり、12 月 31 日の午後に人類が誕生したのだということになる。 ちなみに、コンピュータは、この割合でいうと、1秒に相当する 150 年の歴史さえもっていない。 生物は、ある時期に進化をスピードアップする機構を獲得し、すなわちいわば効率化のためのツールを進化させ、さらに創造した成果を再利用することによって、その後の進化のスピードが速くなったように思えてならない。

 そして、進化のスピードアップの極め付きは、DNA を媒体にするのではなく、ニューロン (神経細胞) に情報を蓄えて高速に処理する脳を形成するように (DNA 情報が) 進化したことによって生み出された進化である。 つまり、人間に代表される動物が知能を発揮できるように進化したことは、新たな別の進化の流れを生むことになった。 すなわち、DNA を媒体にする遺伝子 (gene) の他に、ニューロンを媒体とするミーム (meme) が新たに登場して、 遺伝子とほとんど独立に、ほとんど無関係に進化し始めることになったのである。

 “利己的な遺伝子 (selfish gene)”という表現で進化の本質のある一面を鋭くついたドーキンス (Dawkins,R.) によると、ミームとはニューロンを媒体として、感覚器官を通してコピーされる情報のことを指す。 そして、ミームの表現型には、シジュウカラの牛乳瓶の蓋あけとか、ニホンザルの芋洗いのようなものが挙げられる。 さらに、人間の泳ぎのスタイル、農業の方法、言語、宗教、ハングライダによる空の飛び方、ヨットレースの奥義、単純生産性を重視したプログラミングの方法などの多くの文化の産物を挙げることができる。

 ミームという言葉を使って筆者の心情を述べると、本書の内容のベースになったミームたちが多くの人々のニューロンというビークル (乗物) に乗り移って繁栄して、単純生産性を重視するようなミームに置き換わることを願っているということができる。


6-f 高対応性部分と低対応性部分

 進化をスピードアップするには、突然変異が起きるだけでなく、DNA 情報のエディタ、情報交換を行うための仕組み、および役に立ちそうな DNA 情報を温存させる遺伝子プール (ライブラリ) などの働きが重要であることを述べてきた。 ここでは、進化のスピードアップには、これらの他に DNA 情報とその表現型との対応関係が重要であるという筆者の仮説を述べる。 いわば、ツール類に着目するだけでなく、プログラムそのものの構造に目を向けてみる。 なお、ここでは話を単純化するために、無性生殖の場合について考えてみよう。

 プログラムや DNA 情報などは、その表現型との関係に着目して“高対応性部分”と“低対応性部分”の二つに分類すると興味深いことが見えてくる。

 DNA 情報には、その表現型である生物個体の各器官などとの対応がとりやすい高対応性部分と、そうではない低対応性部分があるように思われる。 たとえば、遺伝の実験でよく使われたショウジョウバエについては、その遺伝子マップが作られていて、遺伝子のどの部分がショウジョウバエの目や口や羽などに対応するのかが分かっている。 こういう部分は高対応性部分だといえる。 これと同様に、遺伝子マップがまだ作られていない生物についても、DNA 情報のある部分が目や口などに明確に対応する高対応性部分だということがいえるだろう。 しかし、ショウジョウバエの卵から成虫の個体になるまでの発生を制御する仕組みに関しては、DNA 情報のどの部分がどう関係しているのかはまだ分かっていないようである。 こういう部分は、DNA 情報と発生のプロセスとの対応関係が複雑なために、その研究がなかなかはかどらないのだと思う。

 プログラムも同様に、高対応性部分と低対応性部分に分けられる (図6-1 参照)。 高対応性部分とは、外部から見ることのできるアウトプットや振舞い (すなわち機能仕様) との対応が取りやすい部分であり、機能仕様を変更しようとしたときに、プログラムのどの部分をどう直せばよいのか対応が取りやすい、メンテナンスしやすい部分のことである。 逆に、低対応性部分とは、機能仕様との対応が取りにくいメンテナンスしにくい部分である。

 たとえば、プログラムから発せられるメッセージを記述した部分は、一般には高対応性部分だといえる。 しかし、メッセージを複雑な方法で組み立てたりすると、そういう処理を行うプログラムは普通、低対応性なので、総合的にはメッセージ部分も含めて低対応性になってしまう。

 逆に、プログラムから発せられるメッセージを一個所にまとめて配置し、わかりやすい順序 (あいうえお順など) に整理して並べておけば、よりメンテナンスがしやすくなる。 これは高対応性部分を鮮明にしている例である。

 ところで、プログラムは、同じ機能を果たすようなものを何種類となく作れる。 したがって、開発者の考え方や作り方ひとつで、プログラムは千変万化、違ったものになってしまう。

 ちなみに、本書では他人のつくったプログラムは一般に解読するのが困難なことを説明したが、その根底にはプログラムはバラエティに富むという事実がある。 仮に同じ機能を果たすプログラムは、誰がつくっても同じものになるとしたら、自分でつくったプログラムと他人が作ったプログラムの区別がつかないので、他人が作ったプログラムを自分でつくったプログラムのように簡単に解読できてよさそうである。 しかし、実際には同じにはならないのである。

 同じ機能のプログラムでも千変万化、様々な形があるので、プログラムをつくるときに高対応性部分と低対応性部分をよほど意識して分離するようにしないと、ひどいことになってしまう。 つまり、高対応性部分と低対応性部分が混ざってしまうのである。 情報理論の中でもエントロピー増大の法則があって、区別しようとしない場合には一般にごちゃ混ぜ (混雑) 状態になるものである。 したがって、たとえ高対応性部分があったとしても、それは低対応性部分と混ざってしまい、混ざったものは低対応性だとみなされてしまうことになる。


 世の中のプログラムの多くは、高対応性部分 (X印) を鮮明にして、その部分を切り出す努力がなされていないので、高対応性部分と低対応性部分がごちゃ混ぜになっているものが多い。

 高対応性部分と低対応性部分がごちゃ混ぜになると、高対応性部分 (X印) と明確に対応していたモノ (○印) との対応関係がとれなくなってしまう。

     図6-1: 高対応性部分と低対応性部分

 ここである生物個体の DNA 情報の中の高対応性部分と低対応性部分がごちゃ混ぜになっていると仮定してみよう。 たとえば、体の色を黒くすることに対応する遺伝子が一つだけであれば分かりやすいのであるが、ごちゃ混ぜになっているために、遺伝子 A、遺伝子 B、遺伝子 C、... に関係しているとしよう。 そして、これらの遺伝子が特定の値を取らないと体の色を黒くすることはできないとしよう。 こうすると、体の色を黒くするような進化はほとんど不可能になる。 なぜなら、遺伝子 A が黒A という値をとり、かつ遺伝子 B が黒B という値をとり、かつ遺伝子 C が黒C とり、かつ ... ということをすべて満たす突然変異が起きる確率は非常に低いからである。 したがって、そういう進化はほとんどあり得ないはずである。

 このことから、生物においては、一つの遺伝子だけの突然変異で新しい形質を獲得できるようになっている (高対応性になっている) のが普通だと思われる。 もしも、こうなっていない生物がいたとしたら、環境変化に対応できずに絶滅してしまったか、絶滅する運命にあるか、あるいはそうなっていない部分は適応度との関係が薄いはずである。 したがって、高対応性になっているのが普通であろう。 なお、生物の各器官が分化しているのは、表現型である生物個体が DNA 情報の高対応性部分によって浮き彫りにされたものであるためだと思われる。

 さらに大胆な仮説を言うと、発生を制御する仕組みに関しては低対応性だと思われるので、この部分の進化は極めて遅いことが推測できる。 つまり、発生の制御に関するほとんどの突然変異は、生物個体を発生不能にすることになると考えられる。 このことは、プログラムのコピーミスをすると、大抵は動作不能になるという経験に対応することである。 ただし、こういう根っこの部分に起きた一つまたは複数の突然変異が受け入れられるものであったとすると、それは生物個体の構造を変えるような大進化につながる可能性が高いといえそうである。

 生物個体ではなく、プログラムとその表現型である機能仕様との関係をみてみよう。 世の中のプログラムの多くは、高対応性部分を鮮明にして切り出す努力をしていないので、高対応性部分と低対応性部分がごちゃ混ぜになっているのが現状だといってよいだろう。

 たとえば、プログラムに新たな機能などを付け加えるときに、プログラムの何個所かに同時に手を入れなければならないのが普通である。 一個所に手をいれるだけで狙った機能が獲得できることは極めてまれなのである。 これは、高対応性部分と低対応性部分がごちゃ混ぜにはなっている証拠だと思われる。

 プログラムについても、高対応性部分と低対応性部分のごちゃ混ぜ状態を解消できれば、高対応性部分に関する限りは一個所に手をいれるだけで狙った機能が獲得できることが普通になるはずである。 「プログラムというものはすべてメンテナンスしにくいものだ」 というのは誤解なのである。 高対応性部分は、本来は大変にメンテナンスしやすいものなのである。 したがって、高対応性部分を鮮明に切り出せばよいのである。こう考えるとリファクタリングの意味が納得できよう。

 生物界では、ごちゃ混ぜだということは進化不能の状態であることを意味する。 しかし、プログラムについては、開発者という人間の知能が進化の手助けをするので、いわば数多くの遺伝子に同時に都合よく突然変異を起こさせることができる。 したがって、ごちゃ混ぜ状態でも、プログラムを新たな環境に適応するように進化させることができる。 このことに頼ってしまい、高対応性部分を鮮明にして切り出す努力がなされていなかったのが、これまでである。

 ‘ビジネスロジック部品技術’を用いると、高対応性部分を鮮明にして切り出すことになるために、少なくとも高対応性部分についてはメンテナンスやカスタマイズが誰でも簡単に行えるようになる。 というのは‘ホワイトボックス部品’でカバーできるような領域は、高対応性部分であることが普通だからだ。 このことは、「‘ホワイトボックス部品’に求められる性質」 を思い出していただければ分かることである。 高対応性部分の具体例としては、‘ホワイトボックス部品’でカバーされる業務仕様に関係するプログラムを挙げることができる。 実際に、この部分はデータ項目と対応づけることができる高対応性部分だといえる。

 ところで、一般に高対応性だと考えられている部分も、その中をある視点から詳しく見るとごちゃ混ぜ状態のところが見いだされることがよくある。 たとえば、ビジュアル開発支援ツールのイベントプロシージャは、各コントロールとの対応関係が明確なので一般には高対応性だと考えられているが、簡単には再利用しにくい。 そして、この事実によってコントロールという視点からは高対応性かもしれないが、データ項目という視点からは区切りがぼやけていることに気づかせられる。 もしもデータ項目という視点から高対応性になっていれば、データ項目に対応する再利用 (こうした形の再利用が簡便であり求められる) が簡単にできるはずである。 実際にアップデートプロパゲーションの機構を備えた部品化イベント駆動方式を採用することによって、データ項目ごとの切れをスパッとよくして、メンテナンスやカスタマイズがしやすいデータ項目部品にすることができた。 このことは、「3.2.3 SSS から RRR ファミリーへ」 の中の 「部品を区切る分割指針に関する改善点その2」 で述べたとおりである。

 オブジェクト指向の本質は、ソフトウェアの構成を設計する際に現実世界のモノとの対応関係を重視しようという点にある。 したがって、高対応性部分を鮮明に切り出して、モノとの対応関係を明確にすることは、オブジェクト指向の本質にかなったことだといえる。

アプリテック株式会社
アプリテック株式会社
Copyright © 1995-2008 by AppliTech, Inc. All Rights Reserved.