アーキテクチャ、複雑さへの挑戦

設計におけるシンプルさと複雑さ

突然ですが質問です。皆さんは自分の作ったものに対し、シンプルに出来た、と思ったことがありますか?私も自問自答に対し、はいと返事したくはなりますが、それがまれな経験であることも否めません。設計者は、何かがシンプルであること自体、それが価値を持つものであると認めています。そもそもシンプルとはどういうことでしょうか?

simple: not difficult or complicated to do or understand (LONGMAN)

物事を実行したり理解したりするときに複雑でない様子。思い浮かぶ情景としては:

  • そこに何かがあってこれを使おうとしている。使ってみて難しくなければこれはシンプル
  • そこに何かが書かれてあってこれを理解しようとしている。容易に理解できればそれはシンプル

といったところでしょうか。つまり設計におけるシンプルさとは、ユーザーにとって使いやすく理解しやすいということになります。これが正しければ、機構の部品点数が少ない、或いはソフトウェアのソースコードの行数が少ないからといって、必ずしもシンプルだとは言えないことになります。特にソフトウェアの世界では、シンプルさとは非機能要求でいうところの使用性、可読性にすぐれている様子、といって間違いありません。

シンプルさは、永遠の課題のように思えます。ソフトウェアエンジニアは、常に複雑さとの闘いを強いられます。原因はいろいろありますが、次のようなものでしょう:

  • 要求そのものが複雑
  • 複雑なソフトウェアを流用する必要がある

与えられる要求と制約がすでに複雑であるのに、設計やコードはシンプルにはなりません。できることは、それを複雑でないようなものにしようとする努力だけなのです。

複雑さとの闘い

ソフトウェアエンジニアリングの世界では、次のような方法で複雑さとの闘いに挑んできました:

  • リファクタリング(改善とその継続)
  • カプセル化(複雑なものの隠ぺい)
  • インターフェースの標準化(使い方の統一)
  • デザインパターン(汎用型の導入)

これらはそれぞれが密接に関係しており、うまく使えればそれなりに複雑さと闘えるようになります。しかし、十分ではありません。ソフトウェア設計とは、とどのつまりは構造とインターフェースを決める行為になります。外部インターフェースは、機能要求が決まった時点で決まることが多いといえます。しかし、構造、特に全体の構造に関するものの考え方をまとめたものは、多くありません。その代表的なものがデザインパターンといえるかもしれませんが、これは局所的なものです。全体の構造が決まらなければ、内部のインターフェースも決まりません。

3という数字の持つ可能性

もしも、将来にわたって繁栄可能なアーキテクチャを知ることができれば、これほどありがたいことはありません。そう考え続けた結果、たどり着いた考え方の一つが、3分割という方法です。つまりレイヤーや内部的な役割分担を考えたときに、そのシステムが最も効率的に高い汎用性や拡張性を持ち得る最小の分割数、それが3であるという考え方です。3はとても強力な数字です。私は、何かの設計や方法、特に非機能要件を満たすための考えが3を基準にしてない場合、必ず追加的な要求や制約、もしくは問題があると考えるようにしています。その考えに至った理由、それは昆虫です。

昆虫は、地球上でもっとも成功した生物です。哺乳類や鳥類の種類がせいぜい数千種であるのに対し、
昆虫は95万と圧倒的に多く、地球上のありとあらゆる環境に進出しています。
その理由は、昆虫が体表を硬化させることに成功したからと言われています。
その進化に最適だった構造、これが3分割なのではないかと思うのです。
3分割した昆虫の体の各パーツにはある程度共通した役割が与えられています。このルールを逸脱せず
進化し成功していることに感動すら覚えます。

物体の自立に3点の支点が必要なように、人間が黄金比なるものを美しく感じるのと同様、3は現実世界で必要であって十分な数であるような何かとして、我々に影響を与えているのではないかと思います。

究極のアーキテクチャ

私は、進化はアーキテクチャの洗練の歴史と捉えています。昆虫は、地球上での成功を謳歌しているかもしれませんが、彼らにできなかったことがあります。大型化です。それには、脊椎という構造が必要でした。大型化を含む高度な構造化はさらなる多様性を生み、高度な進化を可能にしました。

もしも、進化の最終形を知ることができたなら、これこそが究極のアーキテクチャであると信じます。それは、私たちの体に近いものなのではないでしょうか。複雑なシステム、それは挑戦すべきものであって、それ自体が目標なのかもしれません。なぜなら、我々は人体というシステムを完全に把握出来ていないのですから。

おわりに

私の扱うエンベデッドシステムにおいて脊椎にあたるもの、それはインターネットに代表されるネットワークだと考えています。ネットワークを得ることによって、システムは劇的な発展を遂げました。当社も、このネットワークの誕生によって恩恵を受けている会社の一つです。そして高い技術によって人間の持つ能力の超越に挑戦し続けています。

P.S.
3の例:

  • 高等生物の目。光の3原色
  • 俳句。漢詩が4の構造をとるのは、文全体構成の美しさという非機能要件を足したから
  • 写真構図の3分割法。縦横をそれぞれ3分割することにより写真が良くなる
  • 組み込みソフトウェアのアーキテクチャ。ドライバ・サービス・アプリケーション
  • 名著「リファクタリング」の主張するリファクタリングを開始するコードの重複数、3
  • 二礼二拍一礼(神道の参拝)
  • お相撲さんが懸賞を受け取るときの手の動き(造化三神)
  • オリンピックのメダルの種類
  • 生活のための家。地下室付きの二階建てがベスト

だんだんこじつけですらなくギャグになっているような気もしますが、いかがでしょうか。

最新情報をチェックしよう!

トミーの最新記事8件