見出し画像

発生学からソフトウェアアーキテクチャを考察してみよう1

こんにちは。動物の構造をソフトウェアの構造に活かせないか考えてみます。

構造とは

動物の構造、またはソフトウェアの構造と聞いてわからないひともいるかもしれません。まずはこの記事での構造の意味を明示しておきます。

構造:各モジュールのつながりの全体

この時モジュールは粒度を問いません。動物の場合、各筋肉、骨と脳のつながりも構造ですし、すべて細胞のつながりも構造となります。ソフトウェアの場合、サービス間、コンテナ間、クラス間など様々な粒度が考えられます。

なぜ動物の構造なのか

動物とソフトウェアは似ても似つかない存在ですが、動物の構造をソフトウェアの構造に活かす、もしくは置き換える利点とは何でしょうか。

ソフトウェアは人間がアップデートを繰り返して進化していきます。しかし、システムが複雑になるほど構造が壊れていき、「つながり」から「絡まり」になっていきます。そしてバグがなかなか治らないシステムが出来上がってしまいます。

では動物はどうでしょう。動物改め脊椎動物は5億年前に発生し、自然の厳しい環境変化に対応するため今現在もコンスタントに進化し続けています。その結果、人間という非常に複雑な動物まで生まれました。しかし、ソフトウェアのような致命的なバグは多くありません。もちろん外傷によるハードウェア的なバグは起こりますが、デッドロックなどの問題は一切聞いたことがありません。また、後述しますが、膨大な種類が存在する脊椎動物は巨視的にみるとすべて同じ構造をしています。つまり、動物は同じ構造を5億年もの間再利用し続けたことになります。

このように比較してみると動物の構造がいかに優れているかがわかります。そして、動物の構造をソフトウェアに活かすことができれば優秀なアプリケーションが出来上がるのではないでしょうか。

人体発生学

今回、動物の構造を調べるために使う道具が人体発生学になります。人体発生学は人が受精卵から成体になるまでの過程を研究する学問です。一見、構造と発生は異なるもののように思えます。しかし、動物の発生の特徴を考えると動物の構造を調べるのに有用であることがわかります。

  1. 「機能的分化」胚は部位や場所によって分化し、3Dプリンターのように成体を作るわけではありません。判断する部分、運動をする部分、エネルギーを生成する部分といったように機能ごとに分化していきます。このため機能的なつながりを把握しやすくなっています。

  2. 「抽象度の高い枠組みからミクロな機能に分化する」大きな抽象度の機能を持つ部分からその機能のための小さな抽象度の機能を持つ部位が分化します。ある物事を説明するときに最も重要なのがある一定の抽象度で説明することです。例えば、生物、化学、物理は抽象度が異なります。生物の学問を説明するときによく使われるのは化学、化学の学問を説明するときによく使われるのは物理であり、生物の学問を説明するときに化学と物理の分野をごちゃごちゃにすると無駄にややこしくなってしまいます。胚は発生の時系列で全体の抽象度が下がっていくので同じ時期の胚を調べることである一定の抽象で説明することがとても簡単にできます。

胚発生のルールからソフトウェアアーキテクチャルールを探る

具体的な構造を考える前に胚発生のルールについて考えましょう。胚発生にもルールがあります。上に書いた二つもその内ですが、ソフトウェアアーキテクチャのルールを考えるためにもう少し胚発生のルールを紹介します。

  1. 「胚発生において一般性が特殊性より先に現れる」一般的な動物の機能ができてから種特有の機能が作られます。ルール2より、マクロな枠組みがミクロな機能より先にできるので一般性が高いほどマクロな機能になることがわかります。また、マクロな機能からミクロな機能に分化するのでルール3´「一般性が高いマクロな枠組みから特有の詳細的機能が分化する」と言えます。

  2. 「個体発生は系統発生を繰り返す」動物胚が成長するときに進化の過程を再現します。ルール3’より「一般性が高いマクロな枠組みから特有の詳細的機能が分化する」ことが進化(アップデート)であると考えられます。

これらを踏まえると「一般的かつ抽象度の高い構造(枠組み)を作ってから特有の詳細的な機能を実装し、環境に対応していく」というルール(方針)が考えられます。

結論

今回は動物の構造をもとにソフトウェアの構造を考察するという発想の紹介、その考察に使う人体発生学という道具についての説明、そして発生学のルールからソフトウェア開発の方針を考察してみました。次回は実際に人体発生学を使って人間の発生を追い、人間の構造を理解していこうと思います。良ければ次回もご覧いただけると幸いです。

次回:人体発生学からソフトウェアアーキテクチャを考察してみよう2|むら|note


この記事が気に入ったらサポートをしてみませんか?